hacktricks/network-services-pentesting/pentesting-web/README.md
2024-02-10 18:14:16 +00:00

29 KiB
Raw Blame History

80,443 - Web Pentesting Metodolojisi

AWS hacklemeyi sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:

Bounty ipucu: Intigriti'ye kaydolun, hackerlar tarafından oluşturulan bir premium bounty platformu! Bugün https://go.intigriti.com/hacktricks adresine katılın ve $100,000'e kadar ödüller kazanmaya başlayın!

{% embed url="https://go.intigriti.com/hacktricks" %}

Temel Bilgiler

Web servisi en yaygın ve kapsamlı hizmettir ve birçok farklı türde zayıflıklar bulunur.

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 Rehberi

{% content-ref url="web-api-pentesting.md" %} web-api-pentesting.md {% endcontent-ref %}

Metodoloji Özeti

Bu metodolojide, bir alan adına (veya alt alan adına) saldırı düzenleyeceğinizi varsayacağız ve sadece ona odaklanacağız. Bu nedenle, belirlenen her bir alan adı, alt alan adı veya kapsam içindeki belirsiz web sunucusu için bu metodolojiyi uygulamanız gerekmektedir.

  • İlk olarak, web sunucusu tarafından kullanılan teknolojileri belirleyin. Eğer teknolojiyi başarıyla belirleyebilirseniz, testin geri kalanı boyunca aklınızda tutmanız gereken püf noktalarını arayın.
  • Kullanılan teknolojinin bilinen bir zafiyeti var mı?
  • Herhangi bir tanınmış teknoloji kullanılıyor mu? Daha fazla bilgi çıkarmak için herhangi bir yararlı püf noktası var mı?
  • Çalıştırılması gereken herhangi bir özel tarayıcı var mı (örneğin wpscan)?
  • Genel amaçlı tarayıcıları başlatın. Belki bir şey bulacaklar veya ilginç bilgiler bulacaklar diye asla bilemezsiniz.
  • İlk kontrollerle başlayın: robots, sitemap, 404 hatası ve SSL/TLS taraması (HTTPS ise).
  • Web sayfasını spiderlemeye başlayın: Tüm olası dosyaları, klasörleri ve kullanılan parametreleri bulma zamanı geldi. Ayrıca, özel bulguları kontrol edin.
  • Herhangi bir dizin, brute-force veya spidering sırasında keşfedildiğinde, spidering işlemine tabi tutulmalıdır.
  • Dizin Brute-Forcing: Keşfedilen tüm klasörleri brute force yöntemiyle tarayarak yeni dosyaları ve dizinleri bulmaya çalışın.
  • Herhangi bir dizin, brute-force veya spidering sırasında keşfedildiğinde, brute force yöntemiyle taranmalıdır.
  • Yedekleri kontrol etme: Keşfedilen dosyaların ortak yedek uzantıları eklenerek yedeklemeleri bulup test edin.
  • Parametreleri Brute Force Etme: Gizli parametreleri bulmaya çalışın.
  • Tüm kullanıcı girişi kabul eden uç noktaları belirledikten sonra, bunlarla ilgili tüm türdeki zafiyetleri kontrol edin.
  • Bu kontrol listesini takip edin

Sunucu Sürümü (Zafiyetli mi?)

Belirleme

Çalışan sunucu sürümü için bilinen zafiyetlerin olup olmadığını kontrol edin.
HTTP başlıkları ve çerezlerinin yanıtı, kullanılan teknolojileri ve/veya sürümü belirlemek için çok faydalı olabilir. Nmap taraması sunucu sürümünü belirleyebilir, ancak 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

Web uygulamasının sürümünün zafiyetlerini aramak için arama yapın.

Herhangi bir WAF kontrol edin

Web teknolojisi hileleri

Farklı popüler teknolojilerdeki zafiyetleri bulmak için bazı hileler:

Aynı alan adının farklı portlarda, dizinlerde ve alt alanlarda farklı teknolojiler kullanabileceğini unutmayın.
Web uygulaması herhangi bir önceden listelenen teknoloji/platform veya başka bir teknoloji kullanıyorsa, yeni hileler için İnternet'te arama yapmayı unutmayın (ve bana bildirin!).

Kaynak Kod İncelemesi

Eğer uygulamanın kaynak kodu github üzerinde mevcutsa, uygulamanın kendi beyaz kutu testini yapmanın yanı sıra, şu anki siyah kutu testi için yararlı olabilecek bazı bilgiler bulunmaktadır:

  • Web üzerinden erişilebilen bir Değişiklik Günlüğü veya Readme veya Sürüm dosyası veya sürüm bilgisi içeren herhangi bir şey var mı?
  • Kimlik bilgileri nasıl ve nerede saklanır? Kimlik bilgilerini içeren (erişilebilir?) bir dosya var mı (kullanıcı adları veya şifreler)?
  • Şifreler düz metin mi, şifrelenmiş mi veya hangi karma algoritması kullanılıyor?
  • Bir şeyi şifrelemek için herhangi bir anahtar kullanılıyor mu? Hangi algoritma kullanılıyor?
  • Bu dosyalardan herhangi birine, bir zafiyeti istismar ederek erişebilir misiniz?
  • Github'da (çözülmüş ve çözülmemiş) sorunlarda veya commit geçmişinde (belki eski bir commit içine girilmiş bir şifre) ilginç bilgiler var mı?

{% content-ref url="code-review-tools.md" %} code-review-tools.md {% endcontent-ref %}

Otomatik tarama araçları

Genel amaçlı otomatik tarama araç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 tarama araçları

Eğer bir CMS kullanılıyorsa, bir tarama aracı çalıştırmayı unutmayın, belki de ilginç bir şey bulunabilir:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: Güvenlik sorunları için WordPress, Drupal, Joomla, vBulletin web sitelerini 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, istemci tarafından kullanılan web sunucusu hakkında bazı bilgilere (veri verilmişse) ve test sırasında akılda tutulması gereken bazı ipuçlarına zaten sahip olmanız gerekiyor. Şanslıysanız bir CMS bulmuş ve bazı taramalar yapmış olabilirsiniz.

Adım adım Web Uygulama Keşfi

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

İlk kontroller

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

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

Hataları zorlama

Web sunucuları, onlara garip veriler gönderildiğinde beklenmedik şekilde davranabilir. Bu, zayıflıkları veya hassas bilgilerin ifşa edilmesini açabilir.

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

Dosya yükleyebilir misiniz kontrol edin (PUT fiili, WebDav)

Eğer WebDav'ın etkinleştirildiğini ve kök klasöre dosya yüklemek için yeterli izninizin olmadığını bulursanız:

  • Kimlik bilgilerini Brute Force ile deneyin
  • WebDav aracılığıyla dosya yükleme işlemi yaparak web sayfasının içindeki diğer bulunan klasörlere dosya yüklemek için izniniz olabilir.

SSL/TLS zafiyetleri

  • Uygulama herhangi bir yerde HTTPS kullanımını zorlamıyorsa, o zaman MitM'ye karşı savunmasızdır
  • Uygulama, HTTP kullanarak hassas verileri (şifreler) gönderiyorsa. Bu yüksek bir zafiyettir.

testssl.sh kullanarak zafiyetleri kontrol edin (Bounty Programlarında muhtemelen bu tür zafiyetler kabul edilmeyecektir) ve zafiyetleri yeniden 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>

SSL/TLS zafiyetleri hakkında bilgiler:

Spidering

Web içinde bir tür spider başlatın. Spider'ın amacı, test edilen uygulamadan mümkün olduğunca çok yol bulmaktır. Bu nedenle, mümkün olduğunca çok geçerli yol bulmak için web taraması ve harici kaynaklar kullanılmalıdır.

  • gospider (go): HTML spider, JS dosyalarında 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.
  • dirhunt (python): HTML spider, ayrıca "juicy files" belirtir.
  • evine (go): Arşiv.org'da da arama yapabilen etkileşimli CLI HTML spider.
  • meg (go): Bu araç bir spider değildir, ancak yararlı olabilir. Sadece hostlarla ilgili bir dosya ve yollarla ilgili bir dosya belirtin ve meg her bir yolu her bir hostta alacak ve yanıtı kaydedecektir.
  • urlgrab (go): JS renderleme yeteneklerine sahip HTML spider. Bununla birlikte, bakımsız gibi görünüyor, derlenmiş sürüm eski ve mevcut kod derlenmiyor.
  • gau (go): Harici sağlayıcıları (wayback, otx, commoncrawl) kullanan HTML spider.
  • ParamSpider: Bu betik parametre içeren URL'leri bulacak ve listeye alacak.
  • galer (go): JS renderleme yeteneklerine sahip HTML spider.
  • LinkFinder (python): JS dosyalarında yeni yolları arayabilen JS güzelleştirme yeteneklerine sahip HTML spider. Ayrıca JSScanner'a da bir göz atmakta fayda var, bu LinkFinder'ın bir sarmalayıcısıdır.
  • goLinkFinder (go): Hem HTML kaynağında hem de gömülü javascript dosyalarında uç noktaları çıkarmak için. Hata avcıları, kırmızı takım üyeleri, bilgi güvenliği ninjaları için kullanışlı.
  • JSParser (python2.7): Tornado ve JSBeautifier kullanarak JavaScript dosyalarından göreceli URL'leri ayrıştıran bir python 2.7 betiği. AJAX isteklerini kolayca keşfetmek için kullanışlıdır. Bakımsız gibi görünüyor.
  • relative-url-extractor (ruby): Bir dosya (HTML) verildiğinde, çirkin (minify) dosyalardan göreceli URL'leri bulmak için nifty düzenli ifadeleri kullanarak onlardan URL'leri çıkarır.
  • JSFScan (bash, birkaç araç): JS dosyalarından ilginç bilgileri bir araya getirir.
  • subjs (go): JS dosyalarını bulur.
  • page-fetch (go): Bir başsız tarayıcıda bir sayfayı yükler ve yüklenen tüm URL'leri yazdırır.
  • Feroxbuster (rust): Önceki araçların birkaç seçeneğini karıştıran içerik keşif aracı
  • Javascript Parsing: JS dosyalarında yol ve parametre bulmak için bir Burp eklentisi.
  • Sourcemapper: .js.map URL'si verildiğinde düzgünleştirilmiş JS kodunu alır.
  • xnLinkFinder: Belirli bir hedef için uç noktaları keşfetmek için kullanılan bir araç.
  • waymore: Wayback machine'den bağlantıları keşfedin (wayback'ten yanıtları indirerek ve daha fazla bağlantı arayarak)
  • HTTPLoot (go): Formları doldurarak tarama yapın ve özel regexler kullanarak hassas bilgileri bulun.
  • SpiderSuite: Spider Suite, siber güvenlik uzmanları için tasarlanmış gelişmiş çok özellikli bir GUI web güvenlik Crawler/Spider'dır.
  • jsluice (go): JavaScript kaynak kodundan URL'leri, yolları, sırları ve diğer ilginç verileri çıkarmak için Go paketi ve komut satırı aracı.
  • ParaForge: Parametreleri ve uç noktaları çıkarmak için isteğe dayalı bir kelime listesi oluşturmak için basit bir Burp Suite eklentisi.

Dizinler ve Dosyaları Brute Force Etme

Kök klasörden brute force işlemine başlayın ve bulunan tüm dizinleri bu yöntemle ve Spidering tarafından keşfedilen tüm dizinleri brute force edin (bu brute force işlemini özyinelemeli olarak yapabilir ve bulunan dizinlerin isimlerini kullanılan kelime listesinin başına ekleyebilirsiniz).
Araçlar:

Bruteforcing veya spidering sırasında yeni bir dizin keşfedildiğinde, Brute-Force yapılmalıdır.

Her bulunan dosyada ne kontrol edilmelidir

  • Bozuk bağlantı kontrolcüsü: Ele geçirilmeye eğilimli olabilecek HTML içindeki bozuk bağlantıları bulun
  • Dosya Yedekleri: Tüm dosyaları bulduktan sonra, tüm yürütülebilir dosyaların yedeklerini arayın (".php", ".aspx"...). Yedekleme için yaygın varyasyonlar şunlardır: 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**** aracını da kullanabilirsiniz.
  • Yeni parametreler keşfedin: Arjun, parameth, x8 ve Param Miner **gibi araçları kullanarak gizli parametreleri keşfedebilirsiniz. Mümkünse, her yürütülebilir web dosyasında gizli parametreleri aramayı deneyebilirsiniz.
  • Arjun tüm varsayılan kelime listeleri: 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
  • Yorumlar: Tüm dosyaların yorumlarını kontrol edin, kimlik bilgileri veya gizli işlevsellik bulabilirsiniz.
  • CTF oynuyorsanız, "ortak" bir hile, verileri tarayıcıyla kaynak kodunu açarsanız görmemeniz için yüzlerce boşluk kullanarak sayfanın sağında yorumlara bilgi gizlemektir. Diğer bir olasılık ise bir yorumda birkaç yeni satır kullanmak ve web sayfasının altında bilgiyi gizlemektir.
  • API anahtarları: Herhangi bir API anahtarı bulursanız, farklı platformların API anahtarlarını nasıl kullanacağınızı gösteren bir rehber vardır: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
  • Google API anahtarları: AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik gibi bir API anahtarı bulursanız, anahtarın hangi API'lere erişebileceğini kontrol etmek için gmapapiscanner projesini kullanabilirsiniz.
  • S3 Buckets: Spidering yaparken herhangi bir alt alan adı veya herhangi bir bağlantının bir S3 bucket ile ilişkili olup olmadığını kontrol edin. Bu durumda, bucket'ın izinlerini kontrol edin.

Özel bulgular

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

İlginç dosyalar

403 Forbidden/Basic Authentication/401 Unauthorized (geçme)

{% content-ref url="403-and-401-bypasses.md" %} 403-and-401-bypasses.md

Web Zafiyetlerinin Kontrol Edilmesi

Web uygulamasının kapsamlı bir numaralandırması yapıldığına göre, birçok olası zafiyetin kontrol edilme zamanı gelmiştir. Kontrol listesini burada bulabilirsiniz:

{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology/" %} web-vulnerabilities-methodology {% endcontent-ref %}

Web zafiyetleri hakkında daha fazla bilgi için aşağıdaki kaynaklara bakabilirsiniz:

Sayfaların Değişikliklerini İzleme

https://github.com/dgtlmoon/changedetection.io gibi araçları kullanarak, sayfalarda olası zafiyetler ekleyebilecek değişiklikleri izleyebilirsiniz.

HackTricks Otomatik Komutları

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}


Bug ödülü ipucu: Intigriti'ye kaydolun, hackerlar tarafından oluşturulan bir premium bug ödül platformu! Bugün https://go.intigriti.com/hacktricks adresine katılın ve 100.000 $'a kadar ödüller kazanmaya başlayın!

{% embed url="https://go.intigriti.com/hacktricks" %}

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!

HackTricks'ı desteklemenin diğer yolları: