28 KiB

80,443 - Pentesting Web Methodology

{{#include ../../banners/hacktricks-training.md}}

Basic Info

Huduma ya wavuti ni huduma ya kawaida na pana zaidi na aina nyingi za vulnerabilities tofauti zipo.

Port ya default: 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

Mwongozo wa Web API

{{#ref}} web-api-pentesting.md {{#endref}}

Muhtasari wa Mbinu

Katika mbinu hii tunaenda kudhani kwamba unataka kushambulia kikoa (au subdomain) na tu hicho. Hivyo, unapaswa kutumia mbinu hii kwa kila kikoa, subdomain au IP iliyogunduliwa yenye seva ya wavuti isiyojulikana ndani ya upeo.

  • Anza kwa kutambua teknolojia zinazotumiwa na seva ya wavuti. Tafuta hila za kukumbuka wakati wa mtihani mzima ikiwa utaweza kutambua teknolojia hiyo kwa mafanikio.
  • Je, kuna udhaifu wowote wa toleo la teknolojia hiyo?
  • Unatumia teknolojia maarufu yoyote? Je, kuna hila yoyote ya manufaa ya kupata taarifa zaidi?
  • Je, kuna scanner maalum ya kukimbia (kama wpscan)?
  • Anzisha scanner za matumizi ya jumla. Hujui kama wataweza kupata kitu au kama wataweza kupata taarifa za kuvutia.
  • Anza na ukaguzi wa awali: robots, sitemap, 404 kosa na SSL/TLS skani (ikiwa HTTPS).
  • Anza kupeleleza ukurasa wa wavuti: Ni wakati wa kupata faili, folda na parameta zote zinazotumika. Pia, angalia kwa matokeo maalum.
  • Kumbuka kwamba kila wakati directory mpya inagunduliwa wakati wa brute-forcing au kupeleleza, inapaswa kupelelezwa.
  • Brute-Forcing ya Directory: Jaribu kujaribu nguvu zote za folda zilizogunduliwa kutafuta faili na directories mpya.
  • Kumbuka kwamba kila wakati directory mpya inagunduliwa wakati wa brute-forcing au kupeleleza, inapaswa kujaribiwa kwa nguvu.
  • Ukaguzi wa Nakala: Jaribu kuona kama unaweza kupata nakala za faili zilizogunduliwa ukiongeza nyongeza za kawaida za nakala.
  • Parameta za Brute-Force: Jaribu kupata parameta zilizofichwa.
  • Mara tu unapokuwa umeshatambua endpoints zote zinazokubali ingizo la mtumiaji, angalia aina zote za udhaifu zinazohusiana na hiyo.
  • Fuata orodha hii ya ukaguzi

Toleo la Seva (Lina Udhihirisho?)

Tambua

Angalia kama kuna udhaifu unaojulikana kwa toleo la seva linalotumika.
Vichwa vya HTTP na vidakuzi vya jibu vinaweza kuwa vya manufaa sana katika kutambua teknolojia na/au toleo linalotumika. Nmap skani inaweza kutambua toleo la seva, lakini pia inaweza kuwa na manufaa kutumia zana whatweb, webtech au 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

Web tech tricks

Baadhi ya tricks za finding vulnerabilities katika technologies maarufu zinazotumika:

Kumbuka kwamba domain hiyo hiyo inaweza kuwa inatumia technologies tofauti katika ports, folders na subdomains.
Ikiwa programu ya wavuti inatumia tech/platform maarufu zilizoorodheshwa hapo juu au zingine yoyote, usisahau kutafuta mtandaoni tricks mpya (na unijulishe!).

Source Code Review

Ikiwa source code ya programu inapatikana katika github, mbali na kufanya White box test ya programu mwenyewe kuna maelezo ambayo yanaweza kuwa muhimu kwa Black-Box testing ya sasa:

  • Je, kuna Change-log au Readme au Version file au chochote chenye version info accessible kupitia wavuti?
  • Je, credentials zimehifadhiwaje na wapi? Je, kuna file (inayopatikana?) yenye credentials (majina ya watumiaji au nywila)?
  • Je, passwords ziko katika plain text, encrypted au ni hashing algorithm gani inatumika?
  • Je, inatumia master key yoyote kwa ajili ya kuandika kitu? Ni algorithm gani inatumika?
  • Je, unaweza kufikia yoyote ya hizi files kwa kutumia udhaifu wowote?
  • Je, kuna maelezo ya kuvutia katika github (masuala yaliyotatuliwa na yasiyotatuliwa) issues? Au katika commit history (labda password iliyoingizwa ndani ya commit ya zamani)?

{{#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 scanners

Ikiwa CMS inatumika usisahau kufanya skana, labda kitu cha kuvutia kitatokea:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin tovuti za masuala ya Usalama. (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal au (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

Katika hatua hii unapaswa kuwa na taarifa fulani kuhusu seva ya wavuti inayotumiwa na mteja (ikiwa kuna data yoyote iliyotolewa) na mbinu fulani za kukumbuka wakati wa mtihani. Ikiwa una bahati umepata hata CMS na ukafanya skana.

Hatua kwa hatua Ugunduzi wa Programu za Wavuti

Kutoka hapa tutaanza kuingiliana na programu ya wavuti.

Ukaguzi wa Awali

Kurasa za Kawaida zenye taarifa za kuvutia:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • Angalia pia maoni katika kurasa kuu na za sekondari.

Kusababisha makosa

Seva za wavuti zinaweza kufanya kazi kwa njia isiyo ya kawaida wakati data za ajabu zinatumwa kwao. Hii inaweza kufungua vulnerabilities au kufichua taarifa nyeti.

  • Fikia kurasa za uwongo kama /whatever_fake.php (.aspx,.html,.n.k)
  • Ongeza "[]", "]]", na "[[" katika maadili ya cookie na maadili ya parameter ili kuunda makosa
  • Tengeneza kosa kwa kutoa ingizo kama /~randomthing/%s kwenye mwisho wa URL
  • Jaribu HTTP Verbs tofauti kama PATCH, DEBUG au makosa kama FAKE

Angalia kama unaweza kupakia faili (PUT verb, WebDav)

Ikiwa unapata kuwa WebDav ime wezeshwa lakini huna ruhusa za kutosha za kupakia faili kwenye folda ya mizizi jaribu:

  • Brute Force akreditif
  • Pakia faili kupitia WebDav kwenye sehemu za folda zilizopatikana ndani ya ukurasa wa wavuti. Unaweza kuwa na ruhusa za kupakia faili katika folda nyingine.

Vulnerabilities za SSL/TLS

  • Ikiwa programu haiwalazimishi watumiaji kutumia HTTPS katika sehemu yoyote, basi ni vulnerable to MitM
  • Ikiwa programu inatumia kutuma data nyeti (nywila) kwa kutumia HTTP. Basi ni vulnerability kubwa.

Tumia testssl.sh kuangalia vulnerabilities (Katika programu za Bug Bounty labda aina hizi za vulnerabilities hazitakubaliwa) na tumia a2sv kuangalia tena vulnerabilities:

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

Habari kuhusu SSL/TLS udhaifu:

Spidering

Zindua aina fulani ya spider ndani ya wavuti. Lengo la spider ni kupata njia nyingi kadri iwezekanavyo kutoka kwa programu iliyojaribiwa. Hivyo, kuvinjari wavuti na vyanzo vya nje vinapaswa kutumika ili kupata njia halali nyingi kadri iwezekanavyo.

  • gospider (go): HTML spider, LinkFinder katika faili za JS na vyanzo vya nje (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
  • hakrawler (go): HML spider, na LinkFider kwa faili za JS na Archive.org kama chanzo cha nje.
  • dirhunt (python): HTML spider, pia inaonyesha "faili za juisi".
  • evine (go): Interactive CLI HTML spider. Pia inatafuta katika Archive.org
  • meg (go): Chombo hiki si spider lakini kinaweza kuwa na manufaa. Unaweza tu kuashiria faili yenye mwenyeji na faili yenye njia na meg itachukua kila njia kwenye kila mwenyeji na kuhifadhi jibu.
  • urlgrab (go): HTML spider yenye uwezo wa kuunda JS. Hata hivyo, inaonekana haijatunzwa, toleo lililotengenezwa awali ni la zamani na msimbo wa sasa haujajitengeneza.
  • gau (go): HTML spider inayotumia watoa huduma wa nje (wayback, otx, commoncrawl)
  • ParamSpider: Hii ni script itakayopata URLs zenye parameter na kuziorodhesha.
  • galer (go): HTML spider yenye uwezo wa kuunda JS.
  • LinkFinder (python): HTML spider, yenye uwezo wa kuboresha JS inayoweza kutafuta njia mpya katika faili za JS. Inaweza kuwa na manufaa pia kuangalia JSScanner, ambayo ni wrapper ya LinkFinder.
  • goLinkFinder (go): Kutolewa kwa mwisho katika chanzo cha HTML na faili za javascript zilizojumuishwa. Inafaida kwa wawindaji wa makosa, timu nyekundu, na infosec ninjas.
  • JSParser (python2.7): Script ya python 2.7 inayotumia Tornado na JSBeautifier kuchambua URLs zinazohusiana kutoka kwa faili za JavaScript. Inafaida kwa kugundua maombi ya AJAX kwa urahisi. Inaonekana haijatunzwa.
  • relative-url-extractor (ruby): Iwapo kuna faili (HTML) itatoa URLs kutoka kwake kwa kutumia kanuni nzuri za kawaida ili kupata na kutoa URLs zinazohusiana kutoka kwa faili mbaya (minify).
  • JSFScan (bash, zana kadhaa): Kusanya habari za kuvutia kutoka kwa faili za JS kwa kutumia zana kadhaa.
  • subjs (go): Pata faili za JS.
  • page-fetch (go): Pata ukurasa katika kivinjari kisichokuwa na kichwa na uchapishe URLs zote zilizopakiwa ili kupakia ukurasa.
  • Feroxbuster (rust): Chombo cha kugundua maudhui kinachochanganya chaguzi kadhaa za zana zilizotangulia.
  • Javascript Parsing: Kiendelezi cha Burp kutafuta njia na params katika faili za JS.
  • Sourcemapper: Chombo ambacho kwa URL ya .js.map kitakuletea msimbo wa JS ulioimarishwa.
  • xnLinkFinder: Hii ni chombo kinachotumika kugundua mwisho kwa lengo fulani.
  • waymore: Gundua viungo kutoka kwa mashine ya wayback (pia kupakua majibu katika wayback na kutafuta viungo zaidi).
  • HTTPLoot (go): Vinjari (hata kwa kujaza fomu) na pia pata habari nyeti kwa kutumia regex maalum.
  • SpiderSuite: Spider Suite ni GUI ya hali ya juu ya usalama wa wavuti iliyoundwa kwa wataalamu wa usalama wa mtandao.
  • jsluice (go): Ni pakiti ya Go na chombo cha amri kwa kutolewa kwa URLs, njia, siri, na data nyingine za kuvutia kutoka kwa msimbo wa chanzo wa JavaScript.
  • ParaForge: ParaForge ni kiendelezi rahisi cha Burp Suite kutolewa paramters na mwisho kutoka kwa ombi ili kuunda orodha ya maneno ya kawaida kwa fuzzing na orodha.
  • katana (go): Chombo kizuri kwa hili.
  • Crawley (go): Chapisha kila kiungo kinachoweza kupatikana.

Brute Force directories and files

Anza brute-forcing kutoka kwenye folda ya mzizi na uhakikishe unafanya brute-force zote za directories zilizopatikana kwa kutumia hii mbinu na zote za directories zilizogunduliwa na Spidering (unaweza kufanya brute-forcing hii kikamilifu na kuongeza mwanzoni mwa orodha ya maneno iliyotumika majina ya directories zilizopatikana).
Zana:

  • Dirb / Dirbuster - Imejumuishwa katika Kali, ya zamani (na polepole) lakini inafanya kazi. Inaruhusu vyeti vilivyojitiisha na utafutaji wa kurudiwa. Polepole sana ikilinganishwa na chaguzi nyingine.
  • Dirsearch (python): Haina ruhusa ya vyeti vilivyojitiisha lakini inaruhusu utafutaji wa kurudiwa.
  • Gobuster (go): Inaruhusu vyeti vilivyojitiisha, haina utaftaji wa kurudiwa.
  • Feroxbuster - Haraka, inasaidia utafutaji wa kurudiwa.
  • wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
  • ffuf - Haraka: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
  • uro (python): Hii si spider lakini ni chombo ambacho kwa orodha ya URLs zilizopatikana itafuta "URLs zilizojirudia".
  • Scavenger: Kiendelezi cha Burp kuunda orodha ya directories kutoka kwa historia ya burp ya kurasa tofauti.
  • TrashCompactor: Ondoa URLs zenye kazi zilizojirudia (kulingana na uagizaji wa js).
  • Chamaleon: Inatumia wapalyzer kugundua teknolojia zinazotumika na kuchagua orodha za maneno za kutumia.

Orodha za maneno zinazopendekezwa:

Kumbuka kwamba kila wakati directory mpya inapatikana wakati wa brute-forcing au spidering, inapaswa kufanywa Brute-Forced.

Nini cha kuangalia kwenye kila faili lililopatikana

  • Broken link checker: Pata viungo vilivyovunjika ndani ya HTMLs ambavyo vinaweza kuwa na uwezekano wa kuchukuliwa.
  • File Backups: Mara tu unapokuwa umepata faili zote, angalia nakala za faili zote zinazoweza kutekelezwa (".php", ".aspx"...). Mabadiliko ya kawaida ya kutaja nakala ni: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp na file.old. Unaweza pia kutumia chombo bfac au backup-gen.
  • Gundua vigezo vipya: Unaweza kutumia zana kama Arjun, parameth, x8 na Param Miner kugundua vigezo vilivyofichwa. Ikiwa unaweza, unaweza kujaribu kutafuta vigezo vilivyofichwa kwenye kila faili la wavuti linaloweza kutekelezwa.
  • Arjun orodha zote za maneno za kawaida: 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
  • Maoni: Angalia maoni ya faili zote, unaweza kupata credentials au ufunctionality iliyofichwa.
  • Ikiwa unacheza CTF, hila "ya kawaida" ni kuficha habari ndani ya maoni upande wa kulia wa ukurasa (ukitumia mifumo miyingi ili usione data ikiwa unafungua msimbo wa chanzo na kivinjari). Uwezekano mwingine ni kutumia michoro kadhaa mipya na kuficha habari katika maoni kwenye chini ya ukurasa wa wavuti.
  • API keys: Ikiwa unapata API key yoyote kuna mwongozo unaoelekeza jinsi ya kutumia API keys za majukwaa tofauti: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
  • Google API keys: Ikiwa unapata API key yoyote inayoonekana kama AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik unaweza kutumia mradi gmapapiscanner kuangalia ni APIs zipi ambazo key inaweza kufikia.
  • S3 Buckets: Wakati wa spidering angalia ikiwa subdomain yoyote au kiungo chochote kinahusiana na S3 bucket fulani. Katika kesi hiyo, angalia idhini ya bucket.

Matokeo Maalum

Wakati wa kufanya spidering na brute-forcing unaweza kupata mambo ya kuvutia ambayo unapaswa kuangazia.

Faili za Kuvutia

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

{{#ref}} 403-and-401-bypasses.md {{#endref}}

502 Proxy Error

Ikiwa ukurasa wowote unajibu na nambari hiyo, labda ni proxy iliyo na usanidi mbaya. Ikiwa unatumia ombi la HTTP kama: GET https://google.com HTTP/1.1 (pamoja na kichwa cha mwenyeji na vichwa vingine vya kawaida), proxy itajaribu kufikia google.com na utakuwa umepata SSRF.

NTLM Authentication - Ufichuzi wa habari

Ikiwa seva inayotumika inahitaji uthibitisho ni Windows au unapata kuingia inayoomba credentials zako (na kuomba jina la domain), unaweza kusababisha ufichuzi wa habari.
Tuma kichwa: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” na kutokana na jinsi uthibitisho wa NTLM unavyofanya kazi, seva itajibu kwa habari za ndani (toleo la IIS, toleo la Windows...) ndani ya kichwa "WWW-Authenticate".
Unaweza kujiandaa hii kwa kutumia nmap plugin "http-ntlm-info.nse".

HTTP Redirect (CTF)

Inawezekana kweka maudhui ndani ya Redirection. Maudhui haya hayataonyeshwa kwa mtumiaji (kama kivinjari kitatekeleza redirection) lakini kitu kinaweza kuwa kimefichwa humo.

Kuangalia Udhaifu wa Wavuti

Sasa kwamba orodha kamili ya programu ya wavuti imefanywa ni wakati wa kuangalia udhaifu wengi wa uwezekano. Unaweza kupata orodha ya ukaguzi hapa:

{{#ref}} ../../pentesting-web/web-vulnerabilities-methodology.md {{#endref}}

Pata maelezo zaidi kuhusu udhaifu wa wavuti katika:

Fuata Kurasa kwa Mabadiliko

Unaweza kutumia zana kama https://github.com/dgtlmoon/changedetection.io kufuatilia kurasa kwa mabadiliko ambayo yanaweza kuingiza udhaifu.

HackTricks Amri za Moja kwa Moja

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