|
原文链接:Web安全(三)sqlmap自动化攻击[一]
1、简介
一款功能强大集成了多种数据库识别及注入方式,多用于识别和利用 Web 应用程序注入漏洞的工具。
sqlmap支持五种不同的注入模式:
1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4、联合查询注入,可以使用union的情况下的注入。
5、堆查询注入,可以同时执行多条语句的执行时的注入。
2、安装及靶场
Python黑客攻防(六)安装sqlmap及创建sqlmap快捷方式
靶场环境安装见历史文章
3、参数详解
- -u 指定目标URL (可以是http协议也可以是https协议)
-
- -d 连接数据库
- --proxy(重要)
- 允许 sqlmap 的请求都通过我们设置的 proxy 进行发送,
- 可以隐藏自身 IP 地址和绕过 IP 限制。
-
- --tor, --tor-port, --tor-type
- 通过配置 Tor Client 以及 Privoxy,可以启用 –tor 选项。
- 该选项可使sqlmap 的请求通过 Tor 网络进行发送,以达到匿名的目的。
- 同时,我们还可以通过 --tor-port 以及 --tor-type 设置所使用的的 Tor Proxy 类型。
- --check-tor
- 检测 Tor 网络是否配置且连接正常
- --dbs 列出所有的数据库
-
- --current-db 列出当前数据库
-
- --tables 列出当前的表
-
- --columns 列出当前的列
-
- -D 选择使用哪个数据库
-
- -T 选择使用哪个表
-
- -C 选择使用哪个列
-
- --dump 获取字段中的数据
-
- --batch 自动选择yes
-
- --smart 启发式快速判断,节约浪费时间
-
- --forms 尝试使用post注入
-
- -r 加载文件中的HTTP请求(本地保存的请求包txt文件)
-
- -l 加载文件中的HTTP请求(本地保存的请求包日志文件)
-
- -g 与google hacking联合调用,对有GET参数的URL测试
-
- -o 开启所有默认性能优化
-
- --tamper 调用脚本进行注入(多个脚本的时候,脚本之间用逗号隔开)
- --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
-
- -v 指定sqlmap的回显等级
- 0 :只显示 python 的 error 和 critical 级别的信息
- 1 :显示 information 和 warning 级别的信息
- 2 :显示 debug 级别的信息
- 3 :额外显示注入的 payload (很有用,测试过程的记录)
- 4 :额外显示 HTTP 请求内容
- 5 :额外显示 HTTP 响应头
- 6 :额外显示 HTTP 响应页面内容
-
- --delay 设置多久访问一次
-
- --os-shell 获取主机shell,一般不太好用,因为没权限
-
- -m 批量操作
-
- -c 指定配置文件,会按照该配置文件执行动作
-
- -data data指定的数据会当做post数据提交
-
- -timeout 设定超时时间
-
- --level 设置注入探测等级
- level有5个等级,默认等级为1。
- 进行Cookie测试时使用--level 2。
- 进行use-agent或refer测试时使用--level 3。
- 进行 host 测试时使用--level 5
- --level 5包含的payload最多,会自动破解出cookie、XFF等头部注入,
- 相对应他的速度也比较慢。
- --risk 风险等级
- 内容 risk 级别升高会加 or 和 Update 可能对数据库表内容进行修改。
- 往往不是我们所期望的,所以谨慎使用。
-
- --identify-waf 检测防火墙类型
-
- --param-del="分割符" 设置参数的分割符
-
- --skip-urlencode 不进行url编码
-
- --keep-alive 设置持久连接,加快探测速度
-
- --null-connection 检索没有body响应的内容,多用于盲注
-
- --thread 最大为10 设置多线程
- --user-agent["设置用户代理"]
- --cookie["设置cookie"]
- --file-write,--file-dest上传文件并重新命
- --file-read读取目标服务器文件
复制代码
4、基本步骤
- python sqlmap.py -u ["URL"] //测试是否存在注入
- python sqlmap.py -u ["URL"] -current-db //查询当前数据库
- python sqlmap.py -u ["URL"] -D ["数据库名"] --tables //查询当前数据库中的所有表
- python sqlmap.py -u ["URL"] -D ["数据库名"] -T ["表名"] --columns //查询指定库中指定表的所有列(字段)
- python sqlmap.py -u ["URL"] -D ["数据库名"] -T ["表名"] -C ["列名"] --dump //打印出指定库中指定表指定列中的字段内容
复制代码
靶场演示
get
post
- python sqlmap.py --cookie ["cookie"] -u ["URL"] //测试是否存在注入
- python sqlmap.py --cookie ["cookie"] -u ["URL"] -current-db //查询当前数据库
- python sqlmap.py --cookie ["cookie"] -u ["URL"] -D ["数据库名"] --tables //查询当前数据库中的所有表
- python sqlmap.py --cookie ["cookie"] -u ["URL"] -D ["数据库名"] -T ["表名"] --columns //查询指定库中指定表的所有列(字段)
- python sqlmap.py --cookie ["cookie"] -u ["URL"] -D ["数据库名"] -T ["表名"] -C ["列名"] --dump //打印出指定库中指定表指定列中的字段内容
复制代码
|
|