banner
十一

十一

Stay hungry, stay foolish.

脆弱性発掘の二大技術と八大テクニック

技術一、JS 暗号化パラメータの逆解析と利用

技術二、FUZZ の精美なアート、成果の直線的向上

技術一、JS 暗号化パラメータの逆解析と利用#

1.1 テクニック一、JS の脆弱性発掘における重要な地位#

1.1.1 JavaScript#

JS:javascript は web ページのスクリプト言語で、主に HTML ページにインタラクティブな動作を追加するために使用され、以下のような役割があります:

  1. HTML ページに動的なテキストを埋め込む;
  2. ブラウザイベントに応答する;
  3. HTML 要素を読み書きする;
  4. データがサーバーに送信される前にデータを検証する;
  5. 訪問者のブラウザ情報を検出する。

1.1.2 HTML、JS、CSS の違い#

  • HTML:未完成の家
  • CSS:内装
  • JS:家を動かし、スマートホームを追加する

1.1.3 JS の脆弱性発掘における重要な地位#

  1. JS にはプラグイン名が存在し、プラグインに基づいて対応する脆弱性を直接利用できる
  2. JS にはいくつかの URL リンクが存在し、URL に基づいて対応するページを見つけてさらにテストと利用ができる
  3. JS にはサブドメインが存在し、サブドメインに直接アクセスできる
  4. JS の一部のコメントはアカウントのパスワードやその他の情報を漏洩する可能性がある

1.1.4 Jsfind#

JsFind を使用して JS 内で漏洩した URL リンクとドメインを検索する(京東)

python jsfind.py -u "http://www.jd.com"

1.2 テクニック二、ブラウザコンソールの使用テクニックと方法#

Screen Shot 2023-05-25 at 12.21.03

ネットワークは全体のネットワークリクエストを監視するもので、トラフィックを監視できます。

  1. キャッシュを無効にする:チェックを入れると、毎回ブラウザからデータを取得します。ペネトレーションテストや脆弱性発掘の過程で開く必要があります。
  2. デバッガー(ソースコード):ウェブサイトの js コードを保存します
    1. 右下の{}をクリックするとフォーマットされます
    2. ブレークポイントを設定できます
  3. コンソール:js 内の関数に対していくつかの操作を行うことができます

1.3 テクニック三、JS ブレークポイントテクニックと Hook 注入#

Hook:python を使用してクローリングやペネトレーションを行い、画像認証を回避するために使用します。

1.3.1 JS ブレークポイントデバッグ#

JS でブレークポイントを設定し、ブレークポイントに到達すると実行が停止します。ステップインを選択すれば大丈夫です。Screen Shot 2023-05-25 at 13.12.42

1.3.2 ブレークポイントの見つけ方#

キーワードに従ってデバッガーでグローバル検索を行い、必要な位置にジャンプし、js 行をクリックすると青色に変わります。

注意:MD5 関数はカスタマイズ可能で、パスワードを解読する際には実際に使用されている MD5 関数を見つける必要があります。

1.4 テクニック四、python と JS を組み合わせて暗号化の難題を解決#

  1. JS コード test.js

    # js 暗号化関数
    function encryptByDES(message) {
      var encrypted = message;
      encrypted = encrypted + "asdfdsaf";
      return encrypted;
    }
    
  2. python を使用して js ファイル内の関数を呼び出す

    # execjsをインストール pip install pyexecjs 
    # pyexecjsは2018年にメンテナンスを終了しましたが、現在はjs2pyを代わりに使用できます
    import execjs
    with open('test.js', 'r') as f:
    	a = execjs.compile(f.read())
    # test.jsファイル内のencryptByDES関数を呼び出し、引数はpassword
    result1 = a.call('encryptByDES', 'password')
    print(result1)
    

1.5 実戦、MD5 暗号化の逆解析と暗号化パラメータの復元#

  1. bp を使用して情報を取得する

    image-20230525143052555

  2. ブラウザコンソールでキーワードpasswordに基づいて検索し、passwordを処理するjs関数を見つける;

  3. pythonコードを使用してjs内のpasswordを処理する関数を呼び出し、エラーメッセージに基づいてfunctionと他のパラメータを補完する;

  4. pythonで得られた値とbpで取得した値を比較し、同じかどうかを確認する;

  5. 同じ場合、pythonを使用してパスワード辞書を処理し、その後bpを使用してブルートフォース攻撃を行うことができます。

技術二、FUZZ の精美なアート、成果の直線的向上(技術)#

テクニック五、一般的な FUZZ の姿勢とツール、辞書(テクニック)#

2.1.1 FUZZ ファジングテスト#

FUZZ:名詞としては「毛羽立ち;ぼやけ;細毛;警官」と訳されます。

核心思想:一部の条件しか知らない場合、非常にあいまいなテストを行い、異なるものを使用して繰り返しテストを行い、望ましい結果を得るまで続ける。

例えば:支付宝での大額送金には、一部の情報を入力する必要があります。

image-20230525160440092

2.1.2 fuzzのテクニックはどこで使用できますか?#

  1. パスワードを解読する際
  2. ディレクトリをスキャンする際
  3. パラメータをスキャンする際
  4. 脆弱性をテストする際
  5. WAF を回避する際
  6. 見えるすべてのパラメータは、実際にFUZZでテストできます
  7. 。。。たくさん、どこでもfuzzできます

FUZZをうまく使えば、脆弱性は少なくなります。

ディレクトリスキャンやブルートフォース攻撃の核心思想はFUZZであり、多くの場合、ツールでは解決できない問題は手動でFUZZすれば、予想外の結果が得られることがあります。

2.1.3 優れた FUZZ のケーススタディ#

2.1.3.1 パラメータFUZZ実戦脆弱性#
  1. あるsrc脆弱性発掘の過程で、興味深いファイルhttp://36...*/upload_image.phpを発見し、アクセス時に内容が空白でした。

    image-20230525161616826

  2. このようなページに対しては、間違いなくパラメータをFUZZしてそのパラメータをFUZZし、doというパラメータフィールドを発見しました。

    image-20230525161942728

    1. http://360...*/upload_image.php?doが使用可能であることを発見しました。
  3. 次にdoというパラメータをFUZZし、bpを使用します。

    image-20230525162247514

  4. http://xxxxx/image_upload.php?do=uploadを構築し、アクセスすると、アップロードフォームが正常に表示され、次のような画面が得られました。

    image-20230525162437460

  5. ファイルをアップロードした後、FUZZアップロードパスを行います。

    http://36.*.*.*/uppload -------> 403
    続けてfuzz
    http://36.*.*.*/upload/images ------->403
    。。。。
    ファイルパスを発見し、URLを構築
    http://36.*.*.*/upload/images/skr_anti.php 
    
  6. その後、リモートコントロールツールを使用して相手のサーバーに接続します。

    image-20230525162958890

2.1.3.2 FUZZ 隠れたパラメータとフィールド#
  1. ディレクトリスキャンで次のようなファイルを発見しました。

    image-20230525163757131

  2. そのファイルを特定します。

    image-20230525163908468

  3. ディレクトリアクセスを構築します。

    提示された情報をURLに構築してアクセスします。
    http://....../start/face_xxx
    インターフェースにアクセスすると、Method Not Allow、405エラーが表示されます。明らかに、POSTでパラメータを送信する必要があります。
    

image-20230525164212452

  1. POSTで適当なパラメータを送信すると、インターフェースがRequest error, content-type was unsupportedと表示されます。

image-20230525164656797

  1. 引き続きFUZZ content-type ヘッダーを行います。

    image-20230525164834369

    image-20230525165033507

  2. FUZZの結果、application/jsoncontent-typeヘッダーが使用可能であることがわかりました。したがって、JSONを構築してFUZZを続け、JSONデータパラメータを送信します。

    image-20230525165344027

    image-20230525165416072

  3. この場所のSSRFを利用して、内部ネットワークのRedisに対してパスワードスプレーとリバースシェルを一括で行い、境界を突破することができます。

    image-20230527171540314

2.1.3.3 JS と FUZZ の組み合わせ#

  1. ログインページにアクセスします。

    image-20230525172014112

  2. アカウントとパスワードを設定し、パスワードのブルートフォース攻撃を開始します。

    image-20230525182334150

    image-20230525182410932

  3. テストしたアカウントとパスワードでログインしても反応がなく、ログインページはただのログインページです。

  4. 諦めるわけにはいかず、ディレクトリをFUZZし、/JS/ディレクトリが存在することを発見し、その中のものをFUZZし始めます。

    image-20230525182834794

  5. 発見したリンクに基づいて URL を構築し、アクセスすると新しいページが表示されました。

    image-20230525183030782

    ここにはlogoutがあり、ログインしていない場所にどうして存在するのか?そこで、下のアカウントとパスワードは先ほどのブルートフォースで得たものであると推測しましたが、どうやらあまり役に立たないようです。

  6. 次にJSファイルを発見し、次のような規則性を見つけました。

    image-20230525183351389

  7. 次にドメインをFUZZし、展示ページを発見しました。

    image-20230525183507431

  8. 次にbpを使用してパケットをキャプチャし、返されたデータを変更してログインに成功しました。

    image-20230525183606594

  9. サイトに成功裏にアクセスしました。

    image-20230525183704376

テクニック六、未知のディレクトリ、情報漏洩、バックアップファイルなどの脆弱性における FUZZ(テクニック)#

2.2.1 未知のディレクトリ#

  1. ウェブサイトのディレクトリとファイルを段階的にFUZZします;
  2. FUZZで得られたパスに基づいて、パラメータとパスをそれぞれFUZZします;
  3. 繰り返しFUZZを行い、望ましい結果が得られるまで続けます。

テクニック七、隠れた変数、未知のパラメータにおけるFUZZの面白い姿勢#

  1. 得られたurlに基づいて初期ディレクトリとパラメータをFUZZします;
  2. その後、FUZZの結果に基づいて大胆に予測し、予測に基づいてFUZZします;
  3. 前のステップで得られた結果に基づいて新しいURLを構築し、アクセスし、再度FUZZします;
  4. 上記の操作を繰り返し、望ましい結果が得られるまで続けます;
  5. 注意:重要なのは忍耐、細心の注意、大胆な予測であり、徐々に辞書の数を増やすことです。

テクニック八、SQL、XSS、SSRF、CSRF などの脆弱性における FUZZ テクニック#

靶場:phpStudy/PHPTurorial/www/pikaqiu/pikachu

実際のペネトレーションテストの過程で、WAF を回避する必要がある場合、FUZZを使用して内容をフィルタリングできます。すべての内容をbpにインポートしてテストし、結果の中から WAF によってフィルタリングされていないものを見つけることができます。

2.4.1 ケーススタディ:pikaqiu靶場のsql注入脆弱性を発掘#

  1. どのパラメータをFUZZできますか

    image-20230526132814610

    FUZZできるパラメータ:

    • GET行のパラメータ
    • Cookie行のパラメータ
    • その他のパラメータ
  2. bpを使用して辞書をインポートし、FUZZします。

    image-20230526140507521

  3. bpから得られた結果に基づいて URL を構築し、望ましい結果を得ます。

実戦二、実戦 FUZZ によるリモート RCE 脆弱性でのコンピュータ制御#

  1. ブラウザを使用して指定されたアドレスにアクセスし、ブラウザコンソールを開きます。

    image-20230526144656928

    赤い枠の中がウェブサイトのディレクトリファイルとJSファイルであり、ディレクトリとファイルの中に必要な情報があるかどうかを確認します。

  2. 情報がない場合、FUZZ JSディレクトリを行います(通常、JSディレクトリがある場合、最初にFUZZ JSディレクトリを行うことができます)。

    1. 完全なJS URLを構築します;

    2. bpを使用してインターセプトします;

    3. 辞書をインポートして攻撃します;

    4. bp攻撃の結果に基づいて二次分析を行い、望ましい情報が得られない場合は、二次FUZZを続け、上記のステップを繰り返します;

    5. bpの結果を分析し、URL を構築してアクセスし、結果を得ます。

    6. bpの結果表示

      image-20230527113950814

  3. FUZZ JSディレクトリで結果が得られなかった場合は、上記の手順を使用して他のディレクトリをFUZZし続けます。

  4. 注意: FUZZの過程で、異なるパラメータ、異なるディレクトリ、異なるcontent-typeなどに対して繰り返しFUZZを行う必要があり、毎回bpから得られた結果を注意深く確認する必要があります。

  5. 最終的な結果:ウェブサイトのgetshell権限を取得し、アップロード可能なURLを得た後、bp内のリクエストデータを変更し、マルウェア(例えば:ワンライナーのマルウェア)を対応するURLに送信し、ブラウザでアクセスして最終的な結果を得ます。

    <?php
      system("whoami")
    ?>
    

    image-20230527113452096

    <?php
      phpinfo();
    ?>
    

    image-20230527113558908

    image-20230527113740050

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。