首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图从VulnHub中理解这个SQL注入

试图从VulnHub中理解这个SQL注入
EN

Security用户
提问于 2022-06-05 22:18:46
回答 1查看 111关注 0票数 1

我正在努力理解这里在VulnHub的五酯实验室挑战。

在我将教程翻译成英文之后,Exercise 2向我展示了以下SQLi,它完成了挑战:

代码语言:javascript
复制
http://pentesterlab/sqli/example2.php?name=root'/**/union/**/select/**/1,(select/**/name/**/from/**/users/**/limit/**/3,1),(select/**/passwd/**/from/**/users/**/limit/**/3,1),4,5/**/and/**/'1'='2

/**/用于绕过过滤空间字符的WAF。

union select 1部分只显示在红色中圈出的数字1。

方括号( ... )用于语法上防止DBMS将限制部分误解为limit 3,1,selectlimit 3,1,4,5,如果没有括号,这两者都是不正确的。

limit 3,1部件意味着在第三个结果之后,输出下一个结果,因此它得到一个名称和一个密码,用蓝色圈起来。

如果我的上述理解是正确的,我不明白为什么教程作者包括4,5部分,也不明白为什么他们包括'1'='2部分,评估为假?

EN

回答 1

Security用户

回答已采纳

发布于 2022-06-08 15:42:31

为什么他们包括'1'='2‘部分,计算为假

代码语言:javascript
复制
$sql .= $_GET["name"]."'";

在上面的代码片段中,请注意,'被附加到$_GET["Name"]的末尾(所有这些都被附加到select命令中)。在该漏洞中,您将在名称(根)之后提供关闭的',因此您需要说明附加的'。要做到这一点,可以将and '1'='2添加到末尾,因此在追加'时,这是正确的语法。在伪代码中,这相当于“在第五列中,我希望将"true (5)和false (1=2)”的值设置为false (0)。当我测试该漏洞时,and值为true还是false并不重要。我猜这是为了防止任何带有真值的意外事件发生。

为什么教程作者包括4,5部分

TL;DR - SQL中的union操作符需要来自所有select语句的相同数量的列。users表有五列,因此联合选择需要五列。

The详细信息

从这个屏幕截图中可以看到,实验室中的users表有五列。

php脚本中的查询选择所有列:

代码语言:javascript
复制
$sql = "SELECT * FROM users where name='";
$sql .= $_GET["name"]."'";

该漏洞正在使用SQL union运算符返回其他信息。联合之后的select必须有五列,因为users表有五列。当在SQL中执行union时:

  • UNION中的每个SELECT语句都必须有相同数量的列。
  • 这些列还必须具有类似的数据类型。
  • 每个SELECT语句中的列也必须按相同的顺序排列。

进一步阅读它,php中的select正在填充第一行。联合后的选择正在填充第二行。它将填充第一列中的值“1”、第二列中的用户名、第三列中的密码以及第四列和第五列中的值“4”和“5”。

参考资料 MySql联盟

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/262522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档