80,443 - Pentesting Web Methodology

Support HackTricks

If you are interested in hacking career and hack the unhackable - we are hiring! (流暢なポーランド語の読み書きが必要).

Basic Info

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

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

PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  ssl/https
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にこの方法論を適用する必要があります。

Server Version (Vulnerable?)

Identify

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

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

Search for ウェブアプリケーションの バージョンの脆弱性

WAFがあるか確認する

ウェブ技術のトリック

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

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

ソースコードレビュー

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

  • 変更履歴やReadmeやバージョンファイル、またはバージョン情報にアクセス可能なものはありますか?

  • 認証情報はどのように、どこに保存されていますか? 認証情報(ユーザー名やパスワード)が含まれる(アクセス可能な?)ファイルはありますか?

  • パスワードプレーンテキスト暗号化されていますか、それともどのハッシュアルゴリズムが使用されていますか?

  • 何かを暗号化するためにマスターキーを使用していますか? どのアルゴリズムが使用されていますか?

  • いくつかの脆弱性を悪用してこれらのファイルにアクセスできますか?

  • github興味深い情報(解決済みおよび未解決の)問題はありますか? またはコミット履歴に(古いコミット内に入力されたパスワードなど)?

Source code Review / SAST Tools

自動スキャナー

一般目的の自動スキャナー

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

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、など)のような偽ページにアクセスする

  • クッキー値パラメータ値に**"[]", "]]", および "[["**を追加してエラーを作成する

  • URL最後に**/~randomthing/%s**として入力を与えてエラーを生成する

  • PATCH、DEBUG、またはFAKEのような異なるHTTP動詞を試す

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

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

  • ブルートフォースで認証情報を取得する

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

SSL/TLSの脆弱性

  • アプリケーションがHTTPSの使用を強制していない場合、MitM攻撃に対して脆弱です。

  • アプリケーションがHTTPを使用して機密データ(パスワード)を送信している場合、これは高い脆弱性です。

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

./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

  • Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/

  • コメント: すべてのファイルのコメントを確認し、認証情報隠れた機能を見つけることができます。

  • CTFをプレイしている場合、「一般的な」トリックは、ページの右側のコメント内に情報隠すことです(数百スペースを使用して、ブラウザでソースコードを開いてもデータが見えないようにします)。もう一つの可能性は、いくつかの新しい行を使用して、ウェブページの下部のコメントに情報を隠すことです。

  • APIキー: APIキーを見つけた場合、さまざまなプラットフォームのAPIキーの使用方法を示すガイドがあります: keyhacks zile truffleHog SecretFinder RegHex DumpsterDive EarlyBird

  • Google APIキー: AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjikのようなAPIキーを見つけた場合、プロジェクトgmapapiscannerを使用して、キーがアクセスできるAPIを確認できます。

  • S3バケット: スパイダーリング中に、サブドメインまたはリンクS3バケットに関連しているかどうかを確認します。その場合、バケットの権限を確認します

特別な発見

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

興味深いファイル

  • CSSファイル内の他のファイルへのリンクを探します。

  • .envを見つけた場合、APIキー、DBパスワードなどの情報が見つかる可能性があります。

  • APIエンドポイントを見つけた場合、それらもテストする必要があります。これらはファイルではありませんが、おそらく「ファイルのように見える」でしょう。

  • JSファイル: スパイダーリングセクションでは、JSファイルからパスを抽出できるいくつかのツールが言及されました。また、見つかった各JSファイルを監視することも興味深いでしょう。なぜなら、変更があれば、コードに潜在的な脆弱性が導入されたことを示す可能性があるからです。たとえば、JSMonを使用できます。

  • 発見されたJSファイルをRetireJSまたはJSHoleで確認し、脆弱性があるかどうかを確認する必要があります。

  • JsFuckのデオブフスケーション(文字でのjavascript:"[]!+" https://ooze.ninja/javascript/poisonjs/)

  • TrainFuck: +72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.

  • いくつかの場面で、使用されている正規表現を理解する必要があります。これは役立ちます: https://regex101.com/

  • フォームが検出されたファイルを監視することもできます。パラメータの変更や新しいフォームの出現は、潜在的な新しい脆弱な機能を示す可能性があります。

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.xyz/pentesting/pentesting-web

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}
HackTricksをサポートする

Last updated