hvv面试常见漏洞之SQL注入

大致将从原理、类型、攻击代码、绕过、防御、告警分析这几个方面来进行阐述

1.  sql注入

1.1  原理

前后端对于用户的输入过滤不严格,导致拼接了恶意的SQL 语句,这些恶意SQL被数据库执行之后,造成信息泄露、信息篡改、网页挂马等危害。

1.2  类型

常见的类型有:联合注入、报错注入、宽字节注入、堆叠注入、时间型盲注、布尔型盲注等

1.2.1  联合注入

详解:sql注入中的联合注入-CSDN博客

关键字: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  绕过方式

详解:sql注入各种绕过_sql绕过-CSDN博客

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  危害

数据库信息泄露

网页挂马

篡改数据库数据

提权等

注:本人也是小白一枚,如果错误之处跪请各位大佬指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值