80,443 - Pentesting Web Metodolojisi

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgi

Web servisi en yaygın ve kapsamlı servistir ve birçok farklı türde zafiyet mevcuttur.

Varsayılan port: 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

Bu metodolojide bir domain (veya subdomain) ve sadece ona saldıracağınızı varsayacağız. Bu yüzden, kapsam içindeki her keşfedilen domain, subdomain veya belirlenmemiş web server içeren IP için bu metodolojiyi uygulamalısınız.

  • Önce web server tarafından kullanılan technologies’i identifying ederek tespit edin. Eğer tech’i başarıyla tanımlayabilirseniz, testin geri kalanında akılda tutulması gereken tricks’leri arayın.
  • Kullandığınız technology sürümünün bilinen herhangi bir vulnerability’si var mı?
  • Bilinen herhangi bir tech mi kullanılıyor? Daha fazla bilgi elde etmek için herhangi bir useful trick var mı?
  • Çalıştırılacak herhangi bir specialised scanner var mı (ör. wpscan)?
  • General purposes scanners başlatın. Ne bulacaklarını ya da ilginç bilgi verip vermeyeceklerini bilemezsiniz.
  • Initial checks ile başlayın: robots, sitemap, 404 error ve SSL/TLS scan (HTTPS ise).
  • Web sayfasını spidering ile taramaya başlayın: Tüm olası files, folders ve kullanılan parameters’ı find etme zamanı. Ayrıca special findings’leri kontrol edin.
  • Yeni bir dizin brute-forcing veya spidering sırasında keşfedildiğinde, aynı anda spider edilmelidir.
  • Directory Brute-Forcing: Keşfedilen tüm klasörleri brute force ile yeni files ve directories arayın.
  • Yeni bir dizin brute-forcing veya spidering sırasında keşfedildiğinde, aynı anda Brute-Forced edilmelidir.
  • Backups checking: Ortaya çıkan discovered files için yaygın backup uzantılarını ekleyerek backups bulup bulamayacağınızı test edin.
  • Brute-Force parameters: Gizli parameters bulmaya çalışın.
  • Tüm olası endpoints ve user input kabul eden yerleri identified ettikten sonra, bunlarla ilgili her türlü vulnerability’yi kontrol edin.
  • Follow this checklist

Server Version (Vulnerable?)

Identify

Çalışan sunucunun sürümü için bilinen vulnerabilities olup olmadığını kontrol edin.
Cevabın HTTP headers ve cookies’i, kullanılan technologies ve/veya version’ı identify etmek için çok faydalı olabilir. Nmap scan server version’ı belirleyebilir, fakat ayrıca whatweb, webtech veya https://builtwith.com/** gibi araçlar da faydalı olabilir:**

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

Ara for vulnerabilities of the web application version

Herhangi bir WAF olup olmadığını kontrol et

Web teknoloji ipuçları

Kullanılan farklı ve iyi bilinen technologies içinde finding vulnerabilities için bazı tricks:

Dikkate al ki aynı alan adı farklı teknolojileri farklı portlarda, klasörlerde ve alt alan adlarında kullanıyor olabilir.
Eğer web uygulaması daha önce listelenmiş herhangi bir iyi bilinen tech/platform listed before veya any other kullanıyorsa, yeni taktikleri internetten search on the Internet aramayı unutma (ve bana haber ver!).

Source Code Review

Eğer uygulamanın source code’u github üzerinde erişilebiliyorsa, uygulama üzerinde kendi başına bir White box test yapmanın yanı sıra mevcut Black-Box testing için faydalı olabilecek some information bulunabilir:

  • Web üzerinden erişilebilir herhangi bir Change-log or Readme or Version dosyası ya da version info accessible var mı?
  • Credentials nasıl ve nerede saklanıyor? Credentials içeren (erişilebilir?) herhangi bir file var mı (kullanıcı adları veya şifreler)?
  • Passwords plain text halinde mi, encrypted mi veya hangi hashing algorithm kullanılıyor?
  • Bir şeyi şifrelemek için herhangi bir master key kullanılıyor mu? Hangi algorithm kullanılıyor?
  • Herhangi bir açığı kullanarak bu dosyalardan herhangi birine access any of these files sağlayabiliyor musunuz?
  • Github üzerindeki (çözülen ve çözülmemiş) issues içinde veya commit history’de herhangi bir interesting information in the github var mı (belki eski bir commit içinde bir password introduced inside an old commit)?

Source code Review / SAST Tools

Otomatik tarayıcılar

Genel amaçlı otomatik tarayıcılar

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

Bir CMS kullanılıyorsa run a scanner çalıştırmayı unutmayın; belki işe yarar bir şey bulunur:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin web sitelerini güvenlik sorunları için tarar. (GUI)\
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal veya (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

Bu noktada, (varsa verilen verilerle) istemci tarafından kullanılan web sunucusu hakkında bazı bilgilere ve test sırasında akılda tutulması gereken bazı hilelere zaten sahip olmalısınız. Şanslıysanız bir CMS bulup bir scanner çalıştırmışsınızdır.

Adım adım Web Application Discovery

Bu noktadan itibaren web uygulamasıyla etkileşime geçmeye başlayacağız.

İlk kontroller

İlginç bilgi içeren varsayılan sayfalar:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • Ana ve ikincil sayfalardaki yorumları da kontrol edin.

Hata oluşturma

Web sunucuları garip veri gönderildiğinde beklenmedik davranabilir. Bu, vulnerabilities oluşmasına veya hassas bilgilerin ifşasına yol açabilir.

  • Erişin fake pages gibi /whatever_fake.php (.aspx,.html,.etc)
  • Hatalar oluşturmak için cookie values ve parameter değerlerine “[]”, “]]”, ve “[[” ekleyin
  • Hata oluşturmak için giriş olarak /~randomthing/%s’i URL’in sonuna verin
  • PATCH, DEBUG gibi farklı HTTP Verbs deneyin veya FAKE gibi yanlış bir tane deneyin

Dosya yükleyip yükleyemeyeceğinizi kontrol edin (PUT verb, WebDav)

Eğer WebDav’ın enabled olduğunu ama root klasörde uploading files için yeterli izniniz olmadığını görürseniz şunları deneyin:

  • Brute Force kimlik bilgileri
  • WebDav ile web sayfası içindeki bulunan diğer klasörlere dosya yükleyin. Diğer klasörlere dosya yükleme izniniz olabilir.

SSL/TLS zafiyetleri

  • Eğer uygulama herhangi bir yerde kullanıcıyı HTTPS kullanmaya zorlamıyorsa, MitM saldırısına açıktır.
  • Eğer uygulama hassas verileri (parolalar) HTTP üzerinden gönderiyorsa, bu yüksek bir zafiyettir.

Vulnerabilities kontrol etmek için testssl.sh kullanın (Bug Bounty programlarında muhtemelen bu tür zafiyetler kabul edilmeyecektir) ve zafiyetleri tekrar kontrol etmek için a2sv kullanın:

./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

Web içinde bir tür spider çalıştırın. Spider’ın amacı test edilen uygulamadan mümkün olduğunca çok path bulmaktır. Bu yüzden web crawling ve harici kaynaklar kullanılarak mümkün olduğunca çok geçerli path bulunmalıdır.

  • gospider (go): HTML spider, LinkFinder in JS files and external sources (Archive.org, CommonCrawl.org, VirusTotal.com).
  • hakrawler (go): HML spider, with LinkFider for JS files and Archive.org as external source.
  • dirhunt (python): HTML spider, also indicates “juicy files”.
  • evine (go): Interactive CLI HTML spider. It also searches in Archive.org
  • meg (go): This tool isn’t a spider but it can be useful. You can just indicate a file with hosts and a file with paths and meg will fetch each path on each host and save the response.
  • urlgrab (go): HTML spider with JS rendering capabilities. However, it looks like it’s unmaintained, the precompiled version is old and the current code doesn’t compile
  • gau (go): HTML spider that uses external providers (wayback, otx, commoncrawl)
  • ParamSpider: This script will find URLs with parameter and will list them.
  • galer (go): HTML spider with JS rendering capabilities.
  • LinkFinder (python): HTML spider, with JS beautify capabilities capable of search new paths in JS files. It could be worth it also take a look to JSScanner, which is a wrapper of LinkFinder.
  • goLinkFinder (go): To extract endpoints in both HTML source and embedded javascript files. Useful for bug hunters, red teamers, infosec ninjas.
  • JSParser (python2.7): A python 2.7 script using Tornado and JSBeautifier to parse relative URLs from JavaScript files. Useful for easily discovering AJAX requests. Looks like unmaintained.
  • relative-url-extractor (ruby): Given a file (HTML) it will extract URLs from it using nifty regular expression to find and extract the relative URLs from ugly (minify) files.
  • JSFScan (bash, several tools): Gather interesting information from JS files using several tools.
  • subjs (go): Find JS files.
  • page-fetch (go): Load a page in a headless browser and print out all the urls loaded to load the page.
  • Feroxbuster (rust): Content discovery tool mixing several options of the previous tools
  • Javascript Parsing: A Burp extension to find path and params in JS files.
  • Sourcemapper: A tool that given the .js.map URL will get you the beatified JS code
  • xnLinkFinder: This is a tool used to discover endpoints for a given target.
  • waymore: Discover links from the wayback machine (also downloading the responses in the wayback and looking for more links)
  • HTTPLoot (go): Crawl (even by filling forms) and also find sensitive info using specific regexes.
  • SpiderSuite: Spider Suite is an advance multi-feature GUI web security Crawler/Spider designed for cyber security professionals.
  • jsluice (go): It’s a Go package and command-line tool for extracting URLs, paths, secrets, and other interesting data from JavaScript source code.
  • ParaForge: ParaForge is a simple Burp Suite extension to extract the paramters and endpoints from the request to create custom wordlist for fuzzing and enumeration.
  • katana (go): Awesome tool for this.
  • Crawley (go): Print every link it’s able to find.

Brute Force directories and files

Start brute-forcing from the root folder and be sure to brute-force all the directories found using this method and all the directories discovered by the Spidering (you can do this brute-forcing recursively and appending at the beginning of the used wordlist the names of the found directories).
Tools:

  • Dirb / Dirbuster - Included in Kali, old (and slow) but functional. Allow auto-signed certificates and recursive search. Too slow compared with th other options.
  • Dirsearch (python): It doesn’t allow auto-signed certificates but allows recursive search.
  • Gobuster (go): It allows auto-signed certificates, it doesn’t have recursive search.
  • Feroxbuster - Fast, supports recursive search.
  • wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
  • ffuf - Fast: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
  • uro (python): This isn’t a spider but a tool that given the list of found URLs will to delete “duplicated” URLs.
  • Scavenger: Burp Extension to create a list of directories from the burp history of different pages
  • TrashCompactor: Remove URLs with duplicated functionalities (based on js imports)
  • Chamaleon: It uses wapalyzer to detect used technologies and select the wordlists to use.

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

Special findings

While performing the spidering and brute-forcing you could find interesting things that you have to notice.

Interesting files

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

If any page responds with that code, it’s probably a bad configured proxy. If you send a HTTP request like: GET https://google.com HTTP/1.1 (with the host header and other common headers), the proxy will try to access google.com and you will have found a SSRF.

NTLM Authentication - Info disclosure

If the running server asking for authentication is Windows or you find a login asking for your credentials (and asking for domain name), you can provoke an information disclosure.
Send the header: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” and due to how the NTLM authentication works, the server will respond with internal info (IIS version, Windows version…) inside the header “WWW-Authenticate”.
You can automate this using the nmap pluginhttp-ntlm-info.nse”.

HTTP Redirect (CTF)

It is possible to put content inside a Redirection. This content won’t be shown to the user (as the browser will execute the redirection) but something could be hidden in there.

Web Vulnerabilities Checking

Now that a comprehensive enumeration of the web application has been performed it’s time to check for a lot of possible vulnerabilities. You can find the checklist here:

Web Vulnerabilities Methodology

Find more info about web vulns in:

Monitor Pages for changes

You can use tools such as https://github.com/dgtlmoon/changedetection.io to monitor pages for modifications that might insert vulnerabilities.

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 Hacking'i öğrenin ve pratik yapın:<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 Hacking'i öğrenin ve pratik yapın: <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 Hacking'i öğrenin ve pratik yapın: <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'i Destekleyin</summary>
>
> - [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
> - **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** bizi **takip edin** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
>
> </details>