大致将从原理、类型、攻击代码、绕过、防御、告警分析这几个方面来进行阐述
1. sql注入
1.1 原理
前后端对于用户的输入过滤不严格,导致拼接了恶意的SQL 语句,这些恶意SQL被数据库执行之后,造成信息泄露、信息篡改、网页挂马等危害。
1.2 类型
常见的类型有:联合注入、报错注入、宽字节注入、堆叠注入、时间型盲注、布尔型盲注等
1.2.1 联合注入
关键字:union
使用联合注入查询的步骤:
- 寻找网站注入点
点击也页面所有位置,都不能进行输入,只有在url中可以进行输入
- 确定使用的数据库类型
使用‘和’‘根据报错信息确定数据库类型,数据库类型为mysql数据库
- 使用联合注入查询的前提是union左右两边的前提是左右两边的列数相同,这里使用group by确定列数
说明列数为三列,我们就可以进行联合注入查询了
- 查库
http://sqli:82/Less-1/?id=-1' union select 1,2,(select database()) --+
- 查表
http://sqli:82/Less-1/?id=-1' union select 1,2, (select group_concat(table_name) from information_schema.tables where table_schema=database()) --+
- 查列
http://sqli:82/Less-1/?id=-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name = "users") --+
- 查数据
http://sqli:82/Less-1/?id=-1' union select 1,2,(select group_concat(username,0x3A,password,0x3C,0x68,0x72,0x2F,0x3E) from users) --+
0x3A 表示冒号 “ :”
0x3C,0x68,0x72,0x2F,0x3E 表示 <br\>
1.2.2 报错注入
详解:最详细的SQL注入之报错注入_sql报错注入-CSDN博客
关键字(函数):updatexml()、extravalue()、order by等可以让数据库产生报错的都可以
1.2.3 堆叠注入
关键字:分号 ;
举例:就是一次输入多个语句,用分号隔开
select * from user;select * from music;
1.2.4 时间型盲注
关键字:
length() 返回字符串的长度
ascii() 返回一个字符的ascii码值
mid() 取出字符串中的一部分值
substr() 截取字符串
hex() 返回16进制数
sleep() 时间注入的核心函数
sleep(1) 过1s相应
if() if判断函数
if(1=1,3,4) 返回3
if(1=2,3,4) 返回4
时间型盲注详解:时间型盲注_时间盲注-CSDN博客
1.2.5 布尔型盲注
关键字:
通过长度判断 length(): length(database())>=x
通过字符判断substr(): substr(database(),1,1) =‘s’
通过ascII码判断:ascii(): ascii(substr(database(),1,1)) =x
布尔型盲注详解与实战:布尔盲注(结合BurpSuite暴力破解)_布尔盲注手工-CSDN博客
1.2.6 宽字节注入
原理:
mysql 数据库在使用宽字节(GBK)编码时,会认为两个字符是一个汉字(前一个ascii码要大于128(比如%df),才到汉字的范围),而且当我们输入单引号时,mysql会调用转义函数,将单引号变为\’,其中\的十六进制是%5c,mysql的GBK编码,会认为%df%5c是一个宽字节,也就是’運’,从而使单引号闭合(逃逸),进行注入攻击。
宽字节注入详解:渗透测试-SQL注入之宽字节注入-CSDN博客
1.3 绕过方式
1.3.1 关键字绕过
1.3.1.2 大小写绕过
Union 替换 union; SElect替换select
1.3.1.3 双写绕过
ununionion替换union;seselectlect
1.3.1.4 编码绕过
如URLEncode编码,ASCII,HEX,unicode编码绕过
ascii编码绕过:1+and+1=2 1+%25%36%31%25%36%65%25%36%34+1=2
1.3.1.5 等价函数替换
sleep() -->benchmark()
1.3.2 特殊符号绕过
注释符号绕过
逗号绕过
空格绕过
尖括号绕过
单引号绕过等
1.4 防御
预编译、特殊符号过滤、关键字过滤
1.5 告警分析
看到告警首先要分析是否是误报,然后再判断是否攻击成功
误报:
首先看请求是从内网发起的还是外网发起的,如果是内网发起的,看是否是正常的业务请求,联系工作人员进行核查,从内网发起的如果不是正常的业务请求,那就很严重了,需要紧急处理,如果是从外网发起的,看请求包里是否存在SQL语句,如果没有则是误报。
是否成功:
看是否有回显,如果有回显,则看响应包中返回的数据是否是请求包中所要执行结果的内容返回,响应状态码是否为200;如果无回显,看设备中的时间字段和请求包中的延时时间对比(时间型),看响应包中的数据长度(布尔型)
1.6 危害
数据库信息泄露
网页挂马
篡改数据库数据
提权等
注:本人也是小白一枚,如果错误之处跪请各位大佬指正