ctf攻防,如何利用phar文件构建php一句话木马?
发布于 作者:苏南大叔 来源:程序如此灵动~

综合前述phar
的各种信息,在本文的内容中,苏南大叔将结合一个较为常见的php
经典require
任何包含文件漏洞,构建一个基于phar
的一句话木马。这里,大家看看下面的php
源码中,为什么上传文件的文件都不是.php
文件,也不是.phar
文件,却被安装执行了木马漏洞呢?

本文测试环境:mac
/php@7.1.7
。
漏洞简述
本文中php
的漏洞点在于:主要基于require
语句中的文件参数,可以由外部控制。然后我们通过文件上传,上传了一个由phar
文件伪装的普通文本文件,再控制参数require
到这个伪装的普通文本。并利用phar
的虚拟文件方式,最终执行了我们的一句话木马。
上述代码,是最主要的漏洞点。
构建一个特殊的txt
文本
当然,这里的txt
文本,也可以是jpg
,gif
等任何正常的可以上传的文件类型。我们通过上一篇的文章中的方法,构建一个包含在phar
文件中的特殊虚拟文件shell
,并把phar
文件改名为txt
文件。

上传txt
逻辑
对于上传代码逻辑来说,这样一个txt
文本是没法拒绝的。上传成功的概率几乎是100%。
构造特殊参数执行一句话木马
因为参数$file
是本文的漏洞所在,所以一个特殊的$file
取值,是本文成功的另外一个关键所在。/upload.php?file=phar://uploaded.txt/shell
这句话实际执行的是:
通过以前的学习,可以知道:上述语句,可以require
到uploaded.txt
这个phar
文件中的虚拟文件shell
。而eval
则是这个木马执行的另外一个关键所在。当然了,这里仅仅是个演示罢了。结合postman
就可以执行任意php
语句了。剩下的事情,苏南大叔就不讲述了,带坏小朋友是不好的。

相关链接
结论
在本文中的,此类一句话木马的防范方法,也是非常简单的。比如:
- 绝对不能相信用户输入的参数,一定要对用户输入的数据进行检测。
- 绝对不能
require
(或者说include
)用户能控制的文件。 - 在
php.ini
中一定要禁用一些危险的php
函数,比如eval
。我们可以在php.ini
中,设置disable_functions
及disable_classes
。但是eval
是特殊的禁用方式。
关于php
的安全问题,也是作为一名合格的phper
所必备的基本功之一。关于php
的安全问题,在苏南大叔以后的文章中,也会有所提及。
更多有关网络安全问题,可以点击这里查看:


