80,443 - Pentesting Web Methodology

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

基本情報

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

デフォルトポート: 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 ガイダンス

Web API Pentesting

方法論の要約

この方法論では、1つのドメイン(またはサブドメイン)のみを攻撃対象とすることを想定しています。したがって、スコープ内で発見した各ドメイン、サブドメイン、または未判別の web server を持つ IP に対してこの方法論を適用してください。

  • まず identifying して、web server で使用されている technologies を特定します。tech を正確に特定できた場合は、テストの残りで注意すべき tricks を探してください。
  • 該当する technology のバージョンに対して既知の vulnerability はありますか?
  • 何か well known tech を使っていますか?より多くの情報を抽出するための useful trick はありますか?
  • wpscan のような specialised scanner を実行すべきですか?
  • general purposes scanners を実行してください。何かを見つけるか、興味深い情報を見つけるかもしれません。
  • initial checks から始めます: robots, sitemap, 404 error および SSL/TLS scan(HTTPS の場合)。
  • ウェブページの spidering を開始します: 可能な限り全ての files, foldersparameters being usedfind する時です。special findings も確認してください。
  • Note that anytime a new directory is discovered during brute-forcing or spidering, it should be spidered.
  • Directory Brute-Forcing: 発見したフォルダ全てを brute force して、新しい filesdirectories を探索します。
  • Note that anytime a new directory is discovered during brute-forcing or spidering, it should be Brute-Forced.
  • Backups checking: 見つかった filesbackups を一般的なバックアップ拡張子を付けて見つけられるかテストします。
  • Brute-Force parameters: 隠された parameters を見つけるよう試みます。
  • ユーザー入力を受け付ける可能性のある全ての endpointsidentified したら、それらに関連する全種の vulnerabilities をチェックします。
  • Follow this checklist

Server Version (Vulnerable?)

Identify

実行中のサーバの version に対して既知の vulnerabilities があるか確認してください。
レスポンスの HTTP headers and cookies は、使用されている technologies や/または versionidentify するのに非常に有用です。Nmap scan はサーバの version を識別できますが、ツール 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

検索する vulnerabilities of the web application version

WAF があるか確認する

Web tech tricks

使用されているさまざまな有名なtechnologies脆弱性を見つけるためのいくつかのトリック:

次の点を考慮してください:same domainは異なるportsfolderssubdomainsで異なるtechnologiesを使用していることがあります。\
If the web application is using any well known tech/platform listed before or any other, don’t forget to search on the Internet new tricks (and let me know!).

Source Code Review

アプリケーションのsource codegithubで入手可能な場合、アプリケーションに対して自分でWhite box testを行うことに加え、現在のBlack-Box testingにとってusefulsome informationが見つかることがあります:

  • Change-log or Readme or Version ファイル、またはウェブ経由でアクセス可能なversion infoはありますか?
  • 認証情報(credentials)はどのように、どこに保存されていますか? 認証情報(ユーザ名やパスワード)を含む(アクセス可能な)fileはありますか?
  • パスワードはplain textですか、encryptedですか、どのhashing algorithmが使われていますか?
  • 何かを暗号化するためのmaster keyを使用していますか? 使用されているアルゴリズムは何ですか?
  • これらのファイルに脆弱性を悪用してアクセスできますか?
  • github の issues(解決済み・未解決)に興味深い情報はありますか? またはコミット履歴に(古いコミットにパスワードが含まれている可能性など)何かありますか?

Source code Review / SAST Tools

Automatic scanners

General purpose automatic scanners

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 scanners

CMSが使われている場合は、scannerを実行するのを忘れないでください。思わぬ成果が見つかるかもしれません:

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

この時点で、クライアントが使用しているwebサーバーに関する情報(もしデータが提供されていれば)や、テスト中に覚えておくべきいくつかのコツは既に持っているはずです。運が良ければCMSを見つけてscannerを実行しているかもしれません。

Step-by-step Web Application Discovery

ここからはwebアプリケーションと実際にやり取りを開始します。

Initial checks

Default pages with interesting info:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • メインおよびサブページのコメントも確認すること。

Forcing errors

Webサーバーは、奇妙なデータが送られると予期せぬ動作をすることがあります。これにより脆弱性が生じたり機密情報が露出する可能性があります。

  • /whatever_fake.php (.aspx,.html,.etc) のような偽ページにアクセスする
  • エラーを発生させるために cookie valuesparameter values に “[]”, “]]”, “[[” を追加する
  • URL末尾/~randomthing/%s を入れてエラーを生成する
  • PATCH, DEBUG のような different HTTP Verbs や FAKE のような誤ったものを試す

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

もしWebDavenabledであるがルートフォルダにuploading filesする権限が十分でない場合は、次を試してください:

  • Brute Force credentials
  • Webページ内で見つかった他のフォルダ(found folders)のrestに対して、WebDav経由でUpload filesを試す。別のフォルダにはアップロード権限がある場合があります。

SSL/TLS vulnerabilites

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

Use testssl.sh to checks for vulnerabilities (In Bug Bounty programs probably these kind of vulnerabilities won’t be accepted) and use a2sv to recheck the vulnerabilities:

./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の脆弱性に関する情報:

Spidering

web上で何らかのspiderを起動します。spiderの目的はテスト対象アプリケーションから可能な限り多くのパスを見つけることです。したがって、webクローリングや外部ソースを利用して、有効なパスをできるだけ多く発見する必要があります。

  • gospider (go): HTMLのspiderで、JSファイル内のLinkFinderや外部ソース(Archive.org, CommonCrawl.org, VirusTotal.com)を利用します。
  • hakrawler (go): HTMLのspiderで、JSファイル用のLinkFinderやArchive.orgを外部ソースとして使用します。
  • dirhunt (python): HTMLのspiderで、「juicy files」を示してくれます。
  • evine (go): 対話型CLIのHTML spider。Archive.orgでも検索します。
  • meg (go): このツールは厳密にはspiderではありませんが便利です。hostsのファイルとpathsのファイルを指定すると、各ホストの各パスを取得してレスポンスを保存します。
  • urlgrab (go): JSレンダリング機能を持つHTMLのspider。ただしメンテされていないようで、事前コンパイル版は古く、現在のコードはコンパイルできません。
  • gau (go): waybackやotx、commoncrawlなどの外部プロバイダを使うHTMLのspiderです。
  • ParamSpider: パラメータを含むURLを見つけて列挙します。
  • galer (go): JSレンダリング機能を持つHTMLのspider。
  • LinkFinder (python): HTMLのspiderで、JSのbeautify機能を持ち、JSファイル内の新しいパスを検索できます。LinkFinderのラッパーであるJSScannerも確認する価値があります。
  • goLinkFinder (go): HTMLソースと埋め込みJavaScriptファイルの両方からエンドポイントを抽出します。bug hunters、red teamers、infosec ninjasに有用です。
  • JSParser (python2.7): TornadoとJSBeautifierを使ってJavaScriptファイルから相対URLを解析するpython2.7スクリプト。AJAXリクエストの発見に便利。メンテされていないようです。
  • relative-url-extractor (ruby): HTMLファイルを与えると、難読化/minifyされたファイルから相対URLを抽出するための巧妙な正規表現を使ってURLを抽出します。
  • JSFScan (bash, several tools): 複数のツールを用いてJSファイルから興味深い情報を収集します。
  • subjs (go): JSファイルを探します。
  • page-fetch (go): ヘッドレスブラウザでページを読み込み、ページ読み込み時にロードされたすべてのURLを出力します。
  • Feroxbuster (rust): 以前のツールのいくつかのオプションを組み合わせたコンテンツ発見ツール。
  • Javascript Parsing: JSファイル内のパスやパラメータを見つけるBurp拡張。
  • BurpJSLinkFinder Enhanced: Burp拡張(Jython)。MIMEタイプや /js パスで受信されるJavaScriptレスポンスを受動的に解析し、エンドポイント/リンクを抽出し、埋め込まれたシークレットを重大度付きでフラグ付けできます。
  • Sourcemapper: .js.mapのURLを与えると整形されたJSコードを取得するツール。
  • xnLinkFinder: ターゲットのエンドポイントを発見するためのツール。
  • waymore: wayback machineからリンクを発見(wayback内のレスポンスをダウンロードしてさらにリンクを探す)。
  • HTTPLoot (go): フォームに入力してまでクロールし、特定の正規表現で機密情報を発見します。
  • SpiderSuite: サイバーセキュリティ専門家向けの高度なマルチ機能GUI webセキュリティCrawler/Spider。
  • jsluice (go): JavaScriptソースコードからURL、パス、シークレット、その他興味深いデータを抽出するGoパッケージとコマンドラインツール
  • ParaForge: リクエストからパラメータとエンドポイントを抽出してカスタムのワードリストを作成するためのBurp Suite extension
  • katana (go): この用途に非常に優れたツール。
  • Crawley (go): 見つけられるすべてのリンクを出力します。

Brute Force directories and files

ルートフォルダからbrute-forcingを開始し、見つかったすべてのdirectoriesに対してこのmethodを使って必ずbrute-forceしてください。Spideringで発見したディレクトリもすべてbrute-forceする必要があります(この操作は再帰的に行い、見つかったディレクトリ名をワードリストの先頭に追加して実行するとよいです)。
Tools:

  • 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 Extension。
  • TrashCompactor: jsインポートに基づいて機能が重複するURLを削除します。
  • Chamaleon: wapalyzerを使って使用されている技術を検出し、使用するワードリストを選択します。

Recommended dictionaries:

注: 新しいディレクトリがbrute-forcingやspidering中に発見された場合は、随時そのディレクトリに対してBrute-Forcedを行ってください。

What to check on each file found

  • Broken link checker: HTML内の壊れたリンクを見つけ、takeoversの対象になり得るものを検出します。
  • File Backups: すべてのファイルを見つけたら、実行可能ファイルのバックアップを探します(“.php”, “.aspx”…)。バックアップ名の一般的なバリエーションは: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp and file.old. また、ツールbfac または backup-genを使用できます。
  • Discover new parameters: Arjun parameth x8 および Param Miner などのツールを使って隠しパラメータを発見できます。可能なら、各実行可能なwebファイルで隠しパラメータを探索してください。
  • Arjun all default wordlists: 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
  • Comments: すべてのファイルのコメントを確認してください。ここにcredentialshidden functionalityが見つかることがあります。
  • CTFを行っている場合、よくあるトリックはページのソース右側に情報を隠すことです(ブラウザでソースを開いたときに見えないように何百ものスペースを使う)。別の方法として、複数の改行を使い、ページ下部のコメントに情報を隠すこともあります。
  • API keys: APIキーを見つけた場合、さまざまなプラットフォームのAPIキーの使い方を確認するためのガイドがあります: keyhacks zile truffleHog SecretFinder RegHex DumpsterDive EarlyBird
  • Google API keys: AIzaで始まるようなAPIキー(例: AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik)を見つけたら、gmapapiscannerを使ってそのキーがどのAPIにアクセスできるか確認できます。
  • S3 Buckets: spidering中にサブドメインやリンクがS3バケットに関連しているか確認してください。もし該当する場合は、check the permissions of the bucket

Special findings

spideringbrute-forcingを実行している間に、注目すべきinterestingthingsを発見することがあります。これらは見逃さないようにしてください。

Interesting files

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

ページがこのコードで応答する場合、プロキシの設定ミスの可能性があります。もし GET https://google.com HTTP/1.1 のようなHTTPリクエストを送ると(Hostヘッダやその他の一般的なヘッダを含めて)、そのproxygoogle.com にアクセスしようとし、SSRFが発見されます。

NTLM Authentication - Info disclosure

実行中のサーバがWindowsを要求している認証を要求している、またはドメイン名を要求するログインがある場合、**情報漏えい(information disclosure)**を引き起こすことができます。
ヘッダを送信します: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”。NTLM認証の動作のため、サーバはヘッダ “WWW-Authenticate” の中に内部情報(IISバージョン、Windowsバージョンなど)を返します。
この処理はnmapのプラグイン “http-ntlm-info.nse” で自動化できます。

HTTP Redirect (CTF)

リダイレクションの中にコンテンツを埋め込むことが可能です。このコンテンツはブラウザがリダイレクションを実行するためユーザには表示されませんが、そこに何かを隠すことができます。

Web Vulnerabilities Checking

webアプリケーションの包括的な列挙が完了したら、多数の可能な脆弱性をチェックする段階です。チェックリストはここにあります:

Web Vulnerabilities Methodology

Web脆弱性の詳細情報:

Monitor Pages for changes

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

HackTricks Automatic Commands

HackTricks Automatic Commands ```yaml 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}

</details>

## 参考資料

- [https://github.com/panchocosil/burp-js-linkfinder-enhanced](https://github.com/panchocosil/burp-js-linkfinder-enhanced)

> [!TIP]
> AWSハッキングを学び、実践する:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCPハッキングを学び、実践する:<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Azureハッキングを学び、実践する:<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricksをサポートする</summary>
>
> - [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
> - **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
> - **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
>
> </details>