80,443 - Pentesting Web メソドロジー

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 Guidance

Web API Pentesting

Methodology summary

この方法論では、対象が単一のドメイン(またはサブドメイン)のみであると仮定します。したがって、発見した各ドメイン、サブドメイン、または未確認の web サーバを持つ IP に対してこの方法論を適用してください。

  • まず web サーバで使用されている technologiesidentifying します。技術を特定できた場合、テストの残りで留意すべき tricks を探してください。
  • その技術のバージョンに既知の known vulnerability はありますか?
  • よく使われる well known tech を使用していますか?より多くの情報を得るための useful trick はありますか?
  • 実行すべき specialised scanner はありますか(例: wpscan)?
  • general purposes scanners を起動します。何かを発見するか、興味深い情報を見つけるかもしれません。
  • initial checks から開始: robots, sitemap, 404 エラー、および SSL/TLS scan(HTTPS の場合)。
  • ページの spidering を開始: 可能な限りの files, folders と使用されている parametersfind します。special findings も確認してください。
  • brute-forcing または spidering 中に新しいディレクトリが発見された場合、そのディレクトリは必ず spidering するべきです。
  • Directory Brute-Forcing: 発見したフォルダをすべて brute force して新しい filesdirectories を探索します。
  • brute-forcing または spidering 中に新しいディレクトリが発見された場合、そのディレクトリは必ず Brute-Forced するべきです。
  • Backups checking: 共通のバックアップ拡張子を付けて、発見した discovered filesbackups が見つかるかテストします。
  • Brute-Force parameters: hidden parameters を見つけるように試みます。
  • すべての user input を受け付ける可能性のある endpointsidentified したら、それらに関連するあらゆる種類の vulnerabilities を確認します。
  • Follow this checklist

Server Version (Vulnerable?)

Identify

稼働しているサーバの version に対して既知の known vulnerabilities があるか確認してください。
レスポンスの HTTP headers and cookies は、使用されている technologiesversionidentify するのに非常に役立ちます。Nmap scan はサーババージョンの特定に使えますが、whatweb, webtech or https://builtwith.com/** のようなツールも有用です:**

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

Search: vulnerabilities of the web application version

WAFがあるか確認する

Web技術のトリック

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

同一のドメインが異なるポートフォルダサブドメインで異なる技術を使用している可能性があることに注意してください.
もしウェブアプリケーションが前述の有名なtech/platform listed beforeその他を使用している場合、 새로운トリックをインターネットで検索することを忘れないでください(そして知らせてください!)。

ソースコードレビュー

アプリケーションのsource codegithubで入手可能な場合、自分でWhite box testを行うことに加えて、現在のBlack-Box testingに役立ついくつかの情報が得られることがあります:

  • ウェブ経由でアクセス可能なChange-log or Readme or Versionファイルや、その他のversion infoはあるか?
  • credentialsはどのようにどこに保存されているか? 認証情報(ユーザー名やパスワード)が含まれる(アクセス可能な)fileはあるか?
  • passwords平文か、暗号化されているか、どのハッシュアルゴリズムが使われているか?
  • 何かを暗号化するためのmaster keyを使用しているか? どのalgorithmが使われているか?
  • 何らかの脆弱性を悪用してこれらのファイルのいずれかにアクセスできるか
  • githubissues(解決済み/未解決)に興味深い情報はあるか? またはcommit historyに(古いコミット内にpasswordが含まれている可能性がある)か?

Source code Review / SAST Tools

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スキャナー

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

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

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 サーバは奇妙なデータが送られると予期せぬ動作をすることがあります。これによりvulnerabilitiesが生じたり、機密情報の露出につながることがあります。

  • /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 を総当たりする
  • WebDav 経由でウェブページ内の発見した他のフォルダに Upload files を試す。別のフォルダにはアップロード権限があるかもしれません。

SSL/TLS の脆弱性

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

testssl.sh を使って vulnerabilities をチェックし(Bug Bounty プログラムではこの種の脆弱性は受け入れられないことが多い)、再確認には 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>

Information about SSL/TLS vulnerabilities:

Spidering

ウェブ内で何らかのspiderを起動します。spiderの目的は、テスト対象アプリケーションから可能な限り多くのパスを見つけることです。したがって、web crawling と外部ソースを利用して、有効なパスをできるだけ多く見つけるべきです。

  • 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): スパイダーではありませんが有用です。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ファイルを与えると、正規表現で相対URLを抽出します(minifyされたファイルからの抽出に便利)。
  • JSFScan (bash, several tools): 複数のツールでJSファイルから興味深い情報を収集します。
  • subjs (go): JSファイルを見つけます。
  • page-fetch (go): ヘッドレスブラウザでページを読み込み、ページ読み込み時にロードされる全てのURLを出力します。
  • Feroxbuster (rust): いくつかの前述ツールのオプションを組み合わせたコンテンツ探索ツール。
  • Javascript Parsing: JSファイル内のパスとパラメータを見つける Burp 拡張。
  • Sourcemapper: .js.map URL があれば整形された JS コードを取得するツール。
  • xnLinkFinder: 与えられたターゲットのエンドポイントを発見するツール。
  • waymore: wayback machine からリンクを発見(waybackのレスポンスをダウンロードしてさらにリンクを探す)。
  • HTTPLoot (go): フォームを埋めてでもクロールし、特定の正規表現で機密情報を見つけます。
  • SpiderSuite: GUI の多機能 web security Crawler/Spider。
  • jsluice (go): JavaScriptソースコードからURL、パス、シークレットなどを抽出する Go パッケージ兼 command-line tool
  • ParaForge: Burp Suite extension。リクエストからパラメータとエンドポイントを抽出して、fuzzing と列挙用のカスタムワードリストを作成します。
  • katana (go): この用途に優れたツール。
  • Crawley (go): 見つけられるすべてのリンクを出力します。

Brute Force directories and files

ルートフォルダからbrute-forcing を開始し、見つかったすべてのディレクトリに対してこの方法で、そしてSpideringで発見したすべてのディレクトリに対して必ず brute-force を行ってください(再帰的に brute-forcing して、使用するワードリストの先頭に見つかったディレクトリ名を追加する、などが有効です)。
ツール:

  • 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:

Note that anytime a new directory is discovered during brute-forcing or spidering, it should be Brute-Forced.

What to check on each file found

  • Broken link checker: HTML 内の壊れたリンクを見つけます。それらは takeover の対象になり得ます。
  • 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. またはツール bfacbackup-gen を使えます。
  • Discover new parameters: Arjunparamethx8Param 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 key を発見した場合、さまざまなプラットフォームの API key を利用する方法を示すプロジェクトがあります: keyhacksziletruffleHogSecretFinderRegHexDumpsterDiveEarlyBird
  • Google API keys: AIza で始まるような API key(例: AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik)を見つけた場合、gmapapiscanner を使ってそのキーがどの API にアクセスできるか確認できます。
  • S3 Buckets: spidering 中にサブドメインやリンクが S3 bucket に関連していないか確認してください。その場合は check the permissions of the bucket

Special findings

spideringbrute-forcing を行う際に、注意すべき興味深い発見をすることがあります。

Interesting files

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

任意のページがそのステータスコードで応答する場合、設定の悪い proxy の可能性があります。もし次のような HTTP リクエストを送ると: GET https://google.com HTTP/1.1(Host ヘッダやその他一般的なヘッダを含めて)、proxy は google.com にアクセスしようとし、あなたは SSRF を発見したことになります。

NTLM Authentication - Info disclosure

認証を要求しているサーバが Windows であるか、ドメイン名を尋ねるログイン画面を見つけた場合、情報漏洩を誘発できます。
次のヘッダを送信してください: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”。NTLM 認証の動作により、サーバはヘッダ “WWW-Authenticate” 内に内部情報(IIS バージョン、Windows バージョンなど)を返すことがあります。
これを自動化するには nmap のプラグイン “http-ntlm-info.nse” を使用できます。

HTTP Redirect (CTF)

リダイレクト内にコンテンツを入れることが可能です。このコンテンツはユーザには表示されません(ブラウザがリダイレクトを実行するため)が、その中に情報を隠すことができます。

Web Vulnerabilities Checking

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

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>

> [!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>