80,443 - Pentesting Web Metodolojisi

Reading time: 19 minutes

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 Bilgiler

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

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

Web API Pentesting

Metodoloji özeti

Bu metodolojide bir domain (veya subdomain) ve yalnızca ona saldıracağınızı varsayıyoruz. Bu nedenle, bu metodolojiyi kapsam içindeki her keşfedilen domain, subdomain veya belirsiz web sunucusuna sahip IP için uygulamalısınız.

  • Öncelikle web sunucusu tarafından kullanılan technologies'i identifying edin. Teknolojiyi tespit edebilirseniz, testin geri kalanında aklınızda tutulması gereken tricks'lere bakın.
  • Teknoloji sürümünün bilinen herhangi bir known vulnerability var mı?
  • Herhangi bir well known tech mi kullanılıyor? Daha fazla bilgi çıkarmak için herhangi bir useful trick var mı?
  • Çalıştırılacak herhangi bir specialised scanner var mı (ör. wpscan)?
  • general purposes scanners çalıştırın. Ne bulacaklarını veya ilginç bilgi elde edip etmeyeceklerini 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 parameters being used'i find etme zamanı. Ayrıca special findings'leri kontrol edin.
  • Note that anytime a new directory is discovered during brute-forcing or spidering, it should be spidered.
  • Directory Brute-Forcing: Keşfedilen tüm klasörleri yeni files ve directories arayarak brute force etmeyi deneyin.
  • Note that anytime a new directory is discovered during brute-forcing or spidering, it should be Brute-Forced.
  • Backups checking: Yaygın yedek uzantıları ekleyerek discovered files'ın backups'larını bulup bulamayacağınızı test edin.
  • Brute-Force parameters: Gizli parametreleri bulmaya çalışın.
  • Tüm olası endpoints ve user input kabul edenleri identified ettikten sonra, bunlarla ilgili her türlü vulnerabilities için kontrol edin.
  • Bu checklist'i takip edin

Sunucu Sürümü (Zafiyetli?)

Tespit

Çalışan sunucunun version'ı için bilinen herhangi bir known vulnerabilities olup olmadığını kontrol edin.
Cevabın HTTP headers and cookies of the response'i, kullanılan technologies ve/veya versionidentify etmek için çok yararlı olabilir. Nmap scan sunucu sürümünü tespit edebilir, ayrıca araçlar whatweb, webtech veya https://builtwith.com/ da faydalı olabilir:

bash
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

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

Web teknoloji tüyoları

Kullanılan çeşitli iyi bilinen teknolojilerde zafiyetleri bulmak için bazı ipuçları:

Take into account that the same domain can be using different technologies in different ports, folders and subdomains.
Aynı alan adının farklı portlarda, klasörlerde ve alt alan adlarında farklı teknolojiler kullanıyor olabileceğini unutma.
Eğer web uygulaması önceden listelenmiş herhangi bir tanınmış teknoloji/platform veya başka bir teknoloji kullanıyorsa, İnternette yeni taktikleri aramayı unutma (ve bana haber ver!).

Kaynak Kod İncelemesi

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

  • Web üzerinden erişilebilen herhangi bir Change-log or Readme or Version dosyası veya erişilebilir sürüm bilgisi var mı?
  • Credentials nasıl ve nerede saklanmış? Kimlik bilgilerini içeren (erişilebilir?) herhangi bir dosya (kullanıcı adları veya parolalar) var mı?
  • Parolalar düz metin mi, şifrelenmiş mi yoksa hangi hash algoritması kullanılıyor?
  • Bir şeyi şifrelemek için herhangi bir master key kullanılıyor mu? Hangi algoritma kullanılıyor?
  • Herhangi bir zafiyeti kullanarak bu dosyalara erişebiliyor musun?
  • Github'da ilginç bilgiler var mı (çözülen ve çözülmeyen) issues? Veya commit history'de (ör. eski bir commit içinde bazı parolalar eklenmiş olabilir)?

Source code Review / SAST Tools

Otomatik tarayıcılar

Genel amaçlı otomatik tarayıcılar

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 tarama araçları

Bir CMS kullanılıyorsa scanner çalıştırmayı unutmayın, belki ilginç bir şey bulunur:

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

Bu noktada, müşteri tarafından kullanılan web sunucusu hakkında (veri verildiyse) zaten bazı bilgilere ve test sırasında akılda tutulması gereken bazı püf noktalarına sahip olmalısınız. Şanslıysanız bir CMS bulmuş ve bir scanner çalıştırmışsınızdır.

Adım Adım Web Uygulaması Keşfi

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/
  • Ayrıca ana ve ikincil sayfalardaki yorumları kontrol edin.

Hataları zorlamak

Web sunucuları tuhaf veriler gönderildiğinde beklenmedik davranabilir. Bu, zafiyetlere veya hassas bilgilerin ifşasına yol açabilir.

  • /whatever_fake.php (.aspx,.html,.etc) gibi sahte sayfalara erişin
  • Hata oluşturmak için cookie değerlerine ve parametre değerlerine "[]", "]]", ve "[[" ekleyin
  • URL'in sonuna /~randomthing/%s gibi bir girdi vererek hata oluşturun
  • PATCH, DEBUG gibi farklı HTTP Verbs deneyin veya FAKE gibi yanlış olanları deneyin

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

Eğer WebDav'in etkin olduğunu fakat root klasörüne dosya yükleme için yeterli izniniz olmadığını tespit ederseniz, şunları deneyin:

  • Brute Force ile kimlik bilgilerini kırın
  • WebDav ile web sayfasında bulunan diğer klasörlere dosya yükleyin. Diğer klasörlere yükleme izniniz olabilir.

SSL/TLS zafiyetleri

  • Eğer uygulama herhangi bir kısımda kullanıcıyı HTTPS kullanmaya zorlamıyorsa, o zaman MitM'e karşı zayıftır
  • Eğer uygulama hassas verileri (parolalar) HTTP kullanarak gönderiyorsa, bu yüksek bir zafiyettir.

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

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

Web içinde bir tür spider başlatın. Spider'ın amacı test edilen uygulamadan mümkün olduğunca fazla yolu bulmaktır. Bu yüzden, web crawling ve dış kaynaklar kullanılarak mümkün olduğunca çok geçerli yol bulunmalıdır.

  • gospider (go): HTML spider, JS dosyalarındaki LinkFinder ve harici kaynaklar (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
  • hakrawler (go): HML spider, JS dosyaları için LinkFider ve harici kaynak olarak Archive.org ile.
  • dirhunt (python): HTML spider, ayrıca "juicy files" gösterir.
  • evine (go): Etkileşimli CLI HTML spider. Ayrıca Archive.org'da arama yapar.
  • meg (go): Bu araç bir spider değil ama faydalı olabilir. Hosts içeren bir dosya ve yollar içeren bir dosya belirtirsiniz; meg her host üzerindeki her yolu fetch eder ve yanıtı kaydeder.
  • urlgrab (go): JS render etme yeteneklerine sahip HTML spider. Ancak bakılmıyor gibi, ön-derlenmiş sürümü eski ve mevcut kod derlenmiyor.
  • gau (go): Harici sağlayıcıları (wayback, otx, commoncrawl) kullanan HTML spider.
  • ParamSpider: Bu script parametre içeren URL'leri bulur ve listeler.
  • galer (go): JS render etme yeteneklerine sahip HTML spider.
  • LinkFinder (python): HTML spider, JS beautify yetenekleri ile JS dosyalarında yeni yollar arayabilir. Ayrıca LinkFinder'ın bir wrapper'ı olan JSScanner'a bakmaya değer.
  • goLinkFinder (go): Hem HTML kaynağında hem gömülü javascript dosyalarında endpoint'leri çıkarmak için. Bug avcıları, red team ve infosec uzmanları için kullanışlı.
  • JSParser (python2.7): Tornado ve JSBeautifier kullanan, JavaScript dosyalarından relative URL'leri parse eden bir python 2.7 scripti. AJAX isteklerini kolayca keşfetmek için kullanışlı. Bakılmıyor gibi.
  • relative-url-extractor (ruby): Verilen bir dosyadan (HTML) nispi URL'leri çıkarmak için kullanışlı regex ile minify edilmiş dosyalardan URL çıkarır.
  • JSFScan (bash, several tools): Birçok araç kullanarak JS dosyalarından ilginç bilgileri toplar.
  • subjs (go): JS dosyalarını bulur.
  • page-fetch (go): Bir sayfayı headless browser'da yükler ve sayfayı yüklemek için çağrılan tüm url'leri yazdırır.
  • Feroxbuster (rust): Önceki araçların çeşitli seçeneklerini harmanlayan content discovery aracı.
  • Javascript Parsing: JS dosyalarındaki path ve paramları bulmak için bir Burp eklentisi.
  • Sourcemapper: .js.map URL'si verildiğinde beautified JS kodunu almanızı sağlayan araç.
  • xnLinkFinder: Belirli bir hedef için endpoint'leri keşfetmekte kullanılan bir araç.
  • waymore: wayback machine'den link keşfi (ayrıca wayback'teki yanıtları indirip daha fazla link arama).
  • HTTPLoot (go): Crawl (form doldurarak bile) yapar ve belirli regex'lerle hassas bilgileri de bulur.
  • SpiderSuite: Spider Suite, siber güvenlik profesyonelleri için tasarlanmış gelişmiş çok özellikli GUI web security Crawler/Spider.
  • jsluice (go): JavaScript kaynak kodundan URL'ler, yollar, secret'lar ve diğer ilginç verileri çıkarmak için Go paketi ve komut satırı aracı.
  • ParaForge: ParaForge, isteklerden parametreleri ve endpoint'leri çıkarmak için basit bir Burp Suite extension'dır; fuzzing ve enumeration için özelleştirilmiş wordlist oluşturur.
  • katana (go): Bu iş için harika bir araç.
  • Crawley (go): Bulabildiği her linki yazdırır.

Brute Force directories and files

Kök klasörden brute-forcing başlatın ve tüm bulunan directory'leri bu method ile ve Spidering tarafından keşfedilen tüm directory'leri brute-force ettiğinizden emin olun (bunu recursive olarak yapabilir ve kullanılan wordlist'in başına bulunan directory isimlerini ekleyebilirsiniz).
Araçlar:

  • Dirb / Dirbuster - Kali içinde gelir, eski (ve yavaş) ama iş görür. Auto-signed sertifikalara ve recursive aramaya izin verir. Diğer seçeneklerle karşılaştırıldığında çok yavaş.
  • Dirsearch (python)**: Auto-signed sertifikalara izin vermez ama recursive aramaya izin verir.
  • Gobuster (go): Auto-signed sertifikalara izin verir, ancak recursive arama özelliği yoktur.
  • Feroxbuster - Hızlı, recursive aramayı destekler.
  • wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
  • ffuf - Hızlı: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
  • uro (python): Bu bir spider değil ama bulunan URL listesi verildiğinde "duplicate" URL'leri siler.
  • Scavenger: Farklı sayfaların burp geçmişinden directory listesi oluşturmak için Burp Extension.
  • TrashCompactor: JS import'larına dayanarak fonksiyonel olarak duplicate olan URL'leri kaldırır.
  • Chamaleon: Wappalyzer kullanarak kullanılan teknolojileri tespit eder ve kullanılacak wordlist'leri seçer.

Recommended dictionaries:

Her yeni directory spidering veya brute-forcing sırasında keşfedildiğinde, o directory mutlaka Brute-Forced edilmelidir.

What to check on each file found

  • Broken link checker: HTML içindeki broken link'leri bulur; bu linkler takeover'a açık olabilir.
  • File Backups: Tüm dosyaları bulduktan sonra, tüm executable dosyaların yedeklerini arayın (".php", ".aspx"...). Yedek adlandırma için yaygın varyasyonlar: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp ve file.old. Ayrıca bfac veya backup-gen araçlarını kullanabilirsiniz.
  • Discover new parameters: Gizli parametreleri keşfetmek için Arjun, parameth, x8 ve Param Miner gibi araçları kullanabilirsiniz. Mümkünse, her executable web dosyasında gizli parametreleri aramayı deneyin.
  • 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: Tüm dosyaların yorumlarını kontrol edin; credentials veya gizli fonksiyonlar bulunabilir.
  • Eğer CTF oynuyorsanız, yaygın bir taktik sayfa kaynağında tarayıcıyla görünmeyecek şekilde (örneğin sağa yüzlerce space koyarak) yorum içinde bilgi saklamak veya sayfanın en altına birkaç yeni satırla yorum içinde bilgi gizlemek olabilir.
  • API keys: Herhangi bir API key bulursanız farklı platformların API key'lerini nasıl kullanacağınıza dair rehberler vardır: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
  • Google API keys: AIza ile başlayan bir API key (ör. AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik) bulursanız, bu key'in hangi API'lere erişebildiğini kontrol etmek için gmapapiscanner projesini kullanabilirsiniz.
  • S3 Buckets: Spidering sırasında herhangi bir subdomain veya herhangi bir link bir S3 bucket ile ilişkili ise, bu durumda bucket izinlerini kontrol edin.

Special findings

Spidering ve brute-forcing yaparken dikkat etmeniz gereken ilginç şeyler çıkabilir.

Interesting files

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

Eğer herhangi bir sayfa bu kod ile yanıt veriyorsa, muhtemelen kötü yapılandırılmış bir proxy'dir. Eğer şu şekilde bir HTTP isteği gönderirseniz: GET https://google.com HTTP/1.1 (host header ve diğer yaygın header'larla), proxy google.com'a erişmeye çalışacak ve bir** SSRF** bulmuş olacaksınız.

NTLM Authentication - Info disclosure

Eğer authentication isteyen sunucu Windows ise veya oturum açma domain ismi isteyip credentials talep ediyorsa, bir bilgi sızıntısı provake edebilirsiniz.
Aşağıdaki header'ı gönderin: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” ve NTLM authentication'ın çalışma şekli nedeniyle sunucu "WWW-Authenticate" header'ı içinde iç ağ bilgileri (IIS versiyonu, Windows versiyonu...) ile cevap verecektir.
Bunu otomatikleştirmek için nmap plugin "http-ntlm-info.nse" kullanılabilir.

HTTP Redirect (CTF)

Bir Redirection içine içerik koymak mümkündür. Bu içerik kullanıcıya gösterilmeyecektir (tarayıcı yönlendirmeyi gerçekleştirecektir) ama orada bir şey gizlenmiş olabilir.

Web Vulnerabilities Checking

Web uygulaması için kapsamlı bir enumeration yapıldıktan sonra birçok olası zafiyet için kontrol zamanı. Kontrol listesi burada:

Web Vulnerabilities Methodology

Web zafiyetleri hakkında daha fazla bilgi:

Monitor Pages for changes

Sayfa değişikliklerini izlemek için https://github.com/dgtlmoon/changedetection.io gibi araçlar kullanılabilir; bu değişiklikler zafiyet eklenmesine yol açabilir.

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