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

Reading time: 29 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をサポートする

基本情報

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

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

Web API Pentesting

方法論の要約

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

  • まず、ウェブサーバーで使用されているtechnologiesidentifyingします。技術が特定できたら、以降のテストで念頭に置くべきtricksを探してください。
  • 使用している技術のバージョンにknown vulnerabilityはないか?
  • よく知られたtechを使用しているか? 追加で情報を引き出すためのuseful trickはあるか?
  • wpscan のようなspecialised scannerを実行すべきか?
  • 汎用のスキャナを実行する。何か見つかるか、興味深い情報が得られるかもしれない。
  • initial checksから開始:robots, sitemap, 404 error および SSL/TLS scan(HTTPS の場合)。
  • ウェブページのspideringを開始:利用されている可能性のあるすべてのfiles, foldersparametersを見つける時です。特別な所見もチェックしてください。
  • brute-forcingまたはspidering中に新しいディレクトリが発見された場合は、その都度spideringするべきです。
  • Directory Brute-Forcing:発見したフォルダをすべてbrute forceして、新しいfilesdirectoriesを探す。
  • brute-forcingやspidering中に新しいディレクトリが発見された場合は、それを必ずBrute-Forcedするべきです。
  • Backups checking:発見したファイルのバックアップを、一般的なバックアップ拡張子を付けて見つけられるかテストする。
  • Brute-Force parameters:隠しパラメータを見つけるために試す。
  • すべてのユーザー入力を受け付ける可能性のあるendpointsを特定したら、それらに関連するあらゆる種類の脆弱性をチェックする。
  • Follow this checklist

Server Version (Vulnerable?)

Identify

稼働中のサーバーのバージョンに既知の脆弱性があるか確認してください。
The HTTP headers and cookies of the response は、使用されている技術やバージョンを識別するのに非常に有用です。Nmap scan はサーバーバージョンを特定できますが、whatweb, webtech or https://builtwith.com/:

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

検索 for vulnerabilities of the web application version

WAFが存在するか確認する

Web技術のトリック

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

Take into account that the same domain can be using different technologies in different ports, folders and subdomains.
もしウェブアプリケーションが前述のよく知られたtech/platform listed beforeやその他の技術を使用している場合は、インターネットで新しいトリックを検索することを忘れないでください(そして知らせてください!)。

ソースコードレビュー

アプリケーションのソースコードgithubで入手可能な場合、アプリケーションのWhite boxテストを自分で実施することに加えて、現在のBlack-Boxテストに有用いくつかの情報が得られる可能性があります:

  • Web上でアクセス可能なChange-log or Readme or Versionファイル、またはバージョン情報はありますか?
  • credentials はどのように、どこに保存されていますか?(アクセス可能な)file にユーザー名やパスワードが含まれていますか?
  • passwordsplain textですか、encryptedですか、またはどのhashing algorithmが使われていますか?
  • 何かを暗号化するためのmaster keyを使用していますか?どのalgorithmが使われていますか?
  • 何らかの脆弱性を悪用してこれらのファイルのいずれかにアクセスできますか
  • github の(解決済み・未解決の)issuesに興味深い情報がありますか?またはcommit history(古いコミットにpasswordが含まれている可能性)に注目すべきものはありますか?

Source code Review / SAST Tools

自動スキャナ

汎用の自動スキャナ

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 が使用されている場合は run a scanner を忘れないでください。思わぬ有用な情報が見つかるかもしれません:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin websites for Security issues. (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal or (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 を見つけてスキャナを実行しているかもしれません。

ステップバイステップの Web アプリケーション探索

ここからは Web アプリケーションとの対話を開始します。

初期チェック

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

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

エラーの強制発生

不正なデータが送られると、Web サーバは予期しない動作をすることがあり、これが脆弱性機密情報の漏えいにつながる可能性があります。

  • fake pages(例: /whatever_fake.php、.aspx、.html、など)にアクセスする
  • cookie valuesparameter の値に "[]", "]]", "[[" を追加してエラーを発生させる
  • URL末尾/~randomthing/%s を入れてエラーを生成する
  • PATCH、DEBUG や FAKE のような誤ったものも含め、different HTTP Verbs を試す

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

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

  • Brute Force でクレデンシャルを総当たりする
  • WebDav を介してウェブページ内で見つかった他のフォルダ(root 以外)に Upload files する。別のフォルダにはアップロード権限がある可能性があります。

SSL/TLS の脆弱性

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

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

Information about SSL/TLS vulnerabilities:

Spidering

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

  • gospider (go): HTML spider、JS ファイル内の LinkFinder と外部ソース (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com)。
  • hakrawler (go): HML spider、JS ファイル用の LinkFider と 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 美化機能付きで JS ファイル内の新しいパスを検索可能。LinkFinder のラッパーである JSScanner も見る価値あり。
  • goLinkFinder (go): HTML ソースと埋め込み javascript ファイルの両方からエンドポイントを抽出。bug hunters、red teamers、infosec ninjas に有用。
  • JSParser (python2.7): Tornado と JSBeautifier を使用して JavaScript ファイルから相対 URL を解析する python 2.7 スクリプト。AJAX リクエストの発見に便利。メンテされていない可能性あり。
  • relative-url-extractor (ruby): 与えられたファイル(HTML)から正規表現を使って相対 URL を抽出。ミニファイされたファイルから相対 URL を取り出すのに便利。
  • JSFScan (bash, several tools): 複数ツールを使って JS ファイルから興味深い情報を収集。
  • subjs (go): JS ファイルを検出。
  • page-fetch (go): headless browser でページを読み込み、ページ読み込み時にロードされるすべての URL を出力。
  • Feroxbuster (rust): 先に挙げたツールのいくつかのオプションを組み合わせた content discovery ツール。
  • Javascript Parsing: JS ファイル内のパスやパラメータを見つける Burp extension。
  • Sourcemapper: .js.map URL を与えると beautified JS コードを取得するツール。
  • xnLinkFinder: 指定ターゲットのエンドポイント発見に使うツール。
  • waymore: wayback machine からリンクを発見(wayback 内のレスポンスをダウンロードしてさらにリンクを探す)。
  • HTTPLoot (go): フォームを埋めてクロールしたり、特定の regex を使って機密情報を検出。
  • SpiderSuite: サイバーセキュリティ専門家向けの高度なマルチ機能 GUI web security Crawler/Spider。
  • jsluice (go): JavaScript ソースコードから URL、path、secrets、その他の興味深いデータを抽出する Go パッケージと command-line tool
  • ParaForge: リクエストからパラメータとエンドポイントを抽出して fuzzing/列挙用のカスタムワードリストを作成するシンプルな Burp Suite extension
  • katana (go): この作業に適した優れたツール。
  • Crawley (go): 見つけられるすべてのリンクを表示。

Brute Force directories and files

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

  • 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): spider ではないが、見つかった URL のリストを与えると重複した URL を削除するツール。
  • Scavenger: Burp の履歴から複数ページのディレクトリ一覧を作成する Burp Extension。
  • TrashCompactor: js imports に基づいて機能が重複する URL を削除。
  • Chamaleon: wapalyzer を使って使用技術を検出し、使用するワードリストを選択。

Recommended dictionaries:

新しいディレクトリが brute-forcing や spidering 中に発見された場合は、いつでもそのディレクトリを Brute-Force すべきです。

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: 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 を見つけたら、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 です。GET https://google.com HTTP/1.1 のような HTTP リクエストを(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 アプリケーションの包括的な列挙が完了したら、多くの可能な脆弱性をチェックする時です。チェックリストは次にあります:

Web Vulnerabilities Methodology

web 脆弱性の詳細:

Monitor Pages for changes

ページの変更を監視するには、例えば https://github.com/dgtlmoon/changedetection.io のようなツールを使い、脆弱性を導入する可能性のある修正を検出できます。

HackTricks Automatic Commands

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