Jump to content
Mecanik

[Hard] XSS challenge

Recommended Posts

Posted

Gresit,este un filtru XSS custom creat de mine. Doar cu un vector special,scris custom poti trece de el...

Daca chiar vreti,postez si functia sa va puteti orienta...

Hint:

este destul de saritor in ochi,doar cand introduci de exemplu: ""

dupa filtru: \"\"

Mai mult de atat,nu va pot ajuta :) doar am scris acolo [Hard].

Posted
Gresit,este un filtru XSS custom creat de mine. Doar cu un vector special,scris custom poti trece de el...

Daca chiar vreti,postez si functia sa va puteti orienta...

Hint:

este destul de saritor in ochi,doar cand introduci de exemplu: ""

dupa filtru: \"\"

Mai mult de atat,nu va pot ajuta :) doar am scris acolo [Hard].

Sa mori tu infipt in spada ca e o functie custom facuta de tine... Pentru ca mie mi se pare htmlentities(mysql_escape_string());


Site-ul meu, folosind htmlentities(mysql_escape_string());
http://tryingharder.tk/?stf=%3C%3E%27%22%26%2F%5C
Si site-ul tau:
http://istchall.uv.ro/index.php?sex=%3C%3E%27%22%26%2F%5C

Vezi vreo diferenta?

Posted
Sa mori tu infipt in spada ca e o functie custom facuta de tine... Pentru ca mie mi se pare htmlentities(mysql_escape_string());


Site-ul meu, folosind htmlentities(mysql_escape_string());
http://tryingharder.tk/?stf=%3C%3E%27%22%26%2F%5C
Si site-ul tau:
http://istchall.uv.ro/index.php?sex=%3C%3E%27%22%26%2F%5C

Vezi vreo diferenta?

Ac. lucru am vrut si eu sa-l zic, este htmlentities(mysql_escape_string()); Dar poate ne inselam. Vrei sa pui functia custom te rog? Sunt curios!

Posted

@Sweby: de ce trebuie sa fii idiot? de ce te crezi ca stii tot ?

Poftim functia mai jos:

function xss_clean($data)
{
// Creat de Mecanik pentru IST. Daca scoti textul asta,esti un lame,lake,si un noob.
// Scoate &entity;
$data = str_replace(array('&','<','>'), array('&','<','>'), $data);
$data = preg_replace('/(*\w+)[\x00-\x20]+;/u', '$1;', $data);
$data = preg_replace('/(*[0-9A-F]+);*/iu', '$1;', $data);
//$data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');
// Scoate orice atribut incepand cu "on" sau xmlns
$data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);
// Scoate javascript: si vbscript: orice protocol
$data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);
// Prostia din IE: <span style="width: expression(alert('Ping!'));"></span>
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*[^>]*+>#iu', '$1>', $data);

// Mai scoatem ceva elemente
$data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);

do
{
// scoatem tag-urile ce nu le vrem deloc...
$old_data = $data;
$data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
}
while ($old_data !== $data);

// Si suntem gata =D
return $data;
}

e chemata asa:


$xss = xss_clean($_GET['sex']);

Nu ma feresc sa o postez,ca mai am 2 filtre si mai calumea,daca le puneam toate era dezastru :)

p.s sweby: sa mori tu infipt in pula.

Posted (edited)

@TheTime, esti 100% sigur ?

@Zatarra, nu toti fac ceva pentru rasplata, poate unii vor sa invete/exerseze :).

@Sweby, daca nu poti face challenge-ul, nu trebuie sa te apuci sa iei omu' la pula.

p.s: in 30 min il fac.

Un filtru dasta mi-a vandut si mie :))

Edited by sensi
Posted (edited)
@TheTime, esti 100% sigur ?

@Zatarra, nu toti fac ceva pentru rasplata, poate unii vor sa invete/exerseze :).

@Sweby, daca nu poti face challenge-ul, nu trebuie sa te apuci sa iei omu' la pula.

p.s: in 30 min il fac.

Un filtru dasta mi-a vandut si mie :))

Daca ai cumparat asa ceva, esti prost.

@Sweby: de ce trebuie sa fii idiot? de ce te crezi ca stii tot ?

Poftim functia mai jos:

function xss_clean($data)
{
// Creat de Mecanik pentru IST. Daca scoti textul asta,esti un lame,lake,si un noob.
// Scoate &entity;
$data = str_replace(array('&','<','>'), array('&','<','>'), $data);
$data = preg_replace('/(*\w+)[\x00-\x20]+;/u', '$1;', $data);
$data = preg_replace('/(*[0-9A-F]+);*/iu', '$1;', $data);
//$data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');
// Scoate orice atribut incepand cu "on" sau xmlns
$data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);
// Scoate javascript: si vbscript: orice protocol
$data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);
// Prostia din IE: <span style="width: expression(alert('Ping!'));"></span>
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*[^>]*+>#iu', '$1>', $data);

// Mai scoatem ceva elemente
$data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);

do
{
// scoatem tag-urile ce nu le vrem deloc...
$old_data = $data;
$data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
}
while ($old_data !== $data);

// Si suntem gata =D
return $data;
}

e chemata asa:


$xss = xss_clean($_GET['sex']);

Nu ma feresc sa o postez,ca mai am 2 filtre si mai calumea,daca le puneam toate era dezastru :)

p.s sweby: sa mori tu infipt in pula.

Mincinosu roade pula.

1. la mana functia asta nu face escape la " sau '.

2. la mana, e luata de pe net: filter - XSS filtering function in PHP - Stack Overflow

3. la mana nu e aceeasi functie pe care o folosesti pe site.

Site-ul meu cu functia ta

Site-ul tau care zici ca foloseste tot functia ta.

Muie.

Edited by Sweby
Posted

Esti idiot,ti-am mai zis-o sus:

1. la mana,functia e editata,deci e custom,il consider made by me.

2. la mana,e acelasi ca si pe site,ca de acolo am dat paste.

3. la mana,nu fii smecher,si cheama functia calumea ;)

Posted

Cum ai zis tu ca chemi functia:


$xss = xss_clean($_GET['sex']);

Cum am chemat eu functia:


$xss = xss_clean($_GET['stf']);

Am schimbat numele inputului, ma scuzi ca nu-s virgin ca tine. Poti sa chemi cum ai vrea tu functia, tot nu face escape la stringuri.

Posted (edited)

Da cum sa faca ma escape,cand el este preg_replace,tu nu vezi ce e acolo?

Si nu e acelasi lucru, daca il chemi de 2 ori,e si mai bine, de exemplu:

$xss = xss_clean($_GET['stf']);

print "". xss_clean(trim($_GET['stf'])). "";

sau si mai bine:

$xsss = xss_clean(trim(htmlspecialchars($_GET['stf'])));

print $xsss;

la PRINT conteaza!

Edited by Mecanik
Posted
Da cum sa faca ma escape,cand el este preg_replace,tu nu vezi ce e acolo?

Si nu e acelasi lucru, daca il chemi de 2 ori,e si mai bine, de exemplu:

$xss = xss_clean($_GET['stf']);

print "". xss_clean(trim($_GET['stf'])). "";

sau si mai bine:

$xsss = xss_clean(trim(htmlspecialchars($_GET['stf'])));

print $xsss;

la PRINT conteaza!

Deja imi dau seama cat php stii... Apelezi functia trim degeaba si la print concatenezi nimic cu apelurile alea, era necesar?

La al 2-lea exemplu folosesti htmlspecialchars si deja is 2 functii care filtreaza request-ul. Avand in vedere ca pe pagina cu challenge-ul, valoarea se afiseaza direct pe pagina si nu intr-un tag, e cam imposibil sa faci bypass.

Dar deja deviem de la subiect, n-am vrut sa arat decat ca pe pagina cu challenge-ul nu folosesti filtrele ce le-ai zis tu. Pa.

  • Upvote 1
Posted
http://s10.postimg.org/7lh6f00op/image.png

Primesti PM cu sintaxa doar dupa ce faci publica sintaxa ta. Daca zici ca filtrul tau este "inspirat" de prin alte parti, nu vreau sa te ajut sa-i faci bypass.

Daca vrei, apelam la un admin ca sa facem "schimb de sintaxe".

Cheers! :)

Sunt curios ce sintaxa ai folosit. Sunt incepator cu xss dar lucrez din greu :), daca esti dragut sa-mi dai PM cu sintaxa ta, mi-ar fi de mare ajutor la invatat.

Bafta!

Posted

ce imi explica mie Sweby...ca nu stie ce face trim ... PHP: trim - Manual

uite ce contine pagina...ca sa clarificam treaba :


$xss = xss_clean($_GET['sex']);
if(isset($_GET['sex']))
{
echo '<div align="center">
<form method="GET" action="index.php">
De cate ori faci sex pe an?<br >
<input type="text" name="sex" size="25" />
<input type="submit" />
</form>
Tu faci de: '.$xss.'
<hr />Challenge creat de Mecanik.
</div>';
}elseif(!isset($_GET['sex']))
{
echo '<div align="center">
<form method="GET" action="index.php">
De cate ori faci sex pe an?<br >
<input type="text" name="sex" size="25" />
<input type="submit" />
</form>
Tu faci de: '.$xss.'
<hr />Challenge creat de Mecanik.
</div>';
}
ob_flush();

si scuze TheTime,dar eu nu imi fac public vectorul...ai reusit,bravo,asta inseamna ca se poate,te trec la solvers.

l.e: scuze gafi,dar nu pot,este un challenge :) mai tarziu fac unul foarte usor,pentru incepatori.

Posted
ce imi explica mie Sweby...ca nu stie ce face trim ... PHP: trim - Manual

uite ce contine pagina...ca sa clarificam treaba :


$xss = xss_clean($_GET['sex']);
if(isset($_GET['sex']))
{
echo '<div align="center">
<form method="GET" action="https://rstforums.com/forum/forum.php">
De cate ori faci sex pe an?<br >
<input type="text" name="sex" size="25" />
<input type="submit" />
</form>
Tu faci de: '.$xss.'
<hr />Challenge creat de Mecanik.
</div>';
}elseif(!isset($_GET['sex']))
{
echo '<div align="center">
<form method="GET" action="https://rstforums.com/forum/forum.php">
De cate ori faci sex pe an?<br >
<input type="text" name="sex" size="25" />
<input type="submit" />
</form>
Tu faci de: '.$xss.'
<hr />Challenge creat de Mecanik.
</div>';
}
ob_flush();

si scuze TheTime,dar eu nu imi fac public vectorul...ai reusit,bravo,asta inseamna ca se poate,te trec la solvers.

Da frate iti explic, pentru ca tu l-ai apelat:

print "". xss_clean(trim($_GET['stf'])). "";

si asa nu face nimic, e apelata degeaba functia trim(). Ca sa fie cat de cat folositoare trebuie sa ii specifici si ce caractere sa stearga:

print "". xss_clean(trim($_GET['stf'][COLOR="#FF0000"], "<>"[/COLOR])). "";

Cat despre filtru, l-ai editat acum, cine a incercat inainte, a observat ca "<>&" erau transformate in entities si acum nu mai sunt... Pun pariu ca tu nu poti sa treci de xss_clean() :-j.

xssclean.png

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