
Sqlmap 是一个开源渗透测试工具它自动检测和利用 SQL 注入缺陷并接管数据库服务器。它配备了一个强大的检测引擎为终极渗透测试器提供了许多小众功能还有一系列广泛的开关从数据库指纹识别、从数据库获取数据到访问底层文件系统和通过带外连接在操作系统上执行命令。01注入原理SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求查询的字符串,最终达到欺骗服务器执行恶意的SQL命令。注入举例假设一个虚拟接口获取团队信息的接口http://www.baidu.com/api/groups?groupid13634服务端的SQL查询语句可能是“select * from groups where groupid13634”。假如把接口改为http://www.baidu.com/api/groups?groupid-1’or ‘1’’1如果服务端没有对传入的参数做校验就会执行这样一条SQL查询语句“select * from groups where groupid-1 or 11”。由于这里控制groupid-1的条件为假11的条件为真那这条SQL语句执行之后会把groups表内所有的数据都查询出来如果接口返回没有控制就会出现把所有的数据返回的现象。其他注入手法上面举的例子属于最常见SQL注入手段其实还有很多例如注入SQL关联操作、注入注释符号#绕过验证、注入删除恶意操作、资源枚举等。一般来说SQL注入是层层递进的攻击者可以利用服务端返回的任何有效信息特别是不引人注意的错误信息来进行下一步的攻击。有些还可以根据数据库的特性来获取数据库的信息比如MySQL数据库自带的information_schema数据库就提供了当前mysql实例中所有数据库的信息一旦攻击者可以获取到这个数据库的信息那么意味着整个MySQL中的数据库都已经暴露了。02sqlmap常用命令-u 指定目标url–batch是让sqlmap自动选择执行过程中出现的询问请求如果存在注入。自动选择yes–headers 额外的headers–level 指定测试的等级(1-5 默认为1)–dbms 指定具体DBMS–dbs 枚举DBMS所有的数据库–technique 指定sql注入技术(默认BEUSTQ)sqlmap.py -u https://xxx/xxx/api/v1/xxx?xxx1* --headers Cookie: csrftokenasdfadfadfasdfaa; sessionid4adfadfasdfadfadsgawe23 --batch --level 3 --dbms PostgreSQL --dbs --technique B03环境搭建1、安装Python环境Python2.7以上版本都可以2、安装Git3、拉取Sqlmap的代码在git的bash中输入 git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev4、WinR cmd进入命令提示符使用cd命令进入Sqlmap代码根目录输入python sqlmap.py -h回车输出帮助信息则表示已经可用。或者使用pycharm等集成开发平台打开此项目直接在其下的Terminal输入python sqlmap.py -h。04demo案例样本1get接口 URLhttps://www.baidu.com/api/groups?groupid13634 cookiewps_sid123456 输入命令python sqlmap.py -u “URL” --cookie“cookie” --batch样本2post接口 URLhttps://www.baidu.com/api/v3/groups/51183/files/351748 cookiewps_sid123456 body:{“fname”:“我的团队”} 输入命令python sqlmap.py -u “URL” --cookie“cookie” --data“body” --batch输入后回车查看结果如下图结果分析All tested parameters do not appear to be injectable——所有测试的参数似乎都不是可注入的且返回的状态码均为4XX说明对该接口的请求均失败了以上结果均说明该接口通过了sql的注入测试05参数详解基本选项-h 查看基本帮助-hh 查看详细帮助–version 查看sqlmap版本-v LEVEL 扫描详细级别LEVEL取值0-6默认为1目标选择-u URL 指定测试URL–urlURL 指定测试URL同上-m FILE 批量接口注入FILE为本地保存了多个接口的.txt文件路径一行一个URL-l FILE 批量接口注入FILE为本地保存了多个接口的文件路径接口间用分隔符分割请求设置–dataDATA 指定post接口的body–cookieCOOKIE 指定接口的cookie–random-agent 使用随机选择的HTTP User-Agent标头值–proxyPROXY 指定接口的代理–tor 使用Tor匿名网络–check-tor 检查Tor是否正确使用注入设置-p TESTPARAMETER 指定测试接口的某几个参数–dbmsDBMS 指定测试的数据库类型枚举注入-a 检索所有内容–current-user检索数据库当前用户–current-db检索当前数据库–passwords枚举数据库用户密码哈希值–tables枚举数据库表–columns枚举数据库表列–schema枚举数据库架构–dump查询出某个数据库下所有数据表的数据–dump-all查询出所有数据库下所有数据表的数据-D DB 查询指定的数据库的数据-T TBL 查询数据库中指定的表数据-C-要枚举的COL 查询数据库中指定的表列数据其他设置–batch 自动选择默认选项不需要用户输入–smart 智能判断选择只有在积极启发式的情况下进行彻底测试