安全测试|SQLMap渗透扫描工具

Sqlmap 是一个开源渗透测试工具,它自动检测和利用 SQL 注入缺陷,并接管数据库服务器。它配备了一个强大的检测引擎,为终极渗透测试器提供了许多小众功能,还有一系列广泛的开关,从数据库指纹识别、从数据库获取数据,到访问底层文件系统和通过带外连接在操作系统上执行命令。

01注入原理

SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求查询的字符串,最终达到欺骗服务器执行恶意的SQL命令。

注入举例

假设一个虚拟接口获取团队信息的接口

http://www.baidu.com/api/groups?groupid=13634,

服务端的SQL查询语句可能是

"select * from groups where groupid=13634"。

假如把接口改为

http://www.baidu.com/api/groups?groupid=-1'or '1'='1,

如果服务端没有对传入的参数做校验,就会执行这样一条SQL查询语句"select * from groups where groupid=-1 or 1=1"。由于这里控制groupid=-1的条件为假,1=1的条件为真,那这条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?xxx=1*" --headers "Cookie: csrftoken=asdfadfadfasdfaa; sessionid=4adfadfasdfadfadsgawe23" --batch --level 3 --dbms PostgreSQL --dbs --technique B

03环境搭建

1、安装Python环境,Python2.7以上版本都可以

2、安装Git

3、拉取Sqlmap的代码,在git的bash中输入 :

git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

4、Win+R cmd进入命令提示符,使用cd命令进入Sqlmap代码根目录,输入:python sqlmap.py -h,回车,输出帮助信息则表示已经可用。

或者使用pycharm等集成开发平台打开此项目,直接在其下的Terminal输入:python sqlmap.py -h。

04demo案例

复制代码
样本1:get接口
URL:https://www.baidu.com/api/groups?groupid=13634
cookie:wps_sid=123456
输入命令:python sqlmap.py -u "URL" --cookie="cookie" --batch

样本2:post接口
URL:https://www.baidu.com/api/v3/groups/51183/files/351748
cookie:wps_sid=123456
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

--url=URL 指定测试URL,同上

-m FILE 批量接口注入,FILE为本地保存了多个接口的.txt文件路径,一行一个URL

-l FILE 批量接口注入,FILE为本地保存了多个接口的文件路径,接口间用分隔符分割

  • 请求设置

--data=DATA 指定post接口的body

--cookie=COOKIE 指定接口的cookie

--random-agent 使用随机选择的HTTP User-Agent标头值

--proxy=PROXY 指定接口的代理

--tor 使用Tor匿名网络

--check-tor 检查Tor是否正确使用

  • 注入设置

-p TESTPARAMETER 指定测试接口的某几个参数

--dbms=DBMS 指定测试的数据库类型

枚举注入:

-a 检索所有内容

--current-user检索数据库当前用户

--current-db检索当前数据库

--passwords枚举数据库用户密码哈希值

--tables枚举数据库表

--columns枚举数据库表列

--schema枚举数据库架构

--dump查询出某个数据库下所有数据表的数据

--dump-all查询出所有数据库下所有数据表的数据

-D DB 查询指定的数据库的数据

-T TBL 查询数据库中指定的表数据

-C-要枚举的COL 查询数据库中指定的表列数据

  • 其他设置:

--batch 自动选择默认选项,不需要用户输入

--smart 智能判断选择,只有在积极启发式的情况下进行彻底测试

相关推荐
怕浪猫4 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
高洁014 小时前
具身智能中的世界模型训练
人工智能·python·深度学习·机器学习·transformer
无线通信科研笔记4 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
朝朝辞暮i5 小时前
VLA 系统学习第 1 课:VLA 到底在干什么?
人工智能·python·计算机视觉·vla
2601_962885725 小时前
如何用 Python 自动识别股票的支撑位与压力位?
开发语言·python
北冥有鱼被烹6 小时前
VCSEL全景解析:与光模块NPO CPO的关系、市场量化分析与产业链影响
python
caoerzhong6 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
正在走向自律6 小时前
AI数据分析与可视化:从基础到应用实践
服务器·人工智能·python·机器学习·数据分析·pandas
databook7 小时前
从手动检查到自动监控:一个数据质量工作流的实现
后端·python·数据分析
北冥有鱼被烹9 小时前
砷化镓与磷化铟:光模块的地基——从化学键到AI缺货潮的底层逻辑
人工智能·python