SQLmap学习笔记
SQLmap参数学习笔记
文章目录
- SQLmap参数学习笔记
- 简介
- Options - 设置
- 显示等级
- Target - 目标
- 对POST请求进行注入
- HTTPS检测
- Request - 请求
- HTTP方法
- HTTP数据
- 参数分割符
- HTTP请求头
- cookie
- User-Agent
- Host
- Referer
- 额外的HTTP头
- HTTP协议身份认证
- 身份验证
- 私钥认证
- 忽略HTTP状态码
- HTTP(S)代理
- Tor匿名网络
- HTTP连接
- 请求延迟
- 连接超时
- 超时重连
- 随机更改给定参数的值
- 过滤目标
- 会话处理
- URL编码
- 执行Python代码
- 绕过反CSRF保护机制
- 强制使用SSL/HTTPS
- Optimization - 优化
- 一键优化
- 输出预测
- 会话保持
- 页面返回判断
- 空连接
- 并发请求
- Injection - 注射
- 指定测试参数
- URI注入点
- 任意注入点
- 指纹识别
- 指定数据库类型
- 指定操作系统
- 参数检测
- 使用大数字使值无效
- 使用逻辑运算使值无效
- 使用随机字符串使值无效
- 关闭payload转换机制
- 关闭编码逃逸
- 定制payload
- 篡改注入数据
- Detection - 侦查
- 侦查等级
- 风险
- 页面比较
- Techniques - 技巧
- SQL注入技术
- 时间盲注
- 联合查询
- DNS攻击
- 二阶攻击
- Fingerprint - 指纹
- Enumeration - 枚举
- 检索全部
- banner
- 数据库枚举
- 脱库
- Brute force - 暴力破解
- UDF injection - 自定义函数注入
- File system access - 文件系统访问
- Operating system access - 操作系统访问
- General - 常规参数
- Miscellaneous - 杂项
简介
SQLmap是开源SQL注入漏洞检测/利用工具
可以检测动态页面中的GET/POST参数/cookie/User-Agent/Reeferer
数据榨取
文件系统访问
操作系统命令执行
XSS漏洞检测
五种漏洞检测技术
- 基于布尔的盲注检测
- 基于时间的盲注检测
- ’ and (select * from (select(sleep(3)))a–+
- 基于错误的检测
- 基于UNION联合查询的检测
- 适用于通过循环直接输出联合查询结果,否则只显示第一项结果
- 基于堆叠查询的检测
- ;堆叠多个查询语句
- 适用于非SELECT的数据修改/删除的操作
Options - 设置
-h / --help >> 显示常用参数的帮助信息
-hh >> 显示所有参数的帮助信息
–version >> 显示版本号
-v >> 设置显示信息的详细级别0-6,默认为1
显示等级
- 仅显示python回溯,错误和严重消息
- 还显示信息和警告消息
- 还显示调试消息
- 还显示注入的payload
- 还显示HTTP请求
- 还显示HTTP响应的头
- 还显示HTTP响应的页面内容
-v代替-v 2,-vv代替-v 3,-vvv代替-v 4…
Target - 目标
-u / --url >> 指定目标URL地址
-d >> 连接数据库
- sqlmap -d “mysql://user:passwd@1.1.1.1:3306/dvwa”
-l >> 可以对Burp/WebScarab代理的log记录进行检测
-m >> 扫描txt文件中的多个目标
-r >> 从文件中读取HTTP请求(POST注入时)
-g >> 将google搜索的结果作为URL地址进行检测
-c >> 读取配置文件作为扫描参数
sqlmap默认配置文件
/etc/sqlmap/sqlmap.conf
sqlmap不会自动调用配置文件
使用-u参数时,最好将URL地址用双引号括起来
对POST请求进行注入
方法一:对Burp-Log进行检测
sqlmap -l proxy.txt
方法二:对txt文本中读取请求进行检测
sqlmap -r post.txt
方法三:使用--data
参数提交POST请求
sqlmap -u "http://192.168.1.4/mutillidae/index.php?page=user-info.php" --data="username=1&password=1&login-php-submit-button=Login"
HTTPS检测
当目标站点为HTTPS时使用
sqlmap -u "1.1.1.1/index.php?id=3" --force-ssl
Request - 请求
HTTP方法
--method
强制改变HTTP请求的方式
HTTP数据
--data
用于提交POST请求参数(也支持GET请求)
--data=“username=123&password=123”
参数分割符
--param-del
sqlmap默认识别的URL参数分隔符为&,使用该参数可以改变这个默认值
HTTP请求头
cookie
--cookie
设置请求头中的cookie信息
--cookie-del
设置用于分隔cookie的分隔符,默认以;分隔
--live-cookies
用于实时更新服务器返回的set-cookie值
--load-cookies
提供一个包含Netscape/wget格式的cookie的特殊文件
--drop-set-cookie
忽略响应中的set-cookie,默认情况下在扫描过程中发现服务器响应的set-cookie时,会提示是否更新该cookie
–level设置为2以上级别时,会对cookie注入进行检测
User-Agent
--user-agent
/ -A
设置user-agent头
sqlmap默认为user-agent为sqlmap/1.5.5.1#dev (http://sqlmap.org)
,容易被目标服务器过滤掉
--random-agent
设置一个随机的user-agent
kali中该字典位于/usr/share/sqlmap/txt/user-agents.txt
--mobile
通过user-agent将客户端模拟为手机客户端
–level设置3或以上级别时,会对uesr-agent头注入进行检测
Host
--host
设置请求头中host的值
–level=5时,会对host头进行检测
Referer
--referer
伪造referer头
–level>=3时,会对referer头进行检测
额外的HTTP头
--headers
/ -H
提供额外的请求头,每个头之间用换行符分隔
--headers="Host:1.1.1.1\nUser-Agent:aaaaaa\n"
这里的头区分大小写,如果写得不标准,sqlmap将使用默认值
HTTP协议身份认证
身份验证
--auth-type
指定HTTP协议中身份验证机制的类型 - Basic - Digest - NTLM
--auth-cred
设置HTTP登陆凭证(username:password)
sqlmap -u "http://192.168.1.4/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" -p id --auth-type=Basic --auth-cred="admin:password"
私钥认证
--auth-file
读取一个客户端证书和用于身份验证的私钥(PEM格式)
忽略HTTP状态码
--ignore-code
如果测试目标返回导致sqlmap运行出现问题的HTTP错误认证时,如401,可以忽略该站点并继续进行测试
HTTP(S)代理
--proxy
设置一个代理 - http://url:port
--proxy-cred
如果设置的代理需要身份验证,可以用该参数提交 - username:password
--proxy-file
从文件中读取代理列表
--ignore-proxy
忽略操作系统级别的代理服务(如局域网内测试时)
--proxy-freq
在给定的代理列表中使用不同的代理进行请求
Tor匿名网络
--tor
使用Tor作为代理服务器,需要先配置Tor客户端及代理软件(Privoxy等)
``–tor-port`
手动设置Tor代理的端口
--tor-type
手动设置Tor代理的类型 - SOCKS5(默认) - SOCKS4 - HTTP
--check-tor
检测tor代理是否配置正确
HTTP连接
请求延迟
--delay
每个HTTP(s)请求之间的延迟时间,单位:秒,浮点数,默认无延迟
连接超时
--timeout
请求超时时间,单位:秒,默认30秒,浮点数
超时重连
--retries
超时重连次数,默认3次
随机更改给定参数的值
--randomize
长度/类型与原始值保持一致前提下,指定每次请求随机取值的参数名
一些应用程序可能会过滤多次参数相同的请求
过滤目标
--scope
过滤日志内容,通过正则表达式筛选扫描对象
使用python正则表达式指定用于过滤所需主机的正则表达式
sqlmap -l burp.log --scope="(www)?\.target\.(com|net|org)"
会话处理
检测和盲注会产生大量失败请求,当达到一定值时,服务器端可能会中止会话(销毁session)
--safe-url
设置安全URL,即发送正常(非注入)的请求的目标URL
--safe-post
将POST数据发送到给定的安全URL地址
--safe-req
从文件加载并使用安全的HTTP请求
--safe-freq
设置一个频率N,每发送N次注入请求后,发送一次正常请求到安全URL
此时,sqlmap将在每个预定数量的请求中访问某个安全URL,而无需对其进行任何类型的注入
URL编码
--skip-urlencode
在RFC标准中,GET方法会对传输内容进行编码,但某些应用程序不遵守该标准,使用原始字符串提交数据,此时需要使用此开关
执行Python代码
--eval
每次请求前执行指定的python代码
每次请求更改或增加新的参数值(时间依赖/其他参数值依赖)
绕过反CSRF保护机制
--csrf-token
设置包含随机标记的隐藏值的名称,当网站为此类字段使用非标准名称的情况下,可以使用该参数
--csrf-url
可以从任意URL地址检索令牌值,如果目标URL最初不包含必需的令牌值,但需要从其他位置提取该令牌值时,可以使用该参数
--csrf-method
在访问CSRF令牌期间使用的HTTP方法
--csrf-retries
重试以进行反CSRF令牌检索,默认0次
强制使用SSL/HTTPS
--force-ssl
强制使用SSL/HTTPS请求
–skip-urlencode >> 跳过payload中的URL编码
–csrf-token= >> 保存反CSRF令牌的参数
–csrf-url= >> 提取反CSRF令牌的URL地址
–csrf-method= >> 在访问CSRF令牌期间使用的HTTP方法
–csrf-retries= >> 重试以进行反CSRF令牌检索,默认0次
–force-ssl >> 强制使用SSL/HTTPS
–chunked >> 使用HTTP分块传输请求编码(POST)
–hpp >> 使用HTTP参数污染方法
–eval= >> 在请求前评估python代码
当Level>=3时才会检测user-agent头和referer头注入
Optimization - 优化
一键优化
-o
直接打开所有的优化(–predict-output/–keep-alive/–null-connection)
输出预测
--predict-output
根据检测方法,将返回值的一些特征与sqlmap的统计表进行比对,以缩小检测的范围
统计表位置: txt/common-outputs.txt
版本名/用户名/密码/privileges/role/数据库名称/表名/列名
与–threads不兼容
会话保持
--keep-alive
使用http(s)长连接,避免重复建立连接的网络开销,但大量长连接会严重占用服务器资源
与–proxy不兼容
页面返回判断
空连接
--null-connection
只获取相应页面的大小值,而非页面具体内容
通常用于盲注判断真/假,可降低网络带宽消耗
–与text-only不兼容
一些特殊的HTTP请求类型,可用于获取HTTP响应的大小而无需获取HTTP正文,通常用于盲注中判断TRUE或FALSE,启用该参数后,sqlmap会尝试两种null连接技术(Range/HEAD),如果目标支持其中一种,则可以节省带宽,提升速度
并发请求
--threads
最大并发线程,默认值为1,建议不超过10
与–predict-output不兼容
Injection - 注射
指定测试参数
-p
当请求中有多个参数(GET/POST/cookie…)时,可以使用-p参数指定要测试的参数,而忽略其它参数
也可以绕过–level限制对cookie或user-agent头进行检测 -p “id,user-agent”
--skip
排除某些参数
--skip-static
排除静态参数
--param-exculue
基于正则表达式排除某些参数,如路过包含字符串token或session的参数 --param-exclude=“token|session”
--param-filter
按位置选择要测试的参数
URI注入点
在特殊情况下(伪静态),注入点位于URI路径中,如果不手动指出,sqlmap不会对URI路径进行检测,如果要检测URI时,需要在检测点后加上*号
sqlmap -u "http://1.1.1.1/apram/value*/param2/value2*/
任意注入点
*号也可以指向GET/POST/HTTP头中的任意注入点
sqlmap -u "http://1.1.1.1" --cokie="param1=value1*;param2=value2"
或者使用-p参数
sqlmap -u "http://test.dvwa.com/vulnerabilities/sqli/?id=1&Submit=Submit#" -p id
指纹识别
指定数据库类型
--dbms
默认情况下,sqlmap会自动检测目标数据库管理系统,如果无法检测出结果或在已知目标数据库的情况下,可以使用该参数指定目标数据库
指定操作系统
--os
指定操作系统
参数检测
使用大数字使值无效
--invalid-bignum
默认情况下,sqlmap在测试类似id=123的参数时,会使用负数来致使参数无效,使用该参数,可以强制使用大整数值为实现相同的结果(id=99999999)
使用逻辑运算使值无效
--invalid-logical
强制使用布尔运算来使参数无效(id=13 AND 1=2)
使用随机字符串使值无效
--invalid-string
强制使用随机字符串来使参数无效(id=asdfhb)
关闭payload转换机制
--no-cast
在检索结果时,sqlmap会将结果强制转换为字符串类型,并将NULL替换为空格
老版本mysql数据库需要开启此开关
关闭编码逃逸
--no-escape
默认情况下,payload中用单引号界定字符串时,sqlmap使用char()编码逃逸的方法替换字符串(当目标服务器过滤单引号时)
SELECT ‘foo’ --> SELECT CHAR(102)+CHAR(111)+CHAR(111)
该参数关闭此功能
定制payload
--prefix
自定义payload的前缀
--suffix
自定义payload的后缀
如:
$query = "SELECT * FROM users WHERE id=('".$_GET['id']."') LIMIT 0,1";
此时注入时需要在参数前后加上(‘及’)
sqlmap -u "http://1.1.1.1/1.php?id=1" -p id --prefix "')" --suffix "AND ('abc'='abc"
查询语句为:
$query = "SELECT * FROM users WHERE id=('1') <payload> AND ('abc'='abc') LIMIT 0,1;
篡改注入数据
--tamper
利用给定的脚本进行篡改注入数据,可在一定程序上绕过应用程序的敏感字符过滤/绕过WAF规则等
sqlmap自带了一些脚本,位于tamper/
下
Detection - 侦查
侦查等级
--level
共5个级别,1-5,默认为1,该参数影响使用的payload数量
风险
--risk
共3个级别,默认为1,多数情况下,该值是无害的
sqlmap使用的payload在xml/payloads.xml中可以修改
页面比较
--string
提供一个字符串,当查询结果为真时,用于在页面中匹配该字符串
--not-string
提供一个字符串,当查询结果为假时,用于在页面中匹配该字符口中
--regexp
通过正则表达式来代替上述功能
--code
匹配响应码
--text-only
仅针对页面中的文件内容进行比较
--titles
仅针对标题进行比较
Techniques - 技巧
SQL注入技术
--technique
默认情况下,sqlmap测试其支持的所有类型技术,使用该参数可以测试一种或几种特定的SQL注入技术
参数值为:
B - 基于布尔的盲注
E - 基于错误
U - 基于联合查询
S - 堆叠查询
T - 基于时间的盲注
Q - 内联查询
时间盲注
--time-sec
设置时间盲注时的延迟时间(单位秒,默认5秒)
联合查询
--union-cols
默认情况下,sqlmap进行UNION查询时,会查询1-10列,当--level
等级提高时,该数值会增加,最多为50列
使用该参数可以指定查询的列数(–union-cols=12-16)
--union-char
默认情况下,sqlmap使用null测试UNION查询,当--level
级别提高时,也将使用随机数测试(某些情况下,null会失败,随机数会成功)
使用该参数可以指定特定字符来进行查询(–union-char=abc)
--union-from
某些UNION查询时,需要在FROM子句中强制使用有效且可访问的表名(如Access)
DNS攻击
--dns-domain
当控制了某DNS服务器后,使用此功能可以提高数据榨取的速度
二阶攻击
--second-url
其中一个页面中注入的payload的结果在另一个页面中显示
搜索结果页面URL以获取二阶响应
--second-req
从文件中加载二阶攻击的HTTP请求
Fingerprint - 指纹
-f
/ --fingerprint
查询数据库的指纹信息
Enumeration - 枚举
检索全部
-a
/ --all
查询所有可查询的内容(会造成大量请求)
banner
-b
/ --banner
通过目标根据函数(如version())或环境变量(如@@version)的返回值判断目标的数据库版本信息
数据库枚举
--current-user
查询数据库当前用户
--current-db
查询当前数据库名称
--hostname
查询当前数据库主机名
--is-dba
检测当前会话用户是否为管理员帐户
--users
列出所有数据库用户(会话用户具有包含数据库用户信息表的读取权限)
--passwords
列出并破解数据库用户的密码
--privileges
列出数据库用户权限
-U
可以指定用户查询
--roles
列出数据库用户角色(仅目标数据库为Oracle时可用)
--dbs
枚举出所有数据库
--tables
枚举出数据库中所有表
-D
可以指定数据库
--exclude-sysdbs
可以排除所有系统数据库
当只指定表名没有指定库名时,默认使用当前数据库
--columns
枚举出所有列
-T
指定表名
-D
指定库名
-C
指定列名
--schema
枚举数据库架构如(mysql中的information_schema)
--exclude-sysdbs
仅包含非系统数据库的部分架构
--count
检索表中的数据数量
脱库
--dump
保存数据库中的内容
-T
- 指定表名
-D
- 指定库名
-C
- 指定列(多列以,号分隔)
--start
/ --stop
- 保存某个范围内的条目(一般用–count先查询条目总数)
--dump-all
保存所有数据库表条目
--exclude-sysdbs
- 排除所有系统数据库
--search
-C -T -D
搜索特定库名/表名/列名
--sql-query
/ --sql-shell
执行自定义SQL语句
Brute force - 暴力破解
--common-tables
暴力破解表名
当msyql版本低于5.0,(information_schema不可用)时
当数据库为Access(系统表MSysObjects不可读-默认)时
当会话用户没有读取权限时
该字典位于txt/common-tables.txt
--common-columns
暴力破解列名
UDF injection - 自定义函数注入
--duf-inject
--shared-lib
编译共享库创建并上传到DB服务器,以此生成UDF实现高级注入
linux - shared object
windows - DLL
File system access - 文件系统访问
--file-read
从数据库的文件系统中读取文件
--file-write
从数据库的文件系统中写入文件
--file-dest
要写入文件的绝对路径
Operating system access - 操作系统访问
--os-cmd
执行操作系统命令
当目标系统是linux,且数据库为mysql/postgresql时
该命令会上传两个动态链接库(sys_exec()/sys_eval())
当目标系统是windows,且数据库是mssql时
该命令会启用xp_cmdshell服务(有就用/禁了就启用/删除了就建)
--os-shell
获取目标操作系统shell
General - 常规参数
-s
指定sqlite会话文件的保存位置
-t
将HTTP流量记录保存到文本文件中
--charset
强制字符编码
--charset=GBK
--crawl
指定爬站深度,从起始位置开始计算
--batch --crawl=3
--batch
sqlmap在需要用户输入时以默认操作执行
--dbms-cred
指定数据库帐户(已知目标数据库帐户的情况下)
--flush-session
清空本地保存的session(再次对相同站点执行检测时重新向服务器发起检测请求,默认情况下是读取本地缓存)
--force-ssl
当目标站点是HTTPS时,使用该参数
--hex
以十六进制的格式dump数据,收到后解码还原
--output-dir
指定缓存目录
--save
将命令保存为配置文件中
--update
更新sqlmap
--check-waf
检测WAF/IPS/IDS
--hpp
绕过WAF/IPS/IDS
hpp - HTTP parameter pollution
对ASP/IIS和ASP.NET/IIS作用更大一些
--identify-waf
彻底的WAF/IPS/IDS检查
Miscellaneous - 杂项
--mobile
将user-agent修改为手机端的
--purge-output
将output文件夹清空
--smart
当有大量的检测目标时,只选择基于错误的检测结果
--wizard
向导模式
--alert
成功检测到SQL注入时发出警报
--beep
找到SQL注入时发出提示音
SQLmap学习笔记相关推荐
- 网络安全-sqlmap学习笔记
目录 介绍 命令参数 指定目标 直连数据库 服务型数据库(前提知道数据库用户名和密码) 文件型数据库(前提知道数据库绝对路径) URL探测 文件读取目标 Google dork注入 Http参数 设置 ...
- 2.羽翼sqlmap学习笔记之MySQL注入
1.判断一个url是否存在注入点: .sqlmap.py -u "http://abcd****efg.asp?id=7" -dbs 假设找到数据库:student ------- ...
- 4.羽翼sqlmap学习笔记之Post登录框注入
4.Sqlmap系列教程--post登录框注入 注入点: http://xxx.xxx.com/Login.asp 注入方式一: 1.对着注入点使用burp抓包,保存txt格式文件. 2.输入命令: ...
- Sqlmap学习笔记(叁)
https://blog.werner.wiki/sqlmap-study-notes-3/ 十五.操作系统控制 1.执行任意操作系统命令 参数:–os-cmd和–os-shell 若数据库管理系统是 ...
- IBatis.Net学习笔记六--再谈查询
在IBatis.Net学习笔记五--常用的查询方式 中我提到了一些IBatis.Net中的查询,特别是配置文件的写法. 后来通过大家的讨论,特别是Anders Cui 的提醒,又发现了其他的多表查询的 ...
- mybatis学习笔记(3)-入门程序一
2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...
- SQLMAP使用笔记
SQLMAP 使用笔记 --by Anton 0-请求注入检测 sqlmap可以使用基于布尔(bool).时间(time).语句是否执行 (页面返回时间是否增加).报错(err ...
- mybatis框架--学习笔记(下)
上篇:mybatis框架--学习笔记(上):https://blog.csdn.net/a745233700/article/details/81034021 8.高级映射: (1)一对一查询: ①使 ...
- mybatis框架--学习笔记(上)
使用JDBC操作数据库的问题总结: (1)数据库连接,使用时创建,不使用时立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能. 设想:使用数据库连接池管理数据库连接. (2) ...
最新文章
- tensor和模型 保存与加载 PyTorch
- 二叉树非递归先序遍历
- 《Science》重磅:终于完成了!迄今为止最完整的人类基因组
- Windows下 maven3.0.4的安装步骤+maven配置本地仓库(转载)
- pyrDown和pyrUp函数
- (转)创业需要知道的13句话
- delphi7存储过程传入数组_js数组方法reduce
- 人机协作机器人发展趋势_发那科童梁:机器人化不是时髦!有效的人机协作投资回报率更高...
- 基本数据类型与引用数据类型
- 制作卡通人物的3种简单方法
- 无法更新 EntitySet“Ips_Articles”,因为它有一个 DefiningQuery,而 ModificationFunctionMapping 元素中没有支持当前操作的 Inse...
- 如何在CSS中解决长英文单词的页面显示问题?CSS3
- 常见latch闩锁等待
- Mac和iPhone的浏览器接力功能。如何不利用safari接力。
- 深入了解 vue-cli
- 面对ICO乱象,这里有一份老猫的4000字投资指南
- 编译原理——语法制导翻译并产生中间代码(布尔表达式和控制语句)
- 钳形表校准典型校准方法
- puppeteer爬取豌豆荚数据
- 胶囊网络的理解:动态路由与聚类
热门文章
- GraphicsMagick 必要组件 jpeg-6b 安装
- python爬取抖音用户评论_python实现模拟器爬取抖音评论数据的示例代码
- 启动oracle时ORA-04031错误的一种解决方法
- Android Guideline基准线 | 学习笔记
- 查理·芒格的投资之道
- 图片分辨率如何修改?改图片分辨率的方法
- Excel表格中如何排名
- python 录音翻译_python实现带声音的摩斯码翻译实现方法
- 用Python做“电费计算.exe”,并保存数据到Excel
- 《图解HTTP》第七章个人学习