80,443 - Pentesting Web Methodology

**htARTE(HackTricks AWS Red Team Expert)** **を使って、ゼロからヒーローまでAWSハッキングを学ぶ**

HackTricksをサポートする他の方法:

ハッキングキャリアに興味がある方や解読不能なものをハックしたい方 - 採用中です!流暢なポーランド語の読み書きが必要です)。

基本情報

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

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

pageWeb API Pentesting

方法論の要約

この方法論では、ドメイン(またはサブドメイン)を攻撃すると仮定します。したがって、発見した各ドメイン、サブドメイン、またはスコープ内の未確定のWebサーバーにこの方法論を適用する必要があります。

サーバーバージョン(脆弱性あり?)

識別

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

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

Webアプリケーションの脆弱性 バージョンの検索

WAFの有無を確認

Web技術のトリック

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

同じドメインが異なるポートフォルダサブドメイン異なる技術を使用している可能性があることに注意してください。 Webアプリケーションが以前にリストされたよく知られた技術/プラットフォームまたはその他を使用している場合は、インターネットで新しいトリックを検索してください(そして私に知らせてください!)。

ソースコードレビュー

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

  • 変更ログまたはReadmeまたはバージョン情報がWeb経由でアクセス可能なファイルまたは何かがあるか?

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

  • パスワード平文暗号化されているか、どのハッシュアルゴリズムが使用されていますか?

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

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

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

pageSource 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が使用されている場合は、スキャナーを実行することを忘れないでください。おそらく興味深い情報が見つかるかもしれません:

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を見つけてスキャナーを実行しているかもしれません。

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

この時点から、Webアプリケーションとやり取りを開始します。

初期チェック

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

  • /robots.txt

  • /sitemap.xml

  • /crossdomain.xml

  • /clientaccesspolicy.xml

  • /.well-known/

  • メインとセカンダリページのコメントもチェックしてください。

エラーを強制する

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

  • /whatever_fake.php (.aspx、.html、など) のような偽のページにアクセス

  • クッキー値パラメータ値に "[]", "]]", および "[[" を追加してエラーを発生させる

  • URLの末尾/~randomthing/%s と入力してエラーを生成する

  • PATCH、DEBUGなどの異なるHTTP動詞を試してみる

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

WebDav有効になっていることがわかった場合でも、ルートフォルダにファイルをアップロードする権限が不足している場合は、次のようにしてみてください:

  • 資格情報をブルートフォースする

  • WebDavを介してファイルをアップロードして、Webページ内の他のフォルダにアクセスします。他のフォルダにファイルをアップロードする権限があるかもしれません。

SSL/TLSの脆弱性

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

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

testssl.shを使用して脆弱性をチェックします(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>

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

スパイダリング

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

  • gospider (go): HTMLスパイダー、JSファイル内のLinkFinder、外部ソース(Archive.org、CommonCrawl.org、VirusTotal.com、AlienVault.com)を使用

  • hakrawler (go): HTMLスパイダー、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): JSファイル内の新しいパスを検索できるJSビューティファイ機能を備えたHTMLスパイダー。また、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 machineからリンクを発見します(waybackの応答をダウンロードし、さらにリンクを探します)

  • HTTPLoot (go): フォームの記入によるクロールや、特定の正規表現を使用して機密情報を見つける

  • SpiderSuite: Spider Suiteは、サイバーセキュリティ専門家向けに設計された高度なマルチ機能GUIウェブセキュリティクローラー/スパイダーです

  • jsluice (go): JavaScriptソースコードからURL、パス、シークレットなどの興味深いデータを抽出するためのGoパッケージおよびコマンドラインツール

  • ParaForge: リクエストからパラメータとエンドポイントを抽出して、ファジングと列挙のためのカスタムワードリストを作成するためのシンプルなBurp Suite拡張機能

  • katana (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のリストを削除するツールです

  • Scavenger: 異なるページのburp履歴からディレクトリのリストを作成するためのBurp拡張機能

  • TrashCompactor: 重複機能を持つURLを削除します(jsのインポートに基づく)

  • Chamaleon: 使用されている技術を検出し、使用するワードリストを選択するためにwapalyzerを使用します

推奨される辞書:

ブルートフォースやスパイダリング中に新しいディレクトリが見つかった場合は、ブルートフォースする必要があります。

各ファイルでチェックすべきこと

  • リンク切れチェッカー: 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を使用することもできます。

  • 新しいパラメータの発見: Arjunparamethx8 およびParam Miner などのツールを使用して、隠されたパラメータを発見できます。可能であれば、各実行可能なWebファイルで隠されたパラメータを検索してみてください。

  • Arjunのすべてのデフォルトワードリスト: https://github.com/s0md3v/Arjun/tree/master/arjun/db

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

  • コメント: すべてのファイルのコメントをチェックし、資格情報隠された機能を見つけることができます。

  • CTFをしている場合、ページの右側情報隠すために(ブラウザでソースコードを開いてもデータが見えないように)数百のスペースを使用するなど、ページコメント情報隠すという“一般的”なトリックがあります。他の可能性としては、いくつかの新しい行を使用して、Webページのにコメントで情報を隠すことがあります。

  • APIキー: APIキーを見つけた場合、異なるプラットフォームのAPIキーの使用方法を示すガイドがあります: keyhacksziletruffleHogSecretFinderRegHexDumpsterDiveEarlyBird

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

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

特別な発見

スパイダリングブルートフォースを実行する際に、注意すべき 興味深い 事柄が見つかる可能性があります。

興味深いファイル

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

  • _.git_ファイルを見つけた場合、いくつかの情報を抽出できます。

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

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

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

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

  • JsFuck deobfuscation(文字列"[]!+"を使用した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 (bypass)

page403 & 401 Bypasses

502 Proxy Error

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

NTLM認証 - 情報漏洩

認証を求める実行中のサーバーがWindowsであるか、資格情報を要求するログインが見つかった場合(およびドメイン名を要求する場合)、情報漏洩を引き起こすことができます。 “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”というヘッダー送信すると、NTLM認証の動作方法により、サーバーはヘッダー"WWW-Authenticate"内に内部情報(IISバージョン、Windowsバージョンなど)を返します。 これは_nmapプラグイン_ "http-ntlm-info.nse"を使用して自動化できます。

HTTPリダイレクト(CTF)

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

Web脆弱性のチェック

Webアプリケーションの包括的な列挙が実行されたので、さまざまな脆弱性をチェックする時が来ました。チェックリストはこちらで見つけることができます:

pageWeb Vulnerabilities Methodology

Web脆弱性に関する詳細情報はこちらで確認できます:

変更を監視するページ

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.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}
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

Last updated