SQL注入小结

发布于 2022-03-24  254 次阅读


SQL注入类型:

显错注入,POST注入,HEAD注入,宽字节注入,盲注

显错注入

显错注入是比较简单入门的SQL注入类型

通常其查询语句为

Select * from user where id=’1’

这种情况我们只需要输入1’ -- qwe 让其闭合然后利用union联合查询语句进行依次爆破,order by 语句二分法判断其列数

其在页面上有明显的回显点

POST注入

POST注入一般为表单形式,即登录框各种框

需要用到万能密码 a’ or 1=1 -- qwe

Or 1=1 后面利用order by 函数判断列数

登陆后将or 1=1改为union然后联查

union select 1,2,3 即可看到其回显点 然后依次爆破

HEAD头注入

HEAD注入使用的是报错注入,页面上没有明显的回显点

利用XPATH报错进行注入

通常用到updatexml(目标xml内容,xml文档路径,更新的内容)此函数

updatexml(1,concat(‘,(select database())),1)

利用了此函数让其MYSQL数据库报错,回显到页面上

可配合谷歌浏览器modheader插件,修改头部

宽字节注入

宽字节注入是开发者使用了魔术手的功能,导致我们做闭合时,引号被转义符号转义掉了

通常情况下我们可以利用%df的URL编码,与后面的转义符号进行组合,将其组合为汉字,使其转义符号失效

在爆破到其表名库名时,出现了逢引号就转义,导致我们没有办法继续查询的时候

可以用两种方法

第一种,替代法,利用子查询将我们引号的地方替换掉

union select 1,2,column_name from information_schema.columns where table_schema=database() and table_name=(select table_name from information_schema.tables where table_schema=database() limit 0,1)

正常情况我们加粗部分填写的是表名,但是因为转移符号的原因,用替代法替换成子查询

第二种方法

将目标名称转换成16进制,即可

在遇到宽字节与POST组合时

我们发现%df失效了,因为POST方式没有URL编码,无法使用此方法

所以两种办法 第一种,登录框内输入万能密码,多加一位字母

通常为:a’ or 1=1 -- qwe

我们改为aa’ or 1=1 -- qwe

使用BURP抓包

然后找到我们的输入点,点开hex界面

我们会发现我们输入的东西转化为的16进制表

修改第二个a的地方,将其改为df

即可避开转移符号

第二种方法,传参数为汉字

') or -- qwe

这也可以避开转义符号

盲注

盲注是页面没有回显点,返回错误或者正确我们要考虑的

分为布尔型盲注,时间型盲注

布尔型盲注

布尔型盲注是根据页面返回正确或者错误来猜解数据库

用到了

Length()

Ascii()

Substr()

函数

比如SQL语句为

select *from news where id=1

但是页面只返回有没有,没有回显点

那么我们要通过函数来判断猜解数据库

比如

length(database())>10

来判断数据库名称长度

Ascii(substr(database()1,1))>100

来判断截取的数据库名称的ascii码值是否大于100

Substr(字符串,从哪开始截取,截取多少)

布尔盲注和POST组合型

换了一个传参方式,然后利用万能密码猜解数据库

(用BURP跑包,因为猜解数据量较大)

时间型盲注

和布尔型盲注差不多,主要是用到了if函数

if(1,2,3)

sleep()

如果1成立,就执行2,不成立执行3

配合sleep函数

if(length(database())>10,sleep(5),6)

如果数据库名字长度大于10,就挂起5秒