SQL注入漏洞--1

sql注入漏洞概述

在owasp发布的top10漏洞里面,注入漏洞一直是危害排名第一,其中主要指SQL注入漏洞。

数据库注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄漏的一种漏洞。

sql注入漏洞攻击流程

第一步:注入点探测

自动方式:使用web漏洞扫描工具,自动进行注入点发现

手动方式:手工构造sql注入测试语句进行注入点发现

第二步:信息获取

通过注入点取期望得到的数据

 1. 环境信息:数据库类型,数据库版本,操作系统版本,用户信息等。
 2. 数据库信息:数据库名称,数据库表,表字段,字段内容(加密内容破解)。

第三步:获取权限

获取操作系统权限:通过数据库执行shell,上传木马。

sql注入漏洞常见注入点类型

数字型:user_id=$id

字符型:user_id=‘$id’

搜索型:text LIKE ‘%{$_GET[‘search‘]}%’ “0

1、数字型注入

当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入。

测试步骤:

(1) 加单引号,URL:www.text.com/text.php?id=3

对应的sql:select * from table where id=3’ 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;

(2) 加and 1=1 ,URL:www.text.com/text.php?id=3 and 1=1

对应的sql:select * from table where id=3’ and 1=1 语句执行正常,与原始页面如任何差异;

(3) 加and 1=2,URL:www.text.com/text.php?id=3 and 1=2

对应的sql:select * from table where id=3 and 1=2 语句可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异

如果满足以上三点,则可以判断该URL存在数字型注入。

2、字符型注入

当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。

例如数字型语句:select * from table where id =3

则字符型如下:select * from table where name=’admin’

因此,在构造payload时通过闭合单引号可以成功执行语句:

测试步骤:

(1) 加单引号:select * from table where name=’admin’’

由于加单引号后变成三个单引号,则无法执行,程序会报错;

(2) 加 ’and 1=1 此时sql 语句为:select * from table where name=’admin’ and 1=1’ ,也无法进行注入,还需要通过注释符号将其绕过;

Mysql 有三种常用注释符:

-- 注意,这种注释符后边有一个空格

# 通过#进行注释

/* */ 注释掉符号内的内容

因此,构造语句为:select * from table where name =’admin’ and 1=1—’ 可成功执行返回结果正确;

(3) 加and 1=2— 此时sql语句为:select * from table where name=’admin’ and 1=2 –’则会报错

如果满足以上三点,可以判断该url为字符型注入。

搜索型注入

1.搜索型注入漏洞产生的原因:

  在搭建网站的时候为了方便用户搜索该网站中的资源,程序员在写网站脚本的时候加入了搜索功能,但是忽略了对搜索变量的过滤,造成了搜索型注入漏洞,又称文本框注入。

2.搜索型注入的类型:

  同其他注入类型相同,由于提交表单的不同,可分为GET型(多出现于网站上的搜索)和POST型(多出现于用户名的登录搜索匹配),搜索型注入是国内系统中普遍存在的漏洞。

3.原理分析:

 select username,id,email from member where username like '%$name%'

这句SLQ语句就是基于用户输入的name的值在表member中搜索匹配username,但是如果输入 'and 1=1 and '%'=' 就变成了

 select username,id,email from member where username like '%$name'and 1=1 and '%'='%'

就存在了SQL注入。

4.搜索型注入的判断方法:

1 搜索keywords‘,如果出错的话,有90%的可能性存在漏洞;

2 搜索 keywords%,如果同样出错的话,就有95%的可能性存在漏洞;

3 搜索keywords% 'and 1=1 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=1)看返回的情况

4 搜索keywords% 'and 1=2 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=2)看返回的情况

5 根据两次的返回情况来判断是不是搜索型文本框注入了

下面方法也可以测试

 'and 1=1 and '%'='
 ​
 %' and 1=1--'
 ​
 %' and 1=1 and '%'='

因为在SQL注入测试中,需要经常对多余的内容进行消除,以保证SQL语句语法正确,比如上面的# 使用注释符号直接对多余内容进行注释是比较有效的方法。

MySQL服务器支持3种注释: 从'#'字符从行尾。 从'--'序列到行尾。请注意'--' (双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格、 tab、 换行符等等)。 该语法与标准SQL注释语法稍有不同. 从/* 序列到后面的 */序列。结束序列不一定在同一行中,因此该语法允许注释跨越多行。 下面的例子 显示了3种风格的注释:

image-20211023181900109

注入方式get&post区别

get方式中使用URL提交注入数据;

post方式中使用抓包工具修改post数据部分提交注入;

不管是get方式还是post方式,都可能会出现SQL注入漏洞,本质其实是一样的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zavier-0.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值