根据提示,漏洞存在于http://xxxxx/hello的payload参数中,并以post的方式传参,因此我们可以利用hackerbar进行漏洞验证
创建靶场后是这样一个页面。
使用payload验证,发现可以触发dnslog,可以确认可以利用
证明存在JNDI注入漏洞。
在这里我们需要用到JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar来生成payload,建立1389和8080端口的服务。用于远程命令执行使靶机来访问我准备好的EXP从而进行更安全的被动连接,即反弹shell。
工具地址:
https://github.com/bkfish/Apache-Log4j-Learning/tree/main/tools
然后使用如下网址来加密反弹shell命令
加密网址:
https://www.jackson-t.ca/runtime-exec-payloads.html
反弹shell方法:
https://www.freebuf.com/articles/system/178150.html
在服务器中监听端口:
nc -lvvp 9999
我这里绑定的是服务器的9999端口(别忘了在服务器安全配置和宝塔安全配置开启端口)
我们使用工具就获得了payload
然后我们在靶场输入我们的恶意payload
点击提交之后我们发现反弹shell成功
修复建议
1、将Log4j框架升级到2.15.0版本:
org/apache/loging/logj/logj-core/5.0
不要用2.15.0-rc1和2.15.0-rc2
2、临时方案
1、升级JDK
2、修改log4j配置
①设置参数:
log4j2.formatMsgNoLookups=True
②修改jvm参数:
-Dlog4j2.formatMsgNoLookups=true
③系统环境变量:
FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS设置为true
④禁止log4j2所在的服务器外连
3、使用安全产品防护:WAF、RASP