33 KiB
80,443 - Pentesting Web Methodology
{{#include ../../banners/hacktricks-training.md}}
基本情報
ウェブサービスは最も一般的で広範なサービスであり、多くの異なる種類の脆弱性が存在します。
デフォルトポート: 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
{{#ref}} web-api-pentesting.md {{#endref}}
Methodology summary
この方法論では、あなたがドメイン(またはサブドメイン)を攻撃することを前提としています。そのため、発見された各ドメイン、サブドメイン、または不明なウェブサーバーを持つIPにこの方法論を適用する必要があります。
- 技術を特定することから始めます。技術を特定できた場合、テストの残りの部分で考慮すべきトリックを探します。
- 技術のバージョンに既知の脆弱性はありますか?
- よく知られた技術を使用していますか?より多くの情報を抽出するための便利なトリックはありますか?
- 実行するための専門スキャナーはありますか(例えば、wpscan)?
- 一般的なスキャナーを起動します。何かを見つけるか、興味深い情報を見つけるかはわかりません。
- 初期チェックから始めます:robots、sitemap、404エラー、SSL/TLSスキャン(HTTPSの場合)。
- ウェブページをスパイダーします:すべての可能なファイル、フォルダー、および使用されているパラメータを見つける時間です。また、特別な発見を確認します。
- ブルートフォースやスパイダー中に新しいディレクトリが発見された場合は、必ずスパイダーする必要があります。
- ディレクトリブルートフォース:発見されたすべてのフォルダーをブルートフォースして、新しいファイルやディレクトリを探します。
- ブルートフォースやスパイダー中に新しいディレクトリが発見された場合は、必ずブルートフォースする必要があります。
- バックアップチェック:一般的なバックアップ拡張子を追加して、発見されたファイルのバックアップを見つけられるかテストします。
- パラメータのブルートフォース:隠れたパラメータを見つけることを試みます。
- ユーザー入力を受け入れるすべての可能なエンドポイントを特定したら、それに関連するすべての種類の脆弱性を確認します。
- このチェックリストに従ってください
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 vulnerabilities of the web application version
Check if any WAF
- https://github.com/EnableSecurity/wafw00f
- https://github.com/Ekultek/WhatWaf.git
- https://nmap.org/nsedoc/scripts/http-waf-detect.html
Web tech tricks
異なるよく知られた技術での脆弱性を見つけるためのトリック:
- AEM - Adobe Experience Cloud
- Apache
- Artifactory
- Buckets
- CGI
- Drupal
- Flask
- Git
- Golang
- GraphQL
- H2 - Java SQL database
- IIS tricks
- Microsoft SharePoint
- JBOSS
- Jenkins
- Jira
- Joomla
- JSP
- Laravel
- Moodle
- Nginx
- PHP (phpには悪用できる興味深いトリックがたくさんあります)
- Python
- Spring Actuators
- Symphony
- Tomcat
- VMWare
- Web API Pentesting
- WebDav
- Werkzeug
- Wordpress
- Electron Desktop (XSS to RCE)
同じドメインが異なるポート、フォルダ、およびサブドメインで異なる技術を使用している可能性があることに注意してください。
ウェブアプリケーションが前述の技術/プラットフォームやその他の技術を使用している場合は、インターネットで新しいトリックを検索することを忘れないでください(そして教えてください!)。
Source Code Review
アプリケーションのソースコードがgithubで利用可能な場合、アプリケーションのホワイトボックステストを自分で行うことに加えて、現在のブラックボックステストに役立つ情報がいくつかあります:
- Change-logやReadme、Versionファイル、またはバージョン情報にアクセス可能なものはありますか?
- 資格情報はどのように、どこに保存されていますか?資格情報(ユーザー名やパスワード)が含まれる(アクセス可能な?)ファイルはありますか?
- パスワードはプレーンテキスト、暗号化されていますか、それともどのハッシュアルゴリズムが使用されていますか?
- 何かを暗号化するためのマスターキーを使用していますか?どのアルゴリズムが使用されていますか?
- 脆弱性を悪用してこれらのファイルのいずれかにアクセスできますか?
- githubに興味深い情報(解決済みおよび未解決の)問題はありますか?またはコミット履歴に(古いコミット内に導入されたパスワードがあるかもしれません)?
{{#ref}} code-review-tools.md {{#endref}}
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スキャナー
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の脆弱性に関する情報:
- https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/
- https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/
スパイダーリング
ウェブ内で何らかのスパイダーを起動します。スパイダーの目的は、テストされたアプリケーションからできるだけ多くのパスを見つけることです。したがって、ウェブクロールと外部ソースを使用して、できるだけ多くの有効なパスを見つける必要があります。
- 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: JSインポートに基づいて重複機能を持つURLを削除します。
- Chamaleon: 使用されている技術を検出するためにwapalyzerを使用し、使用するワードリストを選択します。
推奨辞書:
- https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt
- Dirsearchに含まれる辞書
- http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10
- Assetnoteワードリスト
- https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content
- raft-large-directories-lowercase.txt
- directory-list-2.3-medium.txt
- RobotsDisallowed/top10000.txt
- https://github.com/random-robbie/bruteforce-lists
- https://github.com/google/fuzzing/tree/master/dictionaries
- https://github.com/six2dez/OneListForAll
- https://github.com/random-robbie/bruteforce-lists
- https://github.com/ayoubfathi/leaky-paths
- /usr/share/wordlists/dirb/common.txt
- /usr/share/wordlists/dirb/big.txt
- /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
ブルートフォースやスパイダーリング中に新しいディレクトリが発見された場合は、必ずブルートフォースを行う必要があります。
見つかった各ファイルで確認すべきこと
- 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
- 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
- コメント: すべてのファイルのコメントを確認してください。資格情報や隠れた機能を見つけることができます。
- CTFをプレイしている場合、「一般的な」トリックは、ページの右側のコメント内に 情報を隠すことです(数百のスペースを使用して、ブラウザでソースコードを開いてもデータが見えないようにします)。もう一つの可能性は、いくつかの新しい行を使用して、ウェブページの下部にコメント内に情報を隠すことです。
- APIキー: APIキーを見つけた場合、さまざまなプラットフォームのAPIキーの使用方法を示すガイドがあります: keyhacks、 zile、 truffleHog、 SecretFinder、 RegHex、 DumpsterDive、 EarlyBird
- Google APIキー: AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjikのようなAPIキーを見つけた場合、プロジェクトgmapapiscannerを使用して、キーがアクセスできるAPIを確認できます。
- S3バケット: スパイダーリング中に、サブドメインやリンクがS3バケットに関連しているかどうかを確認してください。その場合、バケットの 権限を確認してください。
特別な発見
スパイダーリングとブルートフォースを実行している間に、興味深い ものを見つけることがあります。
興味深いファイル
- CSSファイル内の他のファイルへのリンクを探します。
- .gitファイルを見つけた場合、いくつかの情報を抽出できます
- .envを見つけた場合、APIキー、DBパスワード、その他の情報が見つかる可能性があります。
- APIエンドポイントを見つけた場合、それらをテストする必要があります。これらはファイルではありませんが、おそらく「ファイルのように見える」でしょう。
- JSファイル: スパイダーリングセクションで、JSファイルからパスを抽出できるいくつかのツールが言及されました。また、見つかった各JSファイルを監視することも興味深いでしょう。場合によっては、変更がコードに潜在的な脆弱性が導入されたことを示すかもしれません。たとえば、JSMonを使用できます。
- 発見されたJSファイルをRetireJSまたはJSHoleで確認して、脆弱性があるかどうかを確認してください。
- Javascript Deobfuscator and Unpacker: https://lelinhtinh.github.io/de4js/、https://www.dcode.fr/javascript-unobfuscator
- Javascript Beautifier: http://jsbeautifier.org/、http://jsnice.org/
- JsFuckのデオブフスケーション (文字でのjavascript:"[]!+" https://enkhee-osiris.github.io/Decoder-JSFuck/)
- TrainFuck:
+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.
- いくつかの場面で、使用されている正規表現を理解する必要があります。これは役立ちます: https://regex101.com/ または https://pythonium.net/regex
- フォームが検出されたファイルを監視することもできます。パラメータの変更や新しいフォームの出現は、潜在的な新しい脆弱な機能を示すかもしれません。
403 Forbidden/Basic Authentication/401 Unauthorized (バイパス)
{{#ref}} 403-and-401-bypasses.md {{#endref}}
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)
リダイレクション内にコンテンツを挿入することが可能です。このコンテンツはユーザーに表示されません(ブラウザがリダイレクションを実行するため)が、そこに隠されているものがあるかもしれません。
ウェブ脆弱性のチェック
ウェブアプリケーションの包括的な列挙が行われたので、多くの可能性のある脆弱性をチェックする時が来ました。チェックリストはここにあります:
{{#ref}} ../../pentesting-web/web-vulnerabilities-methodology.md {{#endref}}
ウェブ脆弱性に関する詳細情報は次のリンクで見つけることができます:
- https://six2dez.gitbook.io/pentest-book/others/web-checklist
- https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html
- https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection
ページの変更を監視
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.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}
{{#include ../../banners/hacktricks-training.md}}