SQL注入测试工具:Pangolin(穿山甲)
第一章、简介
1.1 Pangolin是什么?
Pangolin是一款帮助渗透测试人员进行Sql注入测试的安全工具。
所谓的SQL注入测试就是通过利用目标网站的某个页面缺少对用户传递参数控制或者控制的不够好的情况下出现的漏洞,从而达到获取、修改、删除数据,甚至控制数据库服务器、Web服务器的目的的测试方法。
Pangolin能够通过一系列非常简单的操作,达到最大化的攻击测试效果。它从检测注入开始到最后控制目标系统都给出了测试步骤。
过去有许多Sql注入工具,不过有些功能不完全,支持的数据库不够多,或者是速度比较慢。但是,在Pangolin发布以后,这些问题都得到了解决。Pangolin也许是目前已有的注入工具中最好的之一。
1.2 使用Pangolin可以用来做什么
如下是一些示例:
- 渗透测试人员用于发现目标存在的漏洞并评估漏洞可能产生后果的严重程度
- 网站管理员可以用于对自己开发的代码进行安全检测从而进行修补
- 安全技术研究人员能够通过Pangolin来更多更深入的理解SQL注入的技术细节
1.3 特色
如下是Pangolin提供的一部分特点:
- 全面的数据库支持
- 独创的自动关键字分析能够减少人为操作且更判断结果准确
- 独创的内容大小判断方法能够减少网络数据流量
- 最大话的Union操作能够极大的提高SQL注入操作速度
- 预登陆功能,在需要验证的情况下照样注入
- 代理支持
- 支持HTTPS
- 自定义HTTP标题头功能
- 丰富的绕过防火墙过滤功能
- 注入站(点)管理功能
- 数据导出功能
- ……等其他更多
1.4 它不能做什么
Pangolin只是一个注入验证利用工具,不是一个Web漏洞扫描软件。因此您不能用它来做整网站的扫描。
另外,他也不支持注入目录遍历等功能,这些功能您可以借助其他的安全工具进行。
1.5 到哪里获取Pangolin
Pangolin的更新速度很快,你可以经常到http://www.nosec.org/web/pangolin去下载最新版本。
1.6 运行环境
目前Pangolin只能运行在Windows系统平台,支持32位/64位Windows NT/2000/XP/2003/Vista/2008。
支持的数据库类型
数据库类型 | 目标信息获取 | 其他 |
MS SQL | 服务器版本、服务器名称、数据库名称、当前用户、当前用户权限、数据库列表 | 执行系统命令、读取注册表、读文件、写文件、下载远程文件、导出数据到指定的数据库服务器 |
Oracle | 版本信息、IP地址、当前用户、当前会话权限、主机名、实例名称、用户帐号信息、外部IP地址 | 帐号破解、注入提权(adding)、远程数据存储读取 |
Mysql | 版本、GPC判断、数据库列表、临时目录、当前用户、操作系统信息、用户帐号 | 读文件、写文件 |
Access | 数据库路径、根目录、磁盘信息 | 只能暴力 |
PostgreSQL | 版本信息、数据库、当前用户、当前会话用户、端口、数据路径、搜索路径 | 读文件 |
DB2 | 版本信息、数据库、当前用户、操作系统名称、操作系统版本、主机名称 | …… |
Sybase | …… | …… |
Informix | …… | …… |
Sqlite | …… | …… |
1.7 报告问题和获取帮助
如果您在使用过程中有任何的意见或者建议,您可以到http://www.nosec.org网站上进行评论留言,这里会有一群共同兴趣的朋友帮助您。或者您可以直接给我发送邮件:zwell@sohu.com。
第二章、用户界面
下图为主界面图
如上图所示,我们可以看到Pangolin的主界面是很简单明了的,它分为几个区域:
- 最上面的是注入控制区域,在这里您可以进行一些注入参数设置,以及通过点击按钮进入到高级配置界面;
- 中间的一大块区域为数据显示区域,用于显示注入获取的数据已经进行针对不同数据库的高级注入操作;
- 下面有日志信息区还有状态栏区,能够告诉您当前的工作状态信息。
下面我们就这些控件进行详细的说明:
2.1.1 URL输入框
在这里输入待测试目标的URL地址,
注意,该URL地址必须是携带参数的格式,例如http://www.site.com/news.asp?id=100这样的格式。
2.1.2 注入方式选择框
HTTP常用的数据传输方法有GET和POST方式,通常情况下,请求数据用GET方式,传递数据用POST方式。如果服务器端代码处理GET和POST参数的操作是一致的话(JSP编程中经常可以见到),那么通过GET和POST传递参数的效果是一样的。这时使用POST可以避免服务端日志的产生。
另外需要注意的是,如果待测参数是通过表单传递,那么您需要进行地址拼接。假设参数传递的目标地址为http://www.site.com/login.asp,参数分别为username和password,那么测试时,您需要在URL输入框中输入http://www.site.com/login.asp?username=aa&password=bb这样的格式,并且将注入方式设置成POST。
普通模式下,我们建议您使用GET方式。
2.1.3 注入控制按键
Pangolin的注入过程采用了多线程的方式,您在注入过程中随时可以进行暂停/继续操作和停止操作。
在您输入了待测试目标的URL后,您可以点击Check进行扫描操作,这时Check按键变灰,Pause和Stop按键变为可用,这时您就可以进行暂停或中止操作了。
这里提醒您一点,在后面我们提到的所有的操作,无论是猜解数据也好,高级功能操作也好,在操作过程中,您随时可以暂停或者中止,但是Check按键只能用于注入扫描。
2.1.4 注入类型选择框
扫描不同的参数类型我们将注入类型分为interger和String还有Search型。分别对应数值型,字符型还有搜索型。在扫描到注入点以后,该选择框将自动选择对应的注入类型。
在注入前,如果我们已知了某个参数的注入类型,那么我们可以先从该下拉框中选择合适的值,这样能够缩短注入扫描的时间。
2.1.5 数据库类型选择框
顺便提及一点:SQL注入是跟数据库强相关的,而不是页面的代码语言,这一点许多文章都误导了读者。我们看到什么asp注入,php注入,jsp注入之类的概念都是不正确的。而应当说是MSSQL注入,Mysql注入或者Oracle注入等等。
在这个选择框中指明了目标Web连接的数据库类型。在扫描到注入点以后,该选择框将自动选择对应的数据库类型。
在注入前,如果我们已知了目标的数据库类型,那么我们可以先从该下拉框中选择合适的值,这样能够缩短注入扫描的时间。
2.1.6 关键字输入框
什么叫关键字呢?在自动化工具的测试过程中,如果目标针对不同的注入语句进行了错误提示的话那么程序能够知道这是一个典型的错误,然后就能够提取信息。但是如果页面返回的结果中并没有带有明确的错误提示信息的话,那么程序将无法判断哪一种情况下是正常页面哪一种情况下是错误页面。因为,测试人员需要手动的告之程序一个正常的页面或者错误的页面有什么特殊字符串能够标明,这时候您就需要在这里输入这个字符串了。
在其他的一些注入工具中,如果测试人员没有输入关键字的话是无法进行测试的,但是在Pangolin中我独创了自动分析关键字的功能,它能够让你在不干预的情况下自动的分析关键字从而更扫描出漏洞。
在2.2节中,我们将给您描述如何启用或者关闭该功能。
2.1.7 配置按钮
Options按钮将带您进入到一些全局参数的配置界面中,这一部分我们将在下一节中为您详细介绍。
2.1.8 扫描状态重置按钮
如果您在完成了一次对某个URL的注入操作以后,还想对另一个URL进行扫描操作,那么建议您点击一下该按钮,从而将扫描注入的全局状态清空。
2.1.9 注入点手工配置按钮
本按钮属于高级选项,通常不建议您点击进行配置的修改。具体用途待整理。
好了,如果您进入了本界面,说明您已经知道如何点击"Options"按钮了,那么恭喜 ;)先看看如下界面图:
从上图可以清楚的看到,配置界面中包含四大部分:
2.2.1 HTTP标题头编辑界面
在本界面中,您可以完全自定义HTTP标题头域的字段,如最常用的User-Agent和Cookie标题头,通常你需要知道一些特定含义的字符串。
这里也做一个简单的说明:User-Agent可以用来进行客户端伪造,您知道为什么很多情况下Google能返回某些正文而我们去请求时需要我们登录吗?原因很简单,网站为了自身更好的推广,所以针对Google的robots开放了通行证,所以我们就可以利用这种关系进行更深入的工作。而对于Cookie标题头而言,它的作用更明显了,说直白一点,它是我们身份的象征。一些站点需要先登录才能进行注入(如管理后台的页面),其他的一些注入工具需要你手动输入或者让你手工输入登录界面的参数字段来进行。但是在Pangolin中,您可以直接点击以下按钮来完成这些生涩的操作。
除此之外,你也可以自定其他一些个性化的标题头。
2.2.1.1User-Agent选择按钮
这个按钮的功能显而易见,Pangolin预置了一些最常见的Web浏览器的客户端类型以及搜索引擎的类型,在点击按钮以后,您可以直接选择一个作为您注入时使用的对象,这样您就能伪造客户端类型了。
2.2.1.2 预登录界面
2.2.2 代理配置界面
2.2.3 注入扫描参数配置界面
2.2.4 高级参数配置界面
2.2.5 注入数据管理界面
第三章、基本的操作步骤
3.1 开始注入
- 启动Pangolin
- 在URL输入框中输入待测试的URL地址,注意该地址是携带参数的格式
- 点击Check
- 如果在注入数据库中已经存在了该网站的某个注入点的话,那么您将会看到如下的对话框:
- 如果你想使用已经存在的注入点,那么选中一个并点击Use this按键;
- 如果您不需要的话,直接点击Cancel按键继续。
- 好了,如果您足够幸运的话,您应该看到注入类型和数据库类型都已经获取到了,
- 那么恭喜,我们可以进入下面的一些操作步骤,如下图所示,目标系统采用的是Mysql数据库,那么除了最基本的Information和Datas标签页以外还会有FileReader和MySqlFileWriter分别可以用于读写文件,本章将只关注基本的操作,其他内容将放入到下一章进行说明:
3.2 获取基本的信息
- 切换到Information标签页
- 我们可以看到里面有一些选项可以选择,选中您想获取的信息,如果您不想挨个点击的话,可以直接点击Select All按钮
- 点击Go按钮
- 相信你应该可以看到Pangolin返回了这些信息;)
3.3 获取表
- 切换到Datas标签页
- 点击Tables按键,开始您的获取表清单之旅
- 下图是获取数据表后的截图:
3.4 获取列
- 在您想获取列结构的表上点击,选中表(很多朋友以为要获取列需要勾上前面的选择框,其实在这一步是不需要的)
- 这时Columns按键将会变为可用
- 点击Columns按键,如下是可能的结果图:
3.5 获取数据
- 在左边的表和列树形选择视图中选择要获取数据的表及其对应的列,注意一次只能针对一个表进行,在您点击一个列后,右边的数据视图会相应的增加该列
- 这时Datas按键变为可以
- 在1=1那个输入框中输入您自定义的获取数据的条件表达式,如果你不清楚是什么或者想获取所有数据的话,你直接保留不动即可
- 点击Datas按键,Pangolin将会进行数据的猜,如下图为可能的结果图:
3.6 保存数据
您可以直接点击Save按键保存当前获取的数据。
四、贡献者列表(Contributors)
在Pangolin的开发过程中,得到了许多朋友的支持和帮助,这里特别要感谢如下人员:
- SuperHei <SuperHei@ph4nt0m.org>
- Trace <tr4c3@126.com>
- kj021320 <kj021320@gmail.com>
- 4ngle <4ngel@21cn.com>
- 鬼仔 <guizaicn@gmail.com>
- 牛博明 <phproot@gmail.com>
- 趙桂德 <zgdwyjsl@gmail.com>
- 傲少 <kankanwo@gmail.com>
- hiicome <hiicome@qq.com>