Pentesting applicazione Web: quando si enumerano directory e file del sito Web, come stabilire se HTTP 200 è una pagina valida o una pagina di errore?

3

Supponiamo che un'app Web sia sottoposta a test in cui tutte le funzionalità si trovano dietro un accesso.

Uno dei test da eseguire è verificare se una qualsiasi delle pagine è disponibile senza il log-in.

Proviamo l'url effettivo della pagina che vogliamo raggiungere e vediamo se ci reindirizza alla pagina di accesso o, se ci mostra il contenuto senza accedere (male).

Per automatizzare questo processo abbiamo una lista di (presumibilmente) tutti gli url validi e eseguiamo uno script che prova ogni pagina e registra quale fosse il codice di risposta.

Se la risposta è 200, abbiamo accesso senza accesso, tuttavia se la risposta è 301, 403 ecc., siamo a posto con quell'URL.

Il problema è che questa app web restituisce 200 codici anche quando si reindirizza alla pagina di accesso.

C'è un altro modo per rilevare il reindirizzamento?

    
posta pzirkind 04.12.2017 - 20:28
fonte

3 risposte

6

Applicazioni Web e codici di stato HTTP

Se restituisce 200 sia su una pagina non autorizzata (302 Reindirizza a 200 pagine di accesso), sia su una pagina autorizzata (pagina autorizzata scoperta), ci sono alcune cose che puoi fare:

  1. Puoi cercare ciò che accade su un accesso riuscito. Crea un account falso, accedi. Guarda cosa non viene incluso nella pagina reale e cosa no. Ecco come troverai la tua stringa unica.
    • Ricorda: se esiste un WAF o qualcosa del genere, potrebbe semplicemente iniziare a reindirizzare tutte le richieste in arrivo a 3xx / 4xx, sia che si tratti di richieste valide o non valide.
  2. Analizza la risposta HTTP per il codice HTML o una stringa che non viene visualizzata nella pagina di accesso , OPPURE una stringa che viene visualizzata SOLO nella pagina di accesso.
    • Ad esempio, potrebbe apparire la stringa "Non autorizzato" o "Accedi". Vorresti escludere le risposte con quelle stringhe.

Entrambi possono essere eseguiti usando Python, o qualsiasi linguaggio di scripting / programmazione che si desidera usare, incluso bash. Bash, tuttavia, sarà molto più lento.

Potresti fornire un esempio per favore?

Certo. Vedi sotto.

1. Utilizzando Python

Dovrai modificare questo. È un codice di esempio rapido.

import pycurl
import urllib
import sys
from StringIO import StringIO 

c = pycurl.Curl()
html = StringIO()
c.setopt(pycurl.WRITEFUNCTION, html.write)
c.setopt(c.VERBOSE, 0)

def send_req(url):
    field = urllib.urlencode(payload)
    c.setopt(c.URL, url)
    c.setopt(c.VERBOSE, 0)
    c.perform()
    if "successful non-login-page string to search for" in html.getvalue():
        html = StringIO() # Reset
        return True
    return False

with open("dir-or-file-list.txt") as f:
    for line in f:
        if send_req("http://haxlogin.page/" + line + ") == True:
            print "[!] Found a valid page: %s" % line

Non ho tempo per controllare se questo Python funziona, è solo un esempio generale su come potresti farlo funzionare con Python, quindi dovrai modificarlo.

2. Utilizzo di Burp Suite Pro

Con Intrusione Burp , nella finestra di dialogo di attacco , puoi utilizzare filter . Imagine 2xx restituisce "Non autorizzato" come codice / stringa univoci. Dovrai escludere "Non autorizzato" dalla ricerca in questo modo:

Filtro:

  1. Filtro per termine di ricerca "Non autorizzato", ricerca negativa
  2. Filtra per codice di stato: 2xx [successo]

3. Utilizzando OWASP Dirbuster

Options -> Advanced Options -> Scan Options -> Fail Case String -> Enter a string that appears only on the login page

302 Reindirizzamenti

Ricorda: molte applicazioni eseguono un reindirizzamento 302 dopo aver pubblicato qualcosa con successo.

Questo non significa necessariamente che un reindirizzamento 302 è sbagliato o che non hai trovato nulla. Usa curl -L per seguire il reindirizzamento e vedere dove ti arriva.

Probabilmente vorrai anche controllare il contenuto della pagina reindirizzata in modo da non perdere nulla.

    
risposta data 04.12.2017 - 20:59
fonte
2

Se il server sta reindirizzando con un 200, probabilmente sta eseguendo un meta refresh . Dovrai rivedere il corpo della risposta HTTP 200 e cercare qualcosa di simile a questo:

<head>      
    <meta http-equiv="refresh" content="0;URL='https://www.example.com/login'" />    
</head>   
    
risposta data 04.12.2017 - 20:53
fonte
1

Se l'applicazione restituisce 200 quando sta effettivamente reindirizzando, dovrai analizzare il contenuto della risposta. Puoi analizzare l'URL o, se questo non ti dice cosa devi sapere, analizzare il contenuto per i campi di accesso.

    
risposta data 04.12.2017 - 20:33
fonte

Leggi altre domande sui tag