绕过open_basedir思路(蚁剑插件演示)
2019-07-01 16:21:56 Author: mp.weixin.qq.com(查看原文) 阅读量:101 收藏

前言

    可能思路之前有人提过吧,要提过的话就是我目不识丁。后面有个视频会演示最终实现效果。


open_basedir 和 disable_functions 是什么

    作为一篇有理有据的文章,有必要在一开始先解释一下 PHP 的 open_basedir 和 disable_functions 这两个配置是什么。如果不会的话,先去找找资料查查手册。OK, 来说下一个话题。


结论

    执行系统命令,利用 php cli 在目标机器本地开启一个新的web服务,然后再用受限制的 webshell 转发请求到新开启的服务上去。

php -n -S 127.0.0.1:61111 -t /var/www/html/

解释一下里面的几个参数:

-S 127.0.0.1:61111 : 新web服务监听地址

-t /var/www/html/ : 新http服务的Web根目录,可随便指,只要保证那个目录下面有个 php webshell 就行,建议是直接指定成 shell 当前目录

-n : 表示不使用 php.ini, 这个新的服务PHP用的是默认配置,核心所在

当然思路不止这一种,你可能已经想到了用 反弹bash,py,perl 等等思路。

设想一种比较极端的情况:

    目标机器无法主动外连,并且入站只有80端口可访问,目标机器上面不保证一定有python, 不一定有 perl。我们能肯定的是,应该是有php的但美中不足的是PHP在5.4版本才引入了 -S 这个内置web服务器

    最终我们就把整个绕过暴力的简化成了绕过disable_functions,一下子就清爽了许多。至于怎么绕过disable_functions 不是这篇文章的重点,像什么 LD_PRELOAD, mail, imap_open, dl, exim, imagick, COM, 还有各种 php 本地堆写入漏洞(CVE-2019-6977,  exp已公开) 都是我们的切入点。


最后

公开出来的bypass disable_functions 方法利用结果五花八门,一开始想整合在一起挺麻烦。按照我们上面说的思路,就可以把利用方式统一起来,编写成AntSword插件,帮助我们更舒服的操作。

后面有机会了再分享把思路插件化的步骤。视频不清晰的话点阅读原文看

哦,差点忘了吹一波了。

    LD_PRELOAD 中用到的 php 扩展,经过「半块西瓜皮」大神的帮助,除了在LD_PRELOAD方式中使用外,还可以应用到 dl 等凡是可以通过加载动态链接库、PHP扩展的利用方式中。并且可以在几乎所有的php版本中放心使用。

改造前,每个小版本都要编译,体积基本在30K左右

改造后,只要4个库,体积最小的只有 512个字节

等我哪天学会了再分享这个


文章来源: https://mp.weixin.qq.com/s/GGnumPklkUNMLZKQL4NbKg
如有侵权请联系:admin#unsafe.sh