Elesar
24.04.2008, 03:58
Нашел иньекцию в скрипте на сайте, долго перебирал колличество полей для выборки, ничего не получилось(всегда пишет The used SELECT statements have a different number of columns).
Погуглив по параметрам скрипта нашел движок, оттуда достал весь запрос : SELECT * FROM flashscores WHERE game = ".$gameID." ORDER BY score DESC LIMIT 10;
Так-же достоверно узнал колличество полей: 5
Подскажите, как правильно составить sql inj?
<?
if(isset($_GET["gameid"]))
{
$gameID=$_GET["gameid"];
$sql = "SELECT * FROM flashscores WHERE game = ".$gameID." ORDER BY score DESC LIMIT 10;<br>";
$result = MySQL_QUERY($sql);
echo "111:".$sql;
while($scores = MySQL_FETCH_ARRAY($result))
{
$userresult = MySQL_QUERY("SELECT * FROM users WHERE id = ".$scores["user"].";");
$user = MySQL_FETCH_ARRAY($userresult);
$username = $user["username"];
$ranking = MySQL_QUERY("SELECT COUNT(*) FROM flashscores WHERE game = ".$gameID." AND score > ".$scores["score"].";") OR DIE(MySQL_ERROR());
if($rankrow = mysql_fetch_row($ranking))
{
$rank = $rankrow[0]+1;
}else{
$rank = 1;
}
if($gameID < 9)
{
if($scores["user"]==$CURUSER["id"])
{
print("<TR style=\"background-color: #BBBBBB\"><TD>".$rank."</TD><TD WIDTH=75%>".$username."</TD><TD><div style=\"text-align:right;width:100%;\">".$scores["score"]."</div></TD></TR>");
}else{
print("<TR><TD>".$rank."</TD><TD>".$username."</TD><TD><div style=\"text-align:right;width:100%;\">".$scores["score"]."</div></TD></TR>");
}
}else{
if($scores["user"]==$CURUSER["id"])
{
print("<TR style=\"background-color: #BBBBBB\"><TD>".$rank."</TD><TD WIDTH=75%>".$username."</TD><TD>".$scores["level"]."</TD><TD><div style=\"text-align:right;width:100%;\">".$scores["score"]."</div></TD></TR>");
}else{
print("<TR><TD>".$rank."</TD><TD>".$username."</TD><TD>".$scores["level"]."</TD><TD><div style=\"text-align:right;width:100%;\">".$scores["score"]."</div></TD></TR>");
}
}
}
$sql = "SELECT * FROM flashscores WHERE game = ".$gameID." AND user = ".$CURUSER["id"]." ORDER BY score DESC LIMIT 1;";
echo "222:".$sql;
$yourresult = MySQL_QUERY($sql) OR DIE(MySQL_ERROR());
if($yourscore = MySQL_FETCH_ARRAY($yourresult))
{
$yourhighscore = $yourscore["score"];
$yourlevel = $yourscore["level"];
$yourranking = MySQL_QUERY("SELECT COUNT(*) FROM flashscores WHERE game = ".$gameID." AND score > ".$yourhighscore.";") OR DIE(MySQL_ERROR());
if($ranking = mysql_fetch_row($yourranking))
{
$yourrank = $ranking[0]+1;
}else{
$yourrank = 1;
}
if($yourrank>10)
{
if($gameID < 9)
{
print("<TR style=\"background-color: #BBBBBB\"><TD>".$yourrank."</TD><TD WIDTH=75%>".$CURUSER["username"]."</TD><TD><div style=\"text-align:right;width:100%;\">".$yourhighscore."</div></TD></TR>");
}else{
print("<TR style=\"background-color: #BBBBBB\"><TD>".$yourrank."</TD><TD WIDTH=75%>".$CURUSER["username"]."</TD><TD>".$yourlevel."</TD><TD><div style=\"text-align:right;width:100%;\">".$yourhighscore."</div></TD></TR>");
}
}
}
print("</TABLE><P>");
}else{
print("<TABLE WIDTH=100%><TR><TD><center><B>".$_GET["gamename"]."</B></center></TD></TR>");
print("<TR><TD>Sorry, we cannot save scores of this game!</TD></TR>");
print("</TABLE>");
}
end_table();
?>
Погуглив по параметрам скрипта нашел движок, оттуда достал весь запрос : SELECT * FROM flashscores WHERE game = ".$gameID." ORDER BY score DESC LIMIT 10;
Так-же достоверно узнал колличество полей: 5
Подскажите, как правильно составить sql inj?
<?
if(isset($_GET["gameid"]))
{
$gameID=$_GET["gameid"];
$sql = "SELECT * FROM flashscores WHERE game = ".$gameID." ORDER BY score DESC LIMIT 10;<br>";
$result = MySQL_QUERY($sql);
echo "111:".$sql;
while($scores = MySQL_FETCH_ARRAY($result))
{
$userresult = MySQL_QUERY("SELECT * FROM users WHERE id = ".$scores["user"].";");
$user = MySQL_FETCH_ARRAY($userresult);
$username = $user["username"];
$ranking = MySQL_QUERY("SELECT COUNT(*) FROM flashscores WHERE game = ".$gameID." AND score > ".$scores["score"].";") OR DIE(MySQL_ERROR());
if($rankrow = mysql_fetch_row($ranking))
{
$rank = $rankrow[0]+1;
}else{
$rank = 1;
}
if($gameID < 9)
{
if($scores["user"]==$CURUSER["id"])
{
print("<TR style=\"background-color: #BBBBBB\"><TD>".$rank."</TD><TD WIDTH=75%>".$username."</TD><TD><div style=\"text-align:right;width:100%;\">".$scores["score"]."</div></TD></TR>");
}else{
print("<TR><TD>".$rank."</TD><TD>".$username."</TD><TD><div style=\"text-align:right;width:100%;\">".$scores["score"]."</div></TD></TR>");
}
}else{
if($scores["user"]==$CURUSER["id"])
{
print("<TR style=\"background-color: #BBBBBB\"><TD>".$rank."</TD><TD WIDTH=75%>".$username."</TD><TD>".$scores["level"]."</TD><TD><div style=\"text-align:right;width:100%;\">".$scores["score"]."</div></TD></TR>");
}else{
print("<TR><TD>".$rank."</TD><TD>".$username."</TD><TD>".$scores["level"]."</TD><TD><div style=\"text-align:right;width:100%;\">".$scores["score"]."</div></TD></TR>");
}
}
}
$sql = "SELECT * FROM flashscores WHERE game = ".$gameID." AND user = ".$CURUSER["id"]." ORDER BY score DESC LIMIT 1;";
echo "222:".$sql;
$yourresult = MySQL_QUERY($sql) OR DIE(MySQL_ERROR());
if($yourscore = MySQL_FETCH_ARRAY($yourresult))
{
$yourhighscore = $yourscore["score"];
$yourlevel = $yourscore["level"];
$yourranking = MySQL_QUERY("SELECT COUNT(*) FROM flashscores WHERE game = ".$gameID." AND score > ".$yourhighscore.";") OR DIE(MySQL_ERROR());
if($ranking = mysql_fetch_row($yourranking))
{
$yourrank = $ranking[0]+1;
}else{
$yourrank = 1;
}
if($yourrank>10)
{
if($gameID < 9)
{
print("<TR style=\"background-color: #BBBBBB\"><TD>".$yourrank."</TD><TD WIDTH=75%>".$CURUSER["username"]."</TD><TD><div style=\"text-align:right;width:100%;\">".$yourhighscore."</div></TD></TR>");
}else{
print("<TR style=\"background-color: #BBBBBB\"><TD>".$yourrank."</TD><TD WIDTH=75%>".$CURUSER["username"]."</TD><TD>".$yourlevel."</TD><TD><div style=\"text-align:right;width:100%;\">".$yourhighscore."</div></TD></TR>");
}
}
}
print("</TABLE><P>");
}else{
print("<TABLE WIDTH=100%><TR><TD><center><B>".$_GET["gamename"]."</B></center></TD></TR>");
print("<TR><TD>Sorry, we cannot save scores of this game!</TD></TR>");
print("</TABLE>");
}
end_table();
?>