考点精讲
- 攻击者将一句话木马写入 User-Agent 等字段,服务器访问日志会记录该内容;再利用文件包含漏洞包含日志文件路径(如 /var/log/apache2/access.log),其中 PHP 代码即被执行。前提是日志路径可预测、日志内容可被写入且可被包含。
记忆技巧
UA
写马 + 包含日志 = getshell
Apache
/Nginx
日志路径要分清
常见误区
- 以为日志包含无需前提——需知道日志路径且可被包含
- 忽略 User-Agent 注入写马这一步
- 混淆日志包含与普通文件包含
真题思路
- 【示例】 日志包含 getshell 的正确流程是()
直接包含 /etc/passwd 读取用户信息 将一句话木马写入 User-Agent → 访问触发日志记录 → 用文件包含漏洞包含日志文件执行 上传图片马到服务器即可 用 sqlmap 枚举数据库
答案:B
解析:日志包含 = 先把木马写入 User-Agent 等被日志记录的字段,再包含日志文件执行其中的 PHP 代码,B 正确。A 是普通文件包含读文件,C 是文件上传,D 是 SQL 注入,均非日志包含流程。
常见问题
Q:日志包含的原理是什么?
A:先把一句话木马写入服务器日志(如 User-Agent 字段),再利用文件包含漏洞包含日志文件,日志中的 PHP 代码即被执行,从而 getshell。
Q:如何把木马写进日志?
A:把一句话木马作为 User-Agent(或其它会被记录进日志的字段)随请求发送,服务器访问日志会把该内容原样记录下来。
Q:Apache 和 Nginx 的日志路径分别在哪?
A:常见路径如 Apache 的 /var/log/apache2/access.log,Nginx 的 /var/log/nginx/access.log(具体路径以实际环境配置为准)。
Q:日志包含需要哪些前提?
A:日志路径可预测、日志内容可被写入(如 User-Agent 可控制)、且日志文件可被包含。三个前提缺一不可。
教材出处:第4章 Web 漏洞 日志包含 getshell