Saturn

Autore: Lord Shiva Aggiornamento: 08.12.2023 Tempo di lettura: 01 min.
 

Una Challenges piuttosto semplice. Aprendo il sito internet si vede una semplice pagina che richiede un URL.
Successivamente ho scaricato lo zip per analizzare il codice.

 @app.route('/secret')
def secret():
    if request.remote_addr == '127.0.0.1':
        flag = ""
        with open('./flag.txt') as f:
            flag = f.readline()
        return render_template('secret.html', SECRET=flag)
    else:
        return render_template('forbidden.html'), 403

Il servizio proxy utilizza una libreria chiamata safeurl-python: https://github.com/IncludeSecurity/safeurl-python per proteggersi dagli attacchi SSRF. Anche se ho identificato diverse vulnerabilità note in questa libreria tramite Snyk: https://security.snyk.io/package/pip/safeurl-python, la versione presente è già stata corretta per risolvere questi problemi.

Flask==3.0.0
gunicorn==21.2.0
requests==2.31.0
SafeURL-Python==1.3
Werkzeug==3.0.1 

Con le mie conoscenze di base SSRF rese inutilizzabili, devo essere creativo nel catturare la flag utilizzando la conoscenza acquisita dall'analisi del software.

Sapendo che il servizio proxy è protetto da SSRF, devo verificare gli indirizzi bloccati e consentiti. Per farla breve, blocca gli indirizzi IP privati ma consente indirizzi come https://www.google.com/ e altri. Quindi, ho controllato come è configurato safeurl. Risulta che le configurazioni predefinite sono piuttosto rigide.

self._lists = {
        "whitelist": {
            "ip": [],
            "port": ["80", "443", "8080"],
            "domain": [],
            "scheme": ["http", "https"]},
        "blacklist": {
            "ip": ["0.0.0.0/8", "10.0.0.0/8", "100.64.0.0/10", "127.0.0.0/8", "169.254.0.0/16",
                "172.16.0.0/12", "192.0.0.0/29", "192.0.2.0/24", "192.88.99.0/24", "192.168.0.0/16",
                "198.18.0.0/15", "198.51.100.0/24", "203.0.113.0/24", "224.0.0.0/4", "240.0.0.0/4"],

Ovviamente, provando a inviare l'URL: http://127.0.0.1:1337/secret il sistema bloccava la richiesta. Di conseguenza, sono andato su https://www.shorturl.at/ e ho abbreviato l'indirizzo http://127.0.0.1:1337/secret. Inserisco lo short link eed ecco la  flag: HTB{Exp..................fun}