前提知识
在linux 下日志文件权限默认是 root 而php 的权限是 www-data 一般情况下都是读取不了,如果是 windows 环境是权限是允许的。
linux 默认的 apache 日志文件路径是
访问日志
/var/log/apache2/access.log
错误日志
/var/log/apache2/error.log
把文件日志包含进来即可
/proc/self/environ 这个文件里保存了系统的一些变量
实验复现
代码区
index.php
1. <?php 2. include $_GET['file']; 3. ?>
info.php
1. <?php 2. phpinfo(); 3. ?>
测试区
- linux
?filename=../../../../../../../etc/passwd&submit=提交
这里查看日志文件发现权限不够www-data用户进行包含
访问时在url中写入恶意代码,发现被浏览器进行转码
http://192.168.10.139/?%3C?phpinfo();?%3E
使用burp进行拦截发包,此时代码出现在日志文件内(由于权限不够此时无法进行包含)
- windows
发现仍然被编码了
通过burp发包
包含该日志文件
http://localhost:8084/?file=D:\phpstudy_pro\Extensions\Apache2.4.39\logs\access.log.1677801600
而现实是需要先找到今日日志的文件名,因为直接包含access.log会太大导致页面没有响应
我们先包含配置文件D:\phpstudy_pro\Extensions\Apache2.4.39\conf\httpd.conf
寻找logformat
%h %l %u %t \"%r\" %>s %b \"%{User-Agent}i\"
根据预制格式获取文件名
1677801600
- linux环境变量
此时我们在User-Agen写入php代码
查看/proc/self/environ未发现(写入权限不够)