我在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-- -"}
有什么区别?查询中为表指定的名称是否不相关?
如果您需要进一步澄清,或者我还没有清楚自己的意思,请告诉我,我会尽力帮助您。预先谢谢你。
黑客攻击的阶段是:侦查,扫描,获取访问权限,维护访问权限并清除记录。基本上,它只是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注入漏洞(该应用程序是否可以清理用户的输入)。
[注射前: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
第三有效负载用于检查查询将选择多少列。要了解这一点,您必须了解subquery
,join
和union
(进行快速搜索,这是一个非常基本的概念)。名称或表别名并不重要(UT1或UT2),它只是标识符,因此与当前表别名不同。
检查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控制台要容易得多(如果查询被认为是危险的,则使用虚拟机或沙箱)。