80,443 - Pentesting Web Methodology

Reading time: 30 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

ウェブサービスは最も一般的で広範なサービスであり、多くの異なる種類の脆弱性が存在します。

デフォルトポート: 80 (HTTP), 443(HTTPS)

bash
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  ssl/https
bash
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0

Web API Guidance

Web API Pentesting

Methodology summary

この方法論では、あなたがドメイン(またはサブドメイン)を攻撃することを前提としています。そのため、発見された各ドメイン、サブドメイン、または範囲内の不明なウェブサーバーを持つIPにこの方法論を適用する必要があります。

  • 技術特定することから始めます。ウェブサーバーによって使用されている技術を特定できた場合、テストの残りの部分で考慮すべきトリックを探します。
  • 技術のバージョンに既知の脆弱性はありますか?
  • よく知られた技術を使用していますか?より多くの情報を抽出するための便利なトリックはありますか?
  • 実行するための専門のスキャナーはありますか(例えば、wpscan)?
  • 一般的なスキャナーを起動します。何かを見つけるか、興味深い情報を見つけるかはわかりません。
  • 初期チェックから始めます:robotssitemap404エラー、SSL/TLSスキャン(HTTPSの場合)。
  • ウェブページをスパイダーします:すべての可能なファイル、フォルダー、および使用されているパラメーター見つける時間です。また、特別な発見を確認します。
  • ブルートフォースやスパイダー中に新しいディレクトリが発見された場合は、必ずスパイダーする必要があります。
  • ディレクトリブルートフォース:発見されたすべてのフォルダーをブルートフォースして、新しいファイルディレクトリを探します。
  • ブルートフォースやスパイダー中に新しいディレクトリが発見された場合は、必ずブルートフォースする必要があります。
  • バックアップの確認:一般的なバックアップ拡張子を追加して、発見されたファイルバックアップを見つけられるかテストします。
  • パラメーターのブルートフォース隠れたパラメーター見つけることを試みます。
  • ユーザー入力を受け入れるすべての可能なエンドポイント特定したら、それに関連するすべての種類の脆弱性を確認します。
  • このチェックリストに従ってください

Server Version (Vulnerable?)

Identify

実行中のサーバーバージョン既知の脆弱性があるか確認します。
HTTPヘッダーとレスポンスのクッキーは、使用されている技術バージョン特定するのに非常に役立ちます。Nmapスキャンはサーバーバージョンを特定できますが、ツールwhatweb webtech またはhttps://builtwith.com/**も役立ちます:

bash
whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2

Search for vulnerabilities of the web application version

Check if any WAF

Web tech tricks

異なるよく知られた技術での脆弱性を見つけるためのトリック:

同じドメインが異なるポートフォルダ、およびサブドメイン異なる技術を使用している可能性があることに注意してください。
ウェブアプリケーションが前述の技術/プラットフォームその他の技術を使用している場合は、インターネットで新しいトリックを検索することを忘れないでください(そして教えてください!)。

Source Code Review

アプリケーションのソースコードgithubで利用可能な場合、アプリケーションのホワイトボックステストを自分で実施することに加えて、現在のブラックボックステストに役立つ情報がいくつかあります:

  • Change-logReadmeVersionファイル、またはバージョン情報にアクセス可能なものはありますか?
  • 認証情報はどのように、どこに保存されていますか? 認証情報(ユーザー名やパスワード)が含まれる(アクセス可能な?)ファイルはありますか?
  • パスワードプレーンテキスト暗号化されていますか、それともどのハッシュアルゴリズムが使用されていますか?
  • 何かを暗号化するためにマスターキーを使用していますか? どのアルゴリズムが使用されていますか?
  • いくつかの脆弱性を悪用してこれらのファイルにアクセスできますか?
  • github興味深い情報(解決済みおよび未解決の)問題はありますか? またはコミット履歴に(古いコミット内に導入されたパスワードなど)?

Source code Review / SAST Tools

Automatic scanners

General purpose automatic scanners

bash
nikto -h <URL>
whatweb -a 4 <URL>
wapiti -u <URL>
W3af
zaproxy #You can use an API
nuclei -ut && nuclei -target <URL>

# https://github.com/ignis-sec/puff (client side vulns fuzzer)
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"

CMSスキャナー

CMSが使用されている場合は、スキャナーを実行することを忘れないでください。もしかしたら何か興味深いものが見つかるかもしれません:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin ウェブサイトのセキュリティ問題。(GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal または (M)oodle
droopscan: Drupal, Joomla, Moodle, Silverstripe, Wordpress

bash
cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs

この時点で、クライアントが使用しているウェブサーバーに関する情報(データが提供されている場合)や、テスト中に考慮すべきいくつかのトリックを持っているはずです。運が良ければ、CMSを見つけてスキャナーを実行したかもしれません。

ステップバイステップのウェブアプリケーション発見

この時点から、ウェブアプリケーションとのインタラクションを開始します。

初期チェック

興味深い情報を含むデフォルトページ:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • メインページおよびサブページのコメントも確認してください。

エラーの強制

ウェブサーバーは、奇妙なデータが送信されると予期しない動作をすることがあります。これにより、脆弱性機密情報の漏洩が発生する可能性があります。

  • /whatever_fake.php (.aspx,.html,.etc)のような偽ページにアクセスする
  • クッキー値パラメータ値に**"[]", "]]", および "[["**を追加してエラーを作成する
  • URL最後に**/~randomthing/%s**として入力を与えてエラーを生成する
  • PATCH、DEBUG、またはFAKEのような異なるHTTP動詞を試す

ファイルをアップロードできるか確認する(PUT動詞, WebDav

WebDav有効であるが、ルートフォルダーにファイルをアップロードするための十分な権限がない場合は、次のことを試みてください:

  • ブルートフォース認証情報
  • ウェブページ内の見つかったフォルダー残りにWebDavを介してファイルをアップロードする。他のフォルダーにファイルをアップロードする権限があるかもしれません。

SSL/TLSの脆弱性

  • アプリケーションがどの部分でもHTTPSの使用を強制していない場合、MitMに対して脆弱です。
  • アプリケーションがHTTPを使用して機密データ(パスワード)を送信している場合、これは高い脆弱性です。

testssl.shを使用して脆弱性をチェックし(バグバウンティプログラムではこの種の脆弱性は受け入れられない可能性があります)、a2svを使用して脆弱性を再確認してください:

bash
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also

# You can also use other tools, by testssl.sh at this momment is the best one (I think)
sslscan <host:port>
sslyze --regular <ip:port>

SSL/TLSの脆弱性に関する情報:

スパイダーリング

ウェブ内で何らかのスパイダーを起動します。スパイダーの目的は、テストされたアプリケーションからできるだけ多くのパスを見つけることです。したがって、ウェブクロールと外部ソースを使用して、できるだけ多くの有効なパスを見つける必要があります。

  • gospider (go): HTMLスパイダー、JSファイル内のLinkFinderおよび外部ソース(Archive.org、CommonCrawl.org、VirusTotal.com、AlienVault.com)。
  • hakrawler (go): HMLスパイダー、JSファイル用のLinkFinderおよび外部ソースとしてArchive.orgを使用。
  • dirhunt (python): HTMLスパイダー、「おいしいファイル」も示します。
  • evine (go): インタラクティブCLI HTMLスパイダー。Archive.org内も検索します。
  • meg (go): このツールはスパイダーではありませんが、有用です。ホストのファイルとパスのファイルを指定すると、megは各ホストの各パスを取得し、応答を保存します。
  • urlgrab (go): JSレンダリング機能を持つHTMLスパイダー。ただし、メンテナンスされていないようで、事前コンパイルされたバージョンは古く、現在のコードはコンパイルされません。
  • gau (go): 外部プロバイダー(wayback、otx、commoncrawl)を使用するHTMLスパイダー。
  • ParamSpider: このスクリプトは、パラメータを持つURLを見つけてリストします。
  • galer (go): JSレンダリング機能を持つHTMLスパイダー。
  • LinkFinder (python): HTMLスパイダー、JSファイル内の新しいパスを検索できるJSビューティファイ機能を持っています。LinkFinderのラッパーであるJSScannerも見る価値があります。
  • goLinkFinder (go): HTMLソースと埋め込まれたJavaScriptファイルの両方からエンドポイントを抽出します。バグハンター、レッドチーム、インフォセキュリティの忍者に便利です。
  • JSParser (python2.7): TornadoとJSBeautifierを使用してJavaScriptファイルから相対URLを解析するPython 2.7スクリプト。AJAXリクエストを簡単に発見するのに便利です。メンテナンスされていないようです。
  • relative-url-extractor (ruby): ファイル(HTML)を与えると、巧妙な正規表現を使用して、醜い(ミニファイされた)ファイルから相対URLを見つけて抽出します。
  • JSFScan (bash、いくつかのツール): いくつかのツールを使用してJSファイルから興味深い情報を収集します。
  • subjs (go): JSファイルを見つけます。
  • page-fetch (go): ヘッドレスブラウザでページを読み込み、ページを読み込むためにロードされたすべてのURLを印刷します。
  • Feroxbuster (rust): 以前のツールのいくつかのオプションを組み合わせたコンテンツ発見ツール。
  • Javascript Parsing: JSファイル内のパスとパラメータを見つけるためのBurp拡張機能。
  • Sourcemapper: .js.map URLを与えると、ビューティファイドJSコードを取得するツール。
  • xnLinkFinder: 特定のターゲットのエンドポイントを発見するために使用されるツールです。
  • waymore: Waybackマシンからリンクを発見します(応答をダウンロードし、さらにリンクを探します)。
  • HTTPLoot (go): フォームを埋めることによるクロールや、特定の正規表現を使用して機密情報を見つけます。
  • SpiderSuite: Spider Suiteは、サイバーセキュリティ専門家向けに設計された高度なマルチ機能GUIウェブセキュリティクローラー/スパイダーです。
  • jsluice (go): URL、パス、シークレット、その他の興味深いデータをJavaScriptソースコードから抽出するためのGoパッケージおよびコマンドラインツールです。
  • ParaForge: ParaForgeは、リクエストからパラメータとエンドポイントを抽出し、ファジングと列挙のためのカスタムワードリストを作成するためのシンプルなBurp Suite拡張機能です。
  • katana (go): これに最適な素晴らしいツールです。
  • Crawley (go): 見つけたすべてのリンクを印刷します。

ディレクトリとファイルのブルートフォース

ルートフォルダーからブルートフォースを開始し、この方法で見つかったすべてのディレクトリスパイダーリングによって発見されたすべてのディレクトリをブルートフォースすることを確認してください(このブルートフォースは再帰的に行うことができ、使用するワードリストの先頭に見つかったディレクトリの名前を追加します)。
ツール:

  • Dirb / Dirbuster - Kaliに含まれており、古い(および遅い)ですが機能します。自己署名証明書と再帰検索を許可します。他のオプションと比較して遅すぎます。
  • Dirsearch (python): 自己署名証明書は許可されていませんが、再帰検索を許可します。
  • Gobuster (go): 自己署名証明書を許可し、再帰的検索はありません。
  • Feroxbuster - 高速、再帰検索をサポートします。
  • wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
  • ffuf - 高速: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
  • uro (python): これはスパイダーではありませんが、見つかったURLのリストを与えると「重複」URLを削除します。
  • Scavenger: 異なるページのburp履歴からディレクトリのリストを作成するためのBurp拡張機能。
  • TrashCompactor: 機能が重複しているURLを削除します(jsインポートに基づく)。
  • Chamaleon: 使用されている技術を検出するためにwapalyzerを使用し、使用するワードリストを選択します。

推奨辞書:

ブルートフォースやスパイダーリング中に新しいディレクトリが発見された場合は、必ずブルートフォースを行う必要があります。

見つかった各ファイルで確認すべきこと

  • Broken link checker: 乗っ取りの危険があるHTML内の壊れたリンクを見つけます。
  • ファイルバックアップ: すべてのファイルを見つけたら、すべての実行可能ファイル(".php", ".aspx"...)のバックアップを探します。バックアップの命名に一般的なバリエーションは次のとおりです: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmpおよびfile.old. また、bfac または backup-genを使用できます。
  • 新しいパラメータを発見: Arjun parameth x8 および Param Miner を使用して隠れたパラメータを発見できます。可能であれば、各実行可能ウェブファイルで隠れたパラメータを検索してみてください。
  • Arjunのすべてのデフォルトワードリスト: https://github.com/s0md3v/Arjun/tree/master/arjun/db
  • Param-miner “params” : https://github.com/PortSwigger/param-miner/blob/master/resources/params
  • Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/
  • nullenc0de “params.txt”: https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773
  • コメント: すべてのファイルのコメントを確認してください。認証情報隠れた機能を見つけることができます。
  • CTFをプレイしている場合、「一般的な」トリックは、ページの右側情報隠すことです(数百スペースを使用して、ブラウザでソースコードを開いてもデータが見えないようにします)。もう一つの可能性は、いくつかの新しい行を使用して、ウェブページの下部にコメントで情報を隠すことです。
  • APIキー: APIキーを見つけた場合、さまざまなプラットフォームのAPIキーの使用方法を示すガイドがあります: keyhacks zile truffleHog SecretFinder RegHex DumpsterDive EarlyBird
  • Google APIキー: AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjikのようなAPIキーを見つけた場合、プロジェクトgmapapiscannerを使用して、キーがアクセスできるAPIを確認できます。
  • S3バケット: スパイダーリング中に、サブドメインリンクS3バケットに関連しているかどうかを確認してください。その場合、バケットの権限を確認してください

特別な発見

スパイダーリングブルートフォースを実行している間に、興味深い****もの見つけることができます。

興味深いファイル

403 Forbidden/Basic Authentication/401 Unauthorized (バイパス)

403 & 401 Bypasses

502 Proxy Error

ページがそのコード応答する場合、それはおそらく不適切に構成されたプロキシです。GET https://google.com HTTP/1.1のようなHTTPリクエストを送信すると(ホストヘッダーや他の一般的なヘッダーを含む)、プロキシは_google.com_にアクセスしようとし、SSRFを見つけることになります。

NTLM認証 - 情報漏洩

認証を要求しているサーバーがWindowsであるか、資格情報を要求するログインを見つけた場合(ドメイン名を要求する場合)、情報漏洩を引き起こすことができます。
ヘッダーを送信します: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” そして、NTLM認証の動作により、サーバーは内部情報(IISバージョン、Windowsバージョン...)を「WWW-Authenticate」ヘッダー内で応答します。
この操作は、nmapプラグイン"http-ntlm-info.nse"を使用して自動化できます。

HTTPリダイレクト (CTF)

リダイレクション内にコンテンツ挿入することが可能です。このコンテンツはユーザーに表示されません(ブラウザがリダイレクションを実行するため)が、何かが隠されている可能性があります。

ウェブ脆弱性のチェック

ウェブアプリケーションの包括的な列挙が行われたので、さまざまな脆弱性をチェックする時が来ました。チェックリストはここにあります:

Web Vulnerabilities Methodology

ウェブ脆弱性に関する詳細情報は次のリンクで見つけることができます:

ページの変更を監視

https://github.com/dgtlmoon/changedetection.ioのようなツールを使用して、脆弱性を挿入する可能性のある変更を監視できます。

HackTricks自動コマンド

Protocol_Name: Web    #Protocol Abbreviation if there is one.
Port_Number:  80,443     #Comma separated if there is more than one.
Protocol_Description: Web         #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for Web
Note: |
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/index.html

Entry_2:
Name: Quick Web Scan
Description: Nikto and GoBuster
Command: nikto -host {Web_Proto}://{IP}:{Web_Port} &&&& gobuster dir -w {Small_Dirlist} -u {Web_Proto}://{IP}:{Web_Port} && gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}

Entry_3:
Name: Nikto
Description: Basic Site Info via Nikto
Command: nikto -host {Web_Proto}://{IP}:{Web_Port}

Entry_4:
Name: WhatWeb
Description: General purpose auto scanner
Command: whatweb -a 4 {IP}

Entry_5:
Name: Directory Brute Force Non-Recursive
Description:  Non-Recursive Directory Brute Force
Command: gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}

Entry_6:
Name: Directory Brute Force Recursive
Description: Recursive Directory Brute Force
Command: python3 {Tool_Dir}dirsearch/dirsearch.py -w {Small_Dirlist} -e php,exe,sh,py,html,pl -f -t 20 -u {Web_Proto}://{IP}:{Web_Port} -r 10

Entry_7:
Name: Directory Brute Force CGI
Description: Common Gateway Interface Brute Force
Command: gobuster dir -u {Web_Proto}://{IP}:{Web_Port}/ -w /usr/share/seclists/Discovery/Web-Content/CGIs.txt -s 200

Entry_8:
Name: Nmap Web Vuln Scan
Description: Tailored Nmap Scan for web Vulnerabilities
Command: nmap -vv --reason -Pn -sV -p {Web_Port} --script=`banner,(http* or ssl*) and not (brute or broadcast or dos or external or http-slowloris* or fuzzer)` {IP}

Entry_9:
Name: Drupal
Description: Drupal Enumeration Notes
Note: |
git clone https://github.com/immunIT/drupwn.git for low hanging fruit and git clone https://github.com/droope/droopescan.git for deeper enumeration

Entry_10:
Name: WordPress
Description: WordPress Enumeration with WPScan
Command: |
?What is the location of the wp-login.php? Example: /Yeet/cannon/wp-login.php
wpscan --url {Web_Proto}://{IP}{1} --enumerate ap,at,cb,dbe && wpscan --url {Web_Proto}://{IP}{1} --enumerate u,tt,t,vp --passwords {Big_Passwordlist} -e

Entry_11:
Name: WordPress Hydra Brute Force
Description: Need User (admin is default)
Command: hydra -l admin -P {Big_Passwordlist} {IP} -V http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location'

Entry_12:
Name: Ffuf Vhost
Description: Simple Scan with Ffuf for discovering additional vhosts
Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:FUZZ.{Domain_Name}" -c -mc all {Ffuf_Filters}

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする