写在前面:合法学习边界
本文复现只在本机靶场进行。Log4Shell 影响面极广,禁止对真实系统触发 ${jndi:...} payload。
一、漏洞原理
Log4j2 的日志格式化支持 ${} 查找表达式(Lookup),其中包含 JNDI 查找。攻击者只要把 ${jndi:ldap://...} 塞进任何会被日志记录的字段(用户名、User-Agent、参数),服务器记录日志时就会发起 JNDI 查询,加载远程恶意对象 → RCE。
核心链路:
| |
影响版本:Log4j2 2.0 – 2.14.1(CVE-2021-44228)。
二、影响与危害
| |
风险等级:严重,是 2021 年影响面最大的漏洞之一。
三、利用 / 复现
环境准备
靶场:一个用 Log4j2 记录日志的 Java 应用;攻击机:JNDI 工具(如 JNDIExploit)+ 监听端口。
第一步:用 DNSLog 验证是否存在
构造不执行命令、只做 DNS 回显的 payload:
| |
放到 User-Agent 或用户名里,触发一次请求,到 DNSLog 平台看有没有收到解析记录。
第二步:执行命令(授权环境)
| |
攻击机 JNDI 服务返回恶意类,目标执行命令或反弹 Shell。
常见触发点
| |
四、检测
| |
五、防御
| |
六、修复
| |
七、小结
Log4Shell 的教训是“日志输入也是攻击面”:凡是会被记录的不可信字段,都可能成为 RCE 入口。防御核心是升级 + 关闭 JNDI + WAF 拦截,并把它纳入组件漏洞清单持续监控。