有关某些SQL注入命令的说明

问题描述 投票:0回答:1

我在hackthebox上使用CTF(Capture The Flag)Web Challange苦苦挣扎,不是渗透测试方面的专家,我想请您的帮助向我解释(带有一些评论)一些用于达成解决方案的命令,尤其是关于命令本身的语法和逻辑。 (可以在此处找到对命令的参考(click me),因此整个情况非常清楚)。

我要求您非常详细,即使在看似琐碎的事情上也是如此。撇开base64编码(我了解),我需要了解这些命令及其相关参数(命令的语法和逻辑):

1th: {"ID":"1"}

2nd: {"ID": "1' or 1-- -"}

3rd: {"ID": "-1' union select * from (select 1)table1 JOIN (SELECT 2)table2 on 1=1-- -"}

关于第三个命令,我看到了相同的命令,但是表名有所更改,如下所示:

{"ID": "-1' union select * from (select 1)UT1 JOIN (SELECT 2)UT2 on 1=1-- -"}

有什么区别?查询中为表指定的名称是否不相关?

如果您需要进一步澄清,或者我还没有清楚自己的意思,请告诉我,我会尽力帮助您。预先谢谢你。

sql sql-injection penetration-testing ctf
1个回答
0
投票

黑客攻击的阶段是:侦查,扫描,获取访问权限,维护访问权限并清除记录。基本上,它只是obtain information,然后是do something with that information。看来,这个SQL注入学习模块用于教授如何获取有关当前系统的信息。

SQL注入的基础是插入SQL代码/命令/语法。通常是在WHERE子句中完成的(因为webapp经常具有搜索功能,该功能基本上是检索用户输入并将其插入where子句中。

例如,最简单的漏洞就是这样(假设使用MySQL和PHP):

SELECT * FROM mytable WHERE mycolumn='$_GET[myparam]'

有效负载是您放入参数(例如:myparam)中以进行SQL注入的内容。通过这种查询,您可以注入有效负载1' OR 1=1来测试SQL注入漏洞。

第一个有效载荷用于检查是否存在注入点(可以注入的参数)。

  • 如果更改参数,并且输出发生变化,则表示存在注入点。
  • 否则没有注射点

第二个有效负载用于检查目标应用程序是否具有SQL注入漏洞(该应用程序是否可以清理用户的输入)。

  • 如果应用显示所有输出,则表示该应用具有SQL注入漏洞。说明:因为发送到RDBMS的查询将变成这样]

[注射前:SELECT col1, col2, ... colN FROM mytable WHERE col1='myparam'

注射后:SELECT col1, col2, ... colN FROM mytable WHERE col1='1' or 1-- -'

[请注意,在MySQL中,--(minus-minus-space)用于标记内联注释。因此,实际查询将是:SELECT col1, col2, ... colN FROM mytable WHERE col1='1' or 1

第三有效负载用于检查查询将选择多少列。要了解这一点,您必须了解subqueryjoinunion(进行快速搜索,这是一个非常基本的概念)。名称或表别名并不重要(UT1或UT2),它只是标识符,因此与当前表别名不同。

  • 如果查询成功(无错误,应用程序显示输出),则表示应用程序查询选择了2列
  • 如果查询失败,则表明它不是2列,您可以更改有效负载以检查3列,4列等...

检查SELECT语句是否具有3列的示例:

-1' union select * from (select 1)UT1 JOIN (SELECT 2)UT2 on 1=1 JOIN (SELECT 3)UT3 on 1=1 -- -

提示:在学习SQL注入时,将有效负载键入(或复制粘贴)到SQL控制台要容易得多(如果查询被认为是危险的,则使用虚拟机或沙箱)。

© www.soinside.com 2019 - 2024. All rights reserved.