..

80,443 - Pentesting Web Methodology

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

Basic Info

वेब सेवा सबसे सामान्य और व्यापक सेवा है और कई विभिन्न प्रकार की कमजोरियाँ मौजूद हैं।

डिफ़ॉल्ट पोर्ट: 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

वेब एपीआई मार्गदर्शन

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

कार्यप्रणाली सारांश

इस कार्यप्रणाली में हम मानेंगे कि आप एक डोमेन (या उपडोमेन) पर हमला करने जा रहे हैं और केवल उसी पर। इसलिए, आपको इस कार्यप्रणाली को प्रत्येक खोजे गए डोमेन, उपडोमेन या IP पर लागू करना चाहिए जिसमें अनिश्चित वेब सर्वर हो।

  • तकनीकों की पहचान करने से शुरू करें जो वेब सर्वर द्वारा उपयोग की जा रही हैं। यदि आप तकनीक की सफलतापूर्वक पहचान कर सकते हैं तो परीक्षण के बाकी हिस्से के दौरान ध्यान में रखने के लिए कौशल देखें।
  • क्या तकनीक के संस्करण की कोई ज्ञात भेद्यता है?
  • क्या कोई प्रसिद्ध तकनीक का उपयोग कर रहे हैं? अधिक जानकारी निकालने के लिए कोई उपयोगी कौशल?
  • क्या चलाने के लिए कोई विशेषीकृत स्कैनर है (जैसे wpscan)?
  • सामान्य प्रयोजन स्कैनर लॉन्च करें। आप कभी नहीं जानते कि वे कुछ खोजने जा रहे हैं या कुछ दिलचस्प जानकारी खोजने जा रहे हैं।
  • प्रारंभिक जांच से शुरू करें: रोबोट, साइटमैप, 404 त्रुटि और SSL/TLS स्कैन (यदि HTTPS)।
  • वेब पृष्ठ को स्पाइडरिंग करना शुरू करें: यह सभी संभावित फाइलों, फ़ोल्डरों और पैरामीटरों को खोजने का समय है। साथ ही, विशेष खोजों के लिए जांचें।
  • ध्यान दें कि जब भी ब्रूट-फोर्सिंग या स्पाइडरिंग के दौरान एक नया निर्देशिका खोजा जाता है, तो इसे स्पाइडर किया जाना चाहिए।
  • डायरेक्टरी ब्रूट-फोर्सिंग: सभी खोजे गए फ़ोल्डरों को ब्रूट फोर्स करने का प्रयास करें नए फाइलों और निर्देशिकाओं की खोज करें।
  • ध्यान दें कि जब भी ब्रूट-फोर्सिंग या स्पाइडरिंग के दौरान एक नया निर्देशिका खोजा जाता है, तो इसे ब्रूट-फोर्स किया जाना चाहिए।
  • बैकअप जांच: सामान्य बैकअप एक्सटेंशन जोड़कर खोजे गए फाइलों के बैकअप खोजने का प्रयास करें।
  • ब्रूट-फोर्स पैरामीटर: छिपे हुए पैरामीटर खोजने का प्रयास करें।
  • एक बार जब आप सभी संभावित एंडपॉइंट्स की पहचान कर लेते हैं जो उपयोगकर्ता इनपुट स्वीकार करते हैं, तो इसके साथ संबंधित सभी प्रकार की भेद्यताओं की जांच करें।
  • इस चेकलिस्ट का पालन करें

सर्वर संस्करण (भेद्य?)

पहचानें

जांचें कि क्या चल रहे सर्वर संस्करण के लिए कोई ज्ञात भेद्यताएँ हैं।
HTTP हेडर और प्रतिक्रिया के कुकीज़ तकनीकों और/या उपयोग किए जा रहे संस्करण की पहचान करने के लिए बहुत उपयोगी हो सकते हैं। Nmap स्कैन सर्वर संस्करण की पहचान कर सकता है, लेकिन यह उपकरण भी उपयोगी हो सकते हैं whatweb, webtech या 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

कुछ tricks विभिन्न प्रसिद्ध technologies में vulnerabilities खोजने के लिए:

ध्यान में रखें कि same domain विभिन्न ports, folders और subdomains में different technologies का उपयोग कर सकता है.
यदि वेब एप्लिकेशन किसी प्रसिद्ध tech/platform listed before या कोई अन्य का उपयोग कर रहा है, तो Internet पर नए tricks खोजने के लिए मत भूलें (और मुझे बताएं!)।

Source Code Review

यदि एप्लिकेशन का source code github में उपलब्ध है, तो एप्लिकेशन का White box test करने के अलावा, वर्तमान Black-Box testing के लिए कुछ जानकारी जो useful हो सकती है:

  • क्या कोई Change-log या Readme या Version फ़ाइल है या कुछ भी जिसमें version info accessible वेब के माध्यम से है?
  • Credentials कैसे और कहाँ सहेजे जाते हैं? क्या कोई (accessible?) file है जिसमें credentials (usernames या passwords) हैं?
  • क्या passwords plain text, encrypted हैं या कौन सा hashing algorithm उपयोग किया गया है?
  • क्या यह कुछ एन्क्रिप्ट करने के लिए कोई master key का उपयोग कर रहा है? कौन सा algorithm उपयोग किया गया है?
  • क्या आप किसी vulnerability का फायदा उठाकर इन फ़ाइलों में से किसी तक पहुँच सकते हैं?
  • क्या github में कोई interesting information है (solved और not solved) issues में? या commit history में (शायद कुछ password जो एक पुराने commit में डाला गया)?

{{#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 स्कैनर

यदि CMS का उपयोग किया गया है तो स्कैनर चलाना न भूलें, शायद कुछ रोचक पाया जाए:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin वेबसाइटों के लिए सुरक्षा मुद्दे। (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal या (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

इस बिंदु पर आपके पास क्लाइंट द्वारा उपयोग किए जा रहे वेब सर्वर की कुछ जानकारी होनी चाहिए (यदि कोई डेटा दिया गया है) और परीक्षण के दौरान ध्यान में रखने के लिए कुछ तरकीबें होनी चाहिए। यदि आप भाग्यशाली हैं, तो आपने एक CMS भी पाया है और कुछ स्कैनर चलाए हैं।

चरण-दर-चरण वेब एप्लिकेशन खोज

इस बिंदु से हम वेब एप्लिकेशन के साथ इंटरैक्ट करना शुरू करने जा रहे हैं।

प्रारंभिक जांच

दिलचस्प जानकारी के साथ डिफ़ॉल्ट पृष्ठ:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • मुख्य और द्वितीयक पृष्ठों में टिप्पणियों की भी जांच करें।

त्रुटियों को मजबूर करना

वेब सर्वर अजीब डेटा भेजे जाने पर अप्रत्याशित रूप से व्यवहार कर सकते हैं। इससे कमजोरियों या संवेदनशील जानकारी का खुलासा हो सकता है।

  • नकली पृष्ठों तक पहुँचें जैसे /whatever_fake.php (.aspx,.html,.etc)
  • त्रुटियाँ उत्पन्न करने के लिए "[]", "]]", और "[[" को कुकी मान और पैरामीटर मानों में जोड़ें
  • URL के अंत में /~randomthing/%s के रूप में इनपुट देकर त्रुटि उत्पन्न करें
  • PATCH, DEBUG या गलत जैसे FAKE जैसे विभिन्न HTTP क्रियाएँ आज़माएँ

जांचें कि क्या आप फ़ाइलें अपलोड कर सकते हैं (PUT क्रिया, WebDav)

यदि आप पाते हैं कि WebDav सक्षम है लेकिन आपके पास रूट फ़ोल्डर में फ़ाइलें अपलोड करने के लिए पर्याप्त अनुमतियाँ नहीं हैं, तो प्रयास करें:

  • ब्रूट फोर्स क्रेडेंशियल्स
  • वेब पृष्ठ के अंदर पाई गई फ़ोल्डरों के बाकी में WebDav के माध्यम से फ़ाइलें अपलोड करें। आपको अन्य फ़ोल्डरों में फ़ाइलें अपलोड करने की अनुमति हो सकती है।

SSL/TLS कमजोरियाँ

  • यदि एप्लिकेशन HTTPS के उपयोगकर्ता को मजबूर नहीं कर रहा है तो यह MitM के लिए कमजोर है
  • यदि एप्लिकेशन HTTP का उपयोग करके संवेदनशील डेटा (पासवर्ड) भेज रहा है। तो यह एक उच्च कमजोरी है।

testssl.sh का उपयोग करें कमजोरियों की जांच करने के लिए (बग बाउंटी कार्यक्रमों में शायद इस प्रकार की कमजोरियों को स्वीकार नहीं किया जाएगा) और a2sv का उपयोग करें कमजोरियों की पुनः जांच करने के लिए:

./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 कमजोरियों के बारे में जानकारी:

स्पाइडरिंग

वेब के अंदर किसी प्रकार का स्पाइडर लॉन्च करें। स्पाइडर का लक्ष्य है परीक्षित एप्लिकेशन से जितने संभव हो सके पथों को खोजना। इसलिए, वेब क्रॉलिंग और बाहरी स्रोतों का उपयोग करके जितने संभव हो सके वैध पथों को खोजा जाना चाहिए।

ब्रूट फोर्स निर्देशिकाएँ और फ़ाइलें

रूट फ़ोल्डर से ब्रूट-फोर्सिंग शुरू करें और सुनिश्चित करें कि इस विधि का उपयोग करके पाए गए सभी निर्देशिकाओं को ब्रूट-फोर्स करें और स्पाइडरिंग द्वारा खोजी गई सभी निर्देशिकाएँ।
उपकरण:

प्रत्येक फ़ाइल में क्या जांचें

  • फाइल बैकअप: एक बार जब आप सभी फ़ाइलें ढूंढ लेते हैं, तो सभी निष्पादन योग्य फ़ाइलों के बैकअप की तलाश करें (".php", ".aspx"...)। बैकअप का नामकरण करने के लिए सामान्य भिन्नताएँ हैं: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp और file.old. आप bfac या backup-gen** का उपयोग भी कर सकते हैं।**

विशेष खोजें

जब आप स्पाइडरिंग और ब्रूट-फोर्सिंग कर रहे हों, तो आप दिलचस्प चीजें पा सकते हैं जिन पर आपको ध्यान देना चाहिए

403 निषिद्ध/बेसिक प्रमाणीकरण/401 अनधिकृत (बायपास)

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

HTTP रीडायरेक्ट (CTF)

यह संभव है कि रेडायरेक्शन के अंदर सामग्री डाली जाए। यह सामग्री उपयोगकर्ता को नहीं दिखाई देगी (क्योंकि ब्राउज़र रीडायरेक्शन को निष्पादित करेगा) लेकिन वहाँ कुछ छिपा हो सकता है।

वेब कमजोरियों की जांच

अब जब वेब एप्लिकेशन का एक व्यापक सूचीकरण किया गया है, तो संभावित कमजोरियों की जांच करने का समय है। आप चेकलिस्ट यहाँ पा सकते हैं:

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

वेब कमजोरियों के बारे में अधिक जानकारी प्राप्त करें:

पृष्ठों की निगरानी करें

आप https://github.com/dgtlmoon/changedetection.io जैसे उपकरणों का उपयोग करके पृष्ठों की निगरानी कर सकते हैं ताकि संशोधनों की पहचान की जा सके जो कमजोरियों को डाल सकते हैं।

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}

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