所以我一直在嘗試複製二次SQL注入。這是我準備的兩個基於php的網站的示例模板。我們把它稱爲選民登記表。用戶可以註冊,然後你可以檢查你是否是註冊選民。如何演示二階SQL注入?
insert.php
<?php
$db_selected = mysql_select_db('canada',$conn);
if (!db_selected)
die("can't use mysql: ". mysql_error());
$sql_statement = "INSERT into canada (UserID,FirstName,LastName,Age,State,Town)
values ('".mysql_real_escape_string($_REQUEST["UserID"])."',
'".mysql_real_escape_string($_REQUEST["FirstName"])."',
'".mysql_real_escape_string($_REQUEST["LastName"])."',
".intval($_REQUEST["Age"]).",
'".mysql_real_escape_string($_REQUEST["State"])."',
'".mysql_real_escape_string($_REQUEST["Town"])."')";
echo "You ran the sql query=".$sql_statement."<br/>";
$qry = mysql_query($sql_statement,$conn) || die (mysql_error());
mysql_close($conn);
Echo "Data inserted successfully";
}
?>
select.php
<?php
$db_selected = mysql_select_db('canada', $conn);
if(!db_selected)
die('Can\'t use mysql:' . mysql_error());
$sql = "SELECT * FROM canada WHERE UserID='".addslashes($_POST["UserID"])."'";
echo "You ran the sql query=".$sql."<br/>";
$result = mysql_query($sql,$conn);
$row=mysql_fetch_row($result);
$sql1 = "SELECT * FROM canada WHERE FirstName = '".$row[1]."'";
echo "The web application ran the sql query internally=" .$sql1. "<br/>";
$result1 = mysql_query($sql1, $conn);
$row1 = mysql_fetch_row($result1);
mysql_close($conn);
echo "<br><b><center>Database Output</center></b><br><br>";
echo "<br>$row1[1] $row1[2] , you are a voter! <br>";
echo "<b>VoterID: $row[0]</b><br>First Name: $row[1]<br>Last Name: $row[2]
<br>Age: $row[3]<br>Town: $row[4]<br>State: $row[5]<br><hr><br>";
}
?>
所以我特意讓這個脆弱的顯示順序SQL注入怎樣的第二部作品,用戶可以在輸入一個代碼到的第一個名字部分(我目前卡住了,我嘗試了很多不同的方式,但似乎我無法做到)。 然後,當一個人想要激活他已經插入名字部分的代碼時,他所需要做的只是鍵入userID並插入代碼。
例如: 我會鍵入到insert.php頁面: 用戶id = 17
姓=(我需要注入的東西在這裏)
姓氏= ..
年齡= ..
鎮= ..
狀態= ..
然後,當我檢查我的詳細信息並輸入17時,注入的SQL腳本將被激活。 我能舉幾個例子說明我可以通過這個漏洞發現哪些類型的漏洞嗎?
3.僅發佈相關代碼 –
試用本演示,如果您不理解或無法應用,請與我們聯繫。 http://www.esecforte.com/blog/second-order-sql-injection/ – PyQL
我基於我的示例從該網站。但它並沒有爲我工作,因爲我無法得到輸出顯示爲如何出現在該示例 – yoshifish