常见SQL注入总结

没有对用户输入数据的合法性没有判断。
id = 1 / id = 1’ /id = 1 and 1=1 /id = 1 and 1=2
MySQL5.0后默认有information_schema数据库,表schemata、tables、columns
database()、version()、user()函数
limit m,n m记录开始的位置,n取的条数
mysql注释符: # – /**/
内联注释 /!code/
?id=-1 /!union/ /!select/ 1,2,3

1.union 注入 union select

2.Boolean注入
只有yes/no返回
1)采用length()函数判断长度,列如;
id=1’ and length(database()) >= 1 --+
2)采用substr()函数截取查询值,列如: #substr(x,m,n) x截取对象,M从1开始,n多少条
id=1’ and substr(database(),1,1) = ‘t’ --+
3)采用ord(),在mysql中为ASCII转换函数,列如:
id=1’ and ord(substr(database(),1,1)) = 115 --+

3.报错注入
有错误的回显展示。
使用updatexml()、floor()、exp()将查询的内容输出,列如·;
id=1’ and updatexml(1,concat(0x7e,(select user()),0x7e),1)–+

4.时间盲注
利用回包的时间来判断数据库,与IF结合,利用sleep()、benchmark()函数让mysql的执行时间变长。
if(x,m,n) 如果x是true,返回m,否则返回n 列如:
id = 1’ and if(length(database())>1,sleep(5),1) #如果database()名大于1,休眠5s

5.堆叠注入
堆叠查询可以执行多条语句,以分号隔开。列如:
id=1’ ; select if(substr(user(),1,1) = ‘r’,sleep(3),1)#

6.二次注入
两个数据包,第一个的注入查询结果作为第二个的参数

7.宽字节注入
单引号被转义为\‘,导致ID无法逃逸单引号,\ 的编码是%5c,在GBK中,%df%5c是 繁体字,可以使单引号逃逸成功。有时候需要结合嵌套查询。
首先数据库的编码为GBK,宽字节的格式是地址后先加一个%df,列如:
id = 1%df ’ and 1 = 1#
在PHP中,使用iconv()进行编码转换时,也可能存在宽字节注入。

8.cookie注入
在数据包中,也有可能是cookie传参,在cookie的地方进行注入

9.base64注入
id=1’ 将注入测试语句进行base64加密,有时候需要两次加密

10.XFF注入
在数据包中,X-Forwarded-Fof 可能存在注入,列如:
X-Forwarded-for:127.0.0.1’ and 1=1

SQL注入绕过技术:
1.大小写:And aNd anD Select sElect…

2.双写:aandnd oorrder oorr…

3.编码:URL编码,有时候可以两次编码

4.内联注释:id =1 /!and/ 1=1

SQL修复建议:
1.过滤危险字符 正则表达式
2.使用预编译语句 PDO

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值