80,443 - Pentesting Web Methodology

HackTricks'i Destekleyin

Hacking kariyeri ile ilgileniyorsanız ve hacklenemez olanı hack etmek istiyorsanız - işe alıyoruz! (akıcı Lehçe yazılı ve sözlü gereklidir).

Temel Bilgiler

Web servisi en yaygın ve kapsamlı hizmettir ve birçok farklı türde zafiyet bulunmaktadır.

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

Metodoloji özeti

Bu metodolojide, bir alan adını (veya alt alan adını) hedef alacağınızı varsayıyoruz ve sadece bunu. Bu nedenle, bu metodolojiyi keşfedilen her alan adı, alt alan adı veya belirsiz web sunucusu içeren IP'ye uygulamalısınız.

Sunucu Sürümü (Zayıf mı?)

Belirleme

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

Search for web uygulamasının zayıflıkları versiyonu

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

Web teknoloji hileleri

Farklı iyi bilinen teknolojilerde zayıflıkları bulmak için bazı hileler:

Dikkate al ki aynı alan farklı portlar, klasörler ve alt alanlar içinde farklı teknolojiler kullanıyor olabilir. Eğer web uygulaması daha önce listelenen herhangi bir iyi bilinen teknoloji/platform veya başka bir şey kullanıyorsa, İnternette yeni hileler aramayı unutma (ve bana haber ver!).

Kaynak Kodu İncelemesi

Eğer uygulamanın kaynak kodu github'da mevcutsa, uygulamanın kendi başına bir Beyaz kutu testi yapmanın yanı sıra, mevcut Siyah Kutu testi için bazı bilgiler yararlı olabilir:

  • Değişiklik günlüğü veya Readme veya Versiyon dosyası veya web üzerinden erişilebilen versiyon bilgisi içeren bir şey var mı?

  • Kimlik bilgileri nasıl ve nerede saklanıyor? Kimlik bilgileri (kullanıcı adları veya şifreler) ile ilgili herhangi bir (erişilebilir?) dosya var mı?

  • Şifreler düz metin, şifrelenmiş mi yoksa hangi hash algoritması kullanılıyor?

  • Bir şeyi şifrelemek için herhangi bir anahtar kullanıyor mu? Hangi algoritma kullanılıyor?

  • Herhangi bir zayıflığı sömürerek bu dosyalara erişebilir misin?

  • Github'da (çözülen ve çözülmeyen) sorularda herhangi bir ilginç bilgi var mı? Veya commit geçmişinde (belki eski bir commit içinde bazı şifreler tanıtılmıştır)?

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 tarayıcıları

Eğer bir CMS kullanılıyorsa bir tarayıcı ç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

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 sahip olmalısınız (eğer herhangi bir veri verilmişse) ve test sırasında aklınızda bulundurmanız gereken bazı ipuçları. Şanslıysanız, bir CMS bulmuş ve bazı tarayıcılar çalıştırmış olabilirsiniz.

Adım adım Web Uygulaması 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ı zorlamak

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

  • /whatever_fake.php gibi sahte sayfalara erişin (.aspx, .html, vb.)

  • Hata oluşturmak için cookie değerlerine ve parametre değerlerine "[]", "]]" ve "[[" ekleyin

  • URL'nin sonuna /~randomthing/%s girerek hata oluşturun

  • PATCH, DEBUG veya FAKE gibi farklı HTTP Fiilleri deneyin

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

Eğer WebDav etkinse ancak kök klasörde dosya yüklemek için yeterli izinleriniz yoksa şunları deneyin:

  • Kaba kuvvet ile kimlik bilgilerini denemek

  • WebDav aracılığıyla web sayfasındaki bulunan diğer klasörlere dosya yüklemek. Diğer klasörlerde dosya yüklemek için izinleriniz olabilir.

SSL/TLS açıklıkları

  • Uygulama, herhangi bir yerde HTTPS kullanıcısını zorlamıyorsa, o zaman MitM'ye karşı savunmasızdır

  • Uygulama, hassas verileri (şifreler) HTTP kullanarak gönderiyorsa. O zaman bu yüksek bir açıklıktır.

Açıkları kontrol etmek için testssl.sh kullanın (Bug Bounty programlarında muhtemelen bu tür açıklıklar kabul edilmeyecektir) ve açıklıkları 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>

Bilgi SSL/TLS zafiyetleri hakkında:

Spidering

Web üzerinde bir tür spider başlatın. Spider'ın amacı, test edilen uygulamadan mümkün olduğunca fazla yol bulmaktır. Bu nedenle, web taraması ve harici kaynaklar kullanılarak mümkün olduğunca fazla 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 LinkFinder 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ğildir ama faydalı olabilir. Sadece bir dosya ile hostları ve bir dosya ile yolları belirtebilir ve meg her hosttaki her yolu alır ve yanıtı kaydeder.

  • urlgrab (go): JS renderleme yeteneklerine sahip HTML spider. Ancak, bakımsız görünüyor, önceden derlenmiş versiyonu 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 bulacak ve listeleyecektir.

  • galer (go): JS renderleme yeteneklerine sahip HTML spider.

  • LinkFinder (python): HTML spider, JS dosyalarında yeni yollar arayabilen JS beautify yetenekleri ile. JSScanner adlı LinkFinder'ın bir sarmalayıcısına da göz atmak faydalı olabilir.

  • 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, infosec ninja'ları için faydalı.

  • JSParser (python2.7): JavaScript dosyalarından göreli URL'leri ayrıştırmak için Tornado ve JSBeautifier kullanan bir python 2.7 scripti. AJAX isteklerini kolayca keşfetmek için faydalı. Bakımsız görünüyor.

  • relative-url-extractor (ruby): Verilen bir dosyadan (HTML) URL'leri çıkaracak ve çirkin (minify) dosyalardan göreli URL'leri bulmak ve çıkarmak için şık bir düzenli ifade kullanacaktır.

  • JSFScan (bash, çeşitli araçlar): JS dosyalarından ilginç bilgiler toplamak için çeşitli araçlar kullanır.

  • subjs (go): JS dosyalarını bulur.

  • page-fetch (go): Başsız bir tarayıcıda bir sayfayı yükler ve sayfayı yüklemek için yüklenen tüm URL'leri yazdırır.

  • Feroxbuster (rust): Önceki araçların çeşitli seçeneklerini birleştiren içerik keşif aracı.

  • Javascript Parsing: JS dosyalarında yol ve parametre bulmak için bir Burp uzantısı.

  • Sourcemapper: Verilen .js.map URL'si ile size güzelleştirilmiş JS kodunu alacak bir araç.

  • xnLinkFinder: Belirli bir hedef için uç noktaları keşfetmek için kullanılan bir araç.

  • waymore: Wayback makinesinden bağlantıları keşfedin (aynı zamanda yanıtları indirin ve daha fazla bağlantı arayın).

  • HTTPLoot (go): Form doldurarak bile tarama yapın ve belirli regex'ler kullanarak hassas bilgileri bulun.

  • SpiderSuite: Spider Suite, siber güvenlik profesyonelleri için tasarlanmış gelişmiş çok özellikli GUI web güvenlik Tarayıcısı/Spider'dır.

  • jsluice (go): URL'leri, yolları, sırları ve JavaScript kaynak kodundan diğer ilginç verileri çıkarmak için bir Go paketi ve komut satırı aracı.

  • ParaForge: Fuzzing ve enumerasyon için özel kelime listesi oluşturmak için istekten parametreleri ve uç noktaları çıkarmak için basit bir Burp Suite uzantısı.

  • katana (go): Bunun için harika bir araç.

  • Crawley (go): Bulabildiği her bağlantıyı yazdırır.

Brute Force dizinleri ve dosyaları

Kök klasörden brute-forcing'e başlayın ve bu yöntemle bulunan tüm dizinleri ve Spidering ile keşfedilen dizinleri brute-force yapmayı unutmayın (bu brute-forcing'i özyinelemeli olarak yapabilir ve kullanılan kelime listesinin başına bulunan dizinlerin adlarını ekleyebilirsiniz). Araçlar:

  • Dirb / Dirbuster - Kali'de dahil, eski (ve yavaş) ama işlevsel. Otomatik imzalı sertifikalara ve özyinelemeli aramaya izin verir. Diğer seçeneklerle karşılaştırıldığında çok yavaş.

  • Dirsearch (python): Otomatik imzalı sertifikalara izin vermez ama özyinelemeli aramaya izin verir.

  • Gobuster (go): Otomatik imzalı sertifikalara izin verir, özyinelemeli arama yoktur.

  • Feroxbuster - Hızlı, özyinelemeli 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ğildir ama bulunan URL'lerin listesini vererek "tekrarlanan" URL'leri siler.

  • Scavenger: Farklı sayfaların burp geçmişinden dizinler oluşturmak için Burp Uzantısı.

  • TrashCompactor: Tekrarlanan işlevselliğe sahip URL'leri kaldırır (js importlarına dayalı).

  • Chamaleon: Kullanılan teknolojileri tespit etmek için wapalyzer kullanır ve kullanılacak kelime listelerini seçer.

Tavsiye edilen sözlükler:

Bruteforcing veya spidering sırasında yeni bir dizin keşfedildiğinde, bu dizin de Brute-Forced edilmelidir.

Bulunan her dosyada kontrol edilecekler

  • Broken link checker: Ele geçirilme riski taşıyan HTML'ler 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 adlandırma 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** aracını kullanabilirsiniz.**

  • Yeni parametreler keşfedin: Gizli parametreleri keşfetmek için Arjun, parameth, x8 ve Param Miner gibi araçları kullanabilirsiniz. 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

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

  • Yorumlar: Tüm dosyaların yorumlarını kontrol edin, kimlik bilgileri veya gizli işlevsellik bulabilirsiniz.

  • Eğer CTF oynuyorsanız, "yaygın" bir hile, bilgiyi sayfanın sağında (tarayıcı ile kaynak kodunu açtığınızda veriyi göremeyecek şekilde yüzlerce boşluk kullanarak) gizlemektir. Diğer bir olasılık, birkaç yeni satır kullanmak ve bilgiyi web sayfasının altında bir yorumda gizlemektir.

  • API anahtarları: Eğer herhangi bir API anahtarı bulursanız, farklı platformların API anahtarlarını nasıl kullanacağınızı gösteren bir kılavuz vardır: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird

  • Google API anahtarları: Eğer AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik gibi görünen bir API anahtarı bulursanız, anahtarın erişebileceği API'leri kontrol etmek için gmapapiscanner projesini kullanabilirsiniz.

  • S3 Buckets: Spidering yaparken herhangi bir alt alan adı veya herhangi bir bağlantının bazı 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 Yasaklı/Temel Kimlik Doğrulama/401 Yetkisiz (bypass)

502 Proxy Hatası

Eğer herhangi bir sayfa bu kodla yanıt veriyorsa, muhtemelen kötü yapılandırılmış bir proxy vardır. GET https://google.com HTTP/1.1 gibi bir HTTP isteği gönderirseniz (host başlığı ve diğer yaygın başlıklarla), proxy google.com erişmeye çalışacak ve bir SSRF bulmuş olacaksınız.

NTLM Kimlik Doğrulama - Bilgi ifşası

Eğer kimlik doğrulama isteyen sunucu Windows ise veya bir girişte kimlik bilgilerinizi (ve alan adı adını istemesi) bulursanız, bir bilgi ifşası provake edebilirsiniz. Başlığı gönderin: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” ve NTLM kimlik doğrulamanın nasıl çalıştığı nedeniyle, sunucu "WWW-Authenticate" başlığında iç bilgi (IIS versiyonu, Windows versiyonu...) ile yanıt verecektir. Bunu nmap eklentisi "http-ntlm-info.nse" kullanarak otomatikleştirebilirsiniz.

HTTP Yönlendirme (CTF)

Bir Yönlendirme içinde içerik yerleştirmek mümkündür. Bu içerik kullanıcıya gösterilmeyecek (çünkü tarayıcı yönlendirmeyi gerçekleştirecektir) ama burada gizli bir şey olabilir.

Web Zafiyetleri Kontrolü

Artık web uygulamasının kapsamlı bir envanteri yapıldığına göre, birçok olası zafiyeti kontrol etme zamanı. Kontrol listesini burada bulabilirsiniz:

Web zafiyetleri hakkında daha fazla bilgi için:

Sayfaları değişiklikler için izleme

Vulnerabiliteleri ekleyebilecek değişiklikler için sayfaları izlemek üzere https://github.com/dgtlmoon/changedetection.io gibi araçları kullanabilirsiniz.

Hacking kariyerine ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı Lehçe yazılı ve sözlü gereklidir).

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}
HackTricks'i Destekleyin

Last updated