Jump to content
Dragos

Web challenge - bypass htmlentities

Recommended Posts

  • Moderators
Posted (edited)

Salutări,

 

Zilele trecute am făcut un audit pe o aplicaţie şi am descoperit o vulnerabilitate destul de interesantă, aşa că am zis să fac un web challenge pe partea asta.

 

Scenariu

Un programator a creat scriptul următor PHP care cere o parolă pentru a vedea conţinutul privat al site-ului:

<?php
$mysql = mysqli_connect("","","","") or die("Conexiune esuata la baza de date.");
$par = htmlentities($_GET['par'],ENT_QUOTES);

if(strlen($par) > 0)
{
	$sql = $mysql->query("select * from passwords where password='$par'");
	if($sql->num_rows > 0)
	{
		//continut privat
	}else{
		echo "Parola nu a fost gasita in baza de date.";
	}
}else{
	echo "Se asteapta parola in parametrul GET <strong>par</strong>.";
}

După terminarea scriptului, el a adăugat în MySQL comanda următoare, uitând să completeze câmpul de parolă:

INSERT INTO `passwords` (`ID`, `password`) VALUES (1, '');

În final, programatorul a făcut publică aplicaţia la adresa următoare:

http://dragos.interinfo.ro/rst/chall/

 

Cerinţă

Scopul exerciţiului este ca să treceţi de filtrările PHP şi să afişaţi conţinutul privat.

 

Detalii tehnice

  • scriptul este acelaşi şi pe host
  • userul MySQL are doar drept de select şi are acces doar pe baza de date dedicată exerciţiului

 

După ce aţi rezolvat

Trimiteţi-mi un PM cu mesajul afişat în cadrul conţinutului privat şi linkul final şi vă voi adăuga în lista de mai jos.

Cine a rezolvat până acum:
- adicode
- aleee
- caii
- dancezar
- DLV
- Gecko
- Hertz
- kandykidd
- Matasareanu
- Nytro
- Pintilei
- pr00f
- Silviu
- Sim Master
- SirGod
- theandruala
- u0m3
- xenonxsc
- yukti

 

Edited by Dragos
  • Like 1
  • Upvote 7
  • Moderators
Posted (edited)

Pentru că m-aţi întrebaţi mulţi care e şpilul cu chall-ul, o să dau un exemplu real-case.

 

În anumite platforme custom-made, scriptul de resetare a parolei arată ca cel de mai sus şi tabelul de utilizatori arată ceva de genul:

ID | username | password | reset_token

În momentul creării unei cereri noi de resetare, se generează un token pentru utilizator adăugat în reset_token în rândul cu utilizatorul.


Utilizatorul accesează un link de genul următor reset.php?token=d41d8cd98f00b204e9800998ecf8427e&id=1 şi îi apare un formular în care să-şi introducă noua parolă pentru cont, după care câmpul reset_token se resetează.

 

Utilizând vulnerabilitatea, putem reseta parola oricărui utilizator şi putem accesa platforma la nivel de administrator.

Edited by Dragos
  • Upvote 2

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...