Jump to content
Dragos

Web challenge - bypass htmlentities

Recommended Posts

  • Moderators

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
Link to comment
Share on other sites

  • Moderators

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
Link to comment
Share on other sites

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...