实战篇——文件包含漏洞(1)
本地文件包含
本地文件包含一般需要依赖文件上传漏洞。如果文件上传漏洞限制上传文件的后缀必须为.jpg,那么配合本地文件包含,就可以通过上传图片木马获得服务器权限。
上传图片木马:
![](/i/l/?n=23&i=blog/3466696/202407/3466696-20240707163520075-44140099.png)
利用本地文件包含,成功连接一句话木马:
可见本地文件包含最大的缺陷在于需要依赖文件上传漏洞,下面着重介绍不依赖文件上传漏洞获得服务器权限的方法。
远程文件包含
远程文件包含就是利用http://伪协议包含第三方服务器上的文件。如果第三方服务器可控,那么就可以利用第三方服务器上的一句话木马获得目标服务器的权限。远程文件包含的前提条件是在php.ini配置文件中allow_url_fopen和allow_url_include必须同时开启。
需要注意的是,利用远程文件包含包含的文件后缀不能是.php,否则将因先解析后包含而无法连接一句话木马:
解决办法就是将后缀改为任意非.php的后缀,这样就可以先包含后解析:
data://伪协议
data://伪协议文件包含的前提条件是在php.ini配置文件中allow_url_fopen和allow_url_include必须同时开启。
首先准备一句话载体:
然后对一句话载体进行base64编码,并对末尾的+进行url编码:
执行,即可连接一句话木马:
php://input伪协议
data://伪协议文件包含的前提条件是在php.ini配置文件中allow_url_include必须开启。
抓包,添加一句话载体,发送:
成功连接一句话木马:
日志投毒:
日志投毒就是将一句话木马植入错误日志中,通过包含错误日志获得服务器权限。由于日志投毒本质上是本地文件包含,因此对php.ini中的allow_url_fopen和allow_url_include两项配置没有任何要求。
日志投毒的前提是需要知道错误日志的路径,如果存在phpinfo泄露,可以通过apache2handler中的Server Root得到apache的安装路径,进而得到错误日志的路径。
错误日志的路径为C:/phpStudy/PHPTutorial/Apache/logs/error.log。
将一句话木马嵌入路径:
抓包:
可见URL已被自动URL编码,必须将其还原,否则将无法连接一句话木马。
将一句话木马还原并发送:
成功连接一句话木马:
.html绕过
通过拼接.html包含文件是一种常见的做法:
此时将无法直接连接一句话木马:
第一种绕过方法是00截断(适用于所有文件包含方式):
第二种方法是通过添加大量的'.'或' '实现路径截断(只适用于本地文件包含和日志投毒):