所以我一直在尝试复制二阶 SQL 注入。这是我准备的两个基于 php 的站点的示例模板。我们就叫它选民登记表吧。用户可以注册,然后您可以检查您是否是注册选民。
插入.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";
}
?>
选择.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 注入是如何工作的,用户可以在名字部分输入代码(我目前被卡住了,我尝试了很多不同的方法,但似乎我无法得到它可以做任何事情)。然后当一个人想要激活他在名字部分插入的代码时,他只需输入用户ID,代码就会被插入。
例如:我将在 insert.php 页面中键入:userid = 17
名字=(我需要在这里注入一些东西)
姓氏 = ..
年龄=..
镇=..
状态 = ..
然后当我检查我的详细信息并输入 17 时,注入的 SQL 脚本将被激活。我可以举几个例子来说明我可以通过这个展示什么样的漏洞吗?