lunedì 19 marzo 2012

Semtex level5 writeup

Questo livello è stato veramente difficile per me... Ho iniziato il livello con un errore di comprensione di questo testo:

Random Networking
Make 10 connections to port 24027 from different IP's. On each connection you will receive a string of 10 ASCII characters. XOR this string with the Semtex5 password, character by character. Then send back the 10 characters followed by another string of exactly 10 characters which identifies you (can be anything within A-Z, a-z, 0-9). The first 10 characters that you send, are different on every connection, the last 10 have to be the same. If you do not send the correct string back within 5 seconds you are disconnected. Once connected with at least 10 different IP's You will receive the password on one connection, chosen randomly.

Io pensavo all'inizio di dover fare 10 connessioni in 2 minuti distinte fra loro ma non contemporaneamente... In più non avevo capito dove potevo ricevere la password... I miei primi insuccessi si basavano sull'uso di scapy, in modo da spoofare l'ip... Magari funzionava pure l'ip spoofing, ma ovviamente non ricevo nessuna risposta in quanto l'ip non era il mio... Quindi niente da fare su quella strada... Così mi sono rivolto al sempre fedele python, che riesce sempre a darmi una mano... Non ho inserito la key per XOR, che è la password del livello 5, io ce l'ho segnata, dovreste averla anche voi... Questo è il codice dello script:

Il codice è un po' lunghetto, senza dubbio, e si poteva scrivere meglio, ma questo so fare e questo faccio... Mi sarebbe piaciuto lanciare 10 volte contemporaneamente da questo script la funzione operazioni(), ma non ho mai usato thread, non sapevo proprio come fare... Avevo provato con un for loop ma non era ciò che volevo, perchè attendeva che finisse il primo operazioni() prima di lanciare il successivo... Così ho usato un po' di bashfu:


Poco elegante come soluzione, ma funziona e richiede solo una shell per ricevere la password e quindi per me è ok... E' stato veramente difficile trovare dei proxy funzionanti... A volte funzionava uno, a volte un altro, così ho deciso di creare un array e sbatterli tutti dentro(attenzione che l'ip deve avere gli apici, una stringa, mentre la porta no perchè è un intero)... Conviene recuperarne alcuni con google, sbatterli dentro all'array, calcolare la lunghezza dell'array(è commentato nello script python, basta decommentarlo) e poi modificare il codice bash per utilizzarlo...

Nessun commento: