- テクニック 1: JS の脆弱性発掘における重要な地位
- テクニック 2: ブラウザコンソールの使用テクニックと方法
- テクニック 3: JS ブレークポイントテクニックと Hook 注入
- テクニック 4: Python と JS を組み合わせて暗号問題を解決
- 実戦 1: 実戦 MD5 暗号の逆解析と暗号パラメータの復元
- テクニック 5: 一般的な FUZZ の姿勢とツール、辞書
- テクニック 6: 未知のディレクトリ、情報漏洩、バックアップファイルなどの脆弱性における FUZZ
- テクニック 7: 弱いパスワード、隠れた変数、未知のパラメータにおける FUZZ のトリッキーな姿勢
- テクニック 8: SQL、XSS、SSRF、CSRF などの脆弱性における FUZZ テクニック
- 実戦 2: 実戦 FUZZ によるリモート RCE 脆弱性のコンピュータ制御(80% の src が使用される)
技術一、JS 暗号パラメータの逆解析と利用#
1.1 テクニック一、JS の脆弱性発掘における重要な地位#
1.1.1 JavaScript#
JS:javascript は web ページのスクリプト言語で、主に HTML ページにインタラクティブな動作を追加するために使用され、以下のいくつかの役割があります:
- HTML ページに動的なテキストを埋め込む;
- ブラウザイベントに応答する;
- HTML 要素を読み書きする;
- データがサーバーに送信される前にデータを検証する;
- 訪問者のブラウザ情報を検出する。
1.1.2 HTML、JS、CSS の違い#
- HTML:素の家
- CSS:内装
- JS:家を動かし、スマートホームを追加する
1.1.3 JS の脆弱性発掘における重要な地位#
- JS にはプラグイン名が存在し、プラグインに基づいて対応する脆弱性を直接利用できる
- JS にはいくつかの URL リンクが存在し、URL に基づいて対応するページをさらにテストおよび利用できる
- JS にはサブドメインが存在し、サブドメインに直接アクセスできる
- JS のいくつかのコメントがアカウントのパスワードやその他の情報を漏洩する可能性がある
1.1.4 Jsfind#
JsFind を使用して JS で漏洩した URL リンクとドメインを検索する(京東)
python jsfind.py -u "http://www.jd.com"
1.2 テクニック二、ブラウザコンソールの使用テクニックと方法#
ネットワークは全体のネットワークリクエストを監視するもので、トラフィックを監視できます。
- キャッシュを無効にする:チェックを入れると、毎回ブラウザからデータを取得します。ペネトレーションテストや脆弱性発掘の過程で開く必要があります。
- デバッガ(ソースコード):ウェブサイトの js コードを保存します
- 右下の
{}
をクリックするとフォーマットされます - ブレークポイントを設定できます
- 右下の
- コンソール:js 内の関数に対していくつかの操作を行うことができます
1.3 テクニック三、JS ブレークポイントテクニックと Hook 注入#
Hook:python を使用してクローリング、ペネトレーションを行い、画像認証を回避するために使用する必要があります。
1.3.1 JS ブレークポイントデバッグ#
JS でブレークポイントを設定し、ブレークポイントに到達すると実行が停止します。ステップインを選択すれば大丈夫です。
1.3.2 ブレークポイントの見つけ方#
キーワードに従ってデバッガでグローバル検索を行い、必要な位置にジャンプし、js 行をクリックすると青色に変わります。
注意:MD5 関数はカスタマイズ可能で、パスワードを解読する際には実際に使用されている MD5 関数を見つける必要があります。
1.4 テクニック四、python と JS を組み合わせて暗号問題を解決#
-
JS コード test.js
# js 暗号関数 function encryptByDES(message) { var encrypted = message; encrypted = encrypted + "asdfdsaf"; return encrypted; }
-
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 暗号の逆解析と暗号パラメータの復元#
-
bp を使用して情報を取得
-
ブラウザコンソールでキーワード
password
に基づいて検索し、password
を処理するjs
関数を見つける; -
python
コードを使用してjs
内のpassword
を処理する関数を呼び出し、エラーメッセージに基づいてfunction
と他のパラメータを補完する; -
python
で得られた値とbp
で取得した値を比較し、同じかどうかを確認する; -
同じであれば、
python
でパスワード辞書を処理し、その後bp
でブルートフォース攻撃を行うことができます。
技術二、FUZZ の精美なアート、成果の直線的向上(技術)#
テクニック五、一般的な FUZZ の姿勢とツール、辞書(テクニック)#
2.1.1 FUZZ
ファジングテスト#
FUZZ:名詞としては「毛羽立ち;ぼやけ;細毛;警官」と訳されます。
核心思想:一部の条件しか知らない場合、非常にぼやけたテストを行い、異なるものを使用して継続的にテストを行い、望ましい結果を得るまで続ける。
例えば:支付宝の大額振込では、一部の情報を入力する必要があります。
2.1.2 fuzz
のテクニックはどこで使えるか?#
- パスワードを解読する際
- ディレクトリをスキャンする際
- パラメータをスキャンする際
- 脆弱性をテストする際
- WAF を通過する際
- 見えるすべてのパラメータは、実際に
FUZZ
でテストできます - 。。。たくさん、どこでも
fuzz
できます
FUZZ
を上手に使えば、脆弱性が少なくなります。
ディレクトリスキャンやブルートフォース攻撃の核心思想はFUZZ
であり、多くの場合、ツールでは解決できない問題は手動でFUZZ
することで予想外の結果が得られることがあります。
2.1.3 優れた FUZZ のケーススタディ#
2.1.3.1 パラメータFUZZ
実戦脆弱性#
-
ある
src
脆弱性発掘の過程で、興味深いファイルhttp://36...*/upload_image.php
を発見し、アクセスすると内容が空白でした。 -
このようなページに対しては、間違いなくパラメータに対して
FUZZ
を行い、パラメータフィールドがdo
であることを発見しました。http://360...*/upload_image.php?do
が使用可能であることを発見しました。
-
その後、
do
というパラメータに対してFUZZ
を行い、bp
を使用しました。 -
http://xxxxx/image_upload.php?do=upload
を構築し、アクセスすると、アップロードフォームが成功裏に表示され、次の画面が得られました。 -
ファイルをアップロードした後、
FUZZ
アップロードパスを行います。http://36.*.*.*/uppload -------> 403 続けてfuzz http://36.*.*.*/upload/images ------->403 。。。。 ファイルパスを発見し、URLを構築 http://36.*.*.*/upload/images/skr_anti.php
-
その後、リモートコントロールツールを使用して相手のサーバーに接続します。
2.1.3.2 FUZZ 隠れたパラメータとフィールド#
-
ディレクトリスキャンで次のファイルを発見しました。
-
そのファイルを特定します。
-
ディレクトリアクセスを構築します。
提示された情報をURLに構築してアクセスします。 http://....../start/face_xxx インターフェースにアクセスすると、Method Not Allow、405エラーが表示されます。明らかに、POSTでパラメータを送信する必要があります。
POST
で適当なパラメータを送信すると、インターフェースがRequest error, content-type was unsupported
と表示されます。
-
引き続き
FUZZ
content-type ヘッダーを行います。 -
FUZZ
の結果、application/json
のcontent-type
ヘッダーが使用可能であることがわかりました。これで簡単に、JSON
を構築してFUZZ
し、JSON
データパラメータを続けます。 -
この
SSRF
を利用して、内部ネットワークのRedis
に対してパスワードスプレーとリバースシェルを一括で行い、境界を突破することができます。
2.1.3.3 JS と FUZZ の組み合わせ#
-
ログインページにアクセスします。
-
アカウントとパスワードを設定し、パスワードのブルートフォース攻撃を開始します。
-
テストしたアカウントとパスワードでログインしても何の反応もなく、ログインページもただのログインページです。
-
諦めるわけにはいかず、ディレクトリを引き続き
FUZZ
し、/JS/ディレクトリ
が存在することを発見し、その中のものをFUZZ
し始めます。 -
発見したリンクに基づいて URL を構築し、アクセスすると新しいページが表示されました。
ここに
logout
があり、ログインしたことがない場所なのに、どうして存在するのでしょうか?したがって、下のアカウントとパスワードは先ほどのブルートフォースの結果であると推測しましたが、あまり役に立たないようです。 -
次に
JS
ファイルを発見し、次のパターンを見つけました。 -
次にドメインを
FUZZ
し、展示ページを発見しました。 -
次に
bp
を使用してパケットをキャプチャし、返されたデータを変更してログインに成功しました。 -
サイトに成功裏にアクセスしました。
テクニック六、未知のディレクトリ、情報漏洩、バックアップファイルなどの脆弱性における FUZZ(テクニック)#
2.2.1 未知のディレクトリ#
- ウェブサイトのディレクトリとファイルを段階的に
FUZZ
します; FUZZ
で得られたパスに基づいて、パラメータとパスをそれぞれFUZZ
します;- 繰り返し
FUZZ
を行い、望ましい結果を得るまで続けます。
テクニック七、隠れた変数、未知のパラメータにおけるFUZZ
のトリッキーな姿勢#
- 得られた
url
に基づいて初期ディレクトリとパラメータをFUZZ
します; - その後、
FUZZ
の結果に基づいて大胆に予測し、予測に基づいてFUZZ
します; - 前のステップで得られた結果に基づいて新しい
URL
を構築し、アクセスし、再度FUZZ
します; - 上記の操作を繰り返し、望ましい結果を得るまで続けます;
- 注意:重要なのは忍耐、細心の注意、大胆な予測であり、段階的に辞書の数を増やすことです。
テクニック八、SQL、XSS、SSRF、CSRF などの脆弱性における FUZZ テクニック#
靶場:phpStudy/PHPTurorial/www/pikaqiu/pikachu
実際のペネトレーションテストの過程で、WAF を通過する必要がある場合、FUZZ
を使用して内容をフィルタリングできます。すべての内容をbp
にインポートしてテストし、結果の中から WAF によってフィルタリングされていないものを見つけることができます。
2.4.1 ケーススタディ:pikaqiu
靶場のsql
インジェクション脆弱性を発掘#
-
どのパラメータを
FUZZ
できるかFUZZ
できるパラメータ:GET
行のパラメータCookie
行のパラメータ- その他のパラメータ
-
bp
を使用して辞書をインポートし、FUZZ
します。 -
bp
から得られた結果に基づいて URL を構築し、望ましい結果を得ます。
実戦二、実戦 FUZZ によるリモート RCE 脆弱性のコンピュータ制御#
-
指定されたアドレスにブラウザでアクセスし、ブラウザコンソールを開きます。
赤い枠の中がウェブサイトのディレクトリファイルと
JS
ファイルで、ディレクトリとファイルの中に必要な情報があるかどうかを確認します。 -
情報がない場合、
JS
ディレクトリをFUZZ
します(通常、JS
ディレクトリがある場合、最初にFUZZ
します)。-
完全な
JS
URL
を構築します; -
bp
を使用してインターセプトします; -
辞書をインポートして攻撃します;
-
bp
攻撃の結果に基づいて二次分析を行い、望ましい情報が得られない場合は、二次FUZZ
を続け、上記のステップを繰り返します; -
bp
の結果を分析し、URL を構築してアクセスし、結果を得ます。 -
bp
の結果を表示
-
-
FUZZ
JS
ディレクトリで結果が得られない場合は、上記のステップを使用して他のディレクトリをFUZZ
し続けます。 -
注意:
FUZZ
の過程で、異なるパラメータ、異なるディレクトリ、異なるcontent-type
などを繰り返しFUZZ
する必要があり、毎回bp
から得られた結果を細心の注意で確認する必要があります。 -
最終的な結果:ウェブサイトの
getshell
権限を取得し、アップロード可能なURL
を得た後、bp
のリクエストデータを変更し、マルウェア(例えば:ワンライナーマルウェア)を対応するURL
に送信し、ブラウザでアクセスして最終的な結果を得ます。<?php system("whoami") ?>
<?php phpinfo(); ?>