这些选项可用于自定义探测阶段
探测级别
--level= 要执行的测试级别(1-5,默认为1),数值越大,探测越详细
检查cookie当中的注入点level >=2
检查user-agent,Referer的注入点Level >= 3
检查host的注入点 Level =5
/usr/share/sqlmap/data/xml/payloads
这个目录下面有详细的payload
--risk= 要执行的测试的风险(1-3,默认为1)
risk升高可能造成数据的纂改
人为标识真假
--string= 当查询计算为真时匹配的字符串
--not-string= 当查询被计算为False时匹配的字符串
--text-only 仅根据文本内容比较页面
--titles 仅根据标题比较页面
--code= 当查询被计算为True时匹配的HTTP代码
--regexp= 正则表达式在查询评估为True时匹配,这个可能会出现在比如说true返回的内容可能有几种,通过正则匹配
--smart 只有在积极启发式的情况下才执行彻底的测试,当有大量检测目标时,只选择基于错误的检测结果
这些选项可用于调整特定SQL注入技术的测试
--technique= 使用的SQL注入技术(默认为“BEUSTQ”)
B:bool基于布尔,E:error基于错误,U:union联合查询,S:Stacked堆叠查询,T:time基于时间,Q:inline_query内联查询
--time-sec= 基于时间的注入检测,延迟数据库响应的秒数(默认为5)
--union-cols= 测试联合查询SQL注入的列的范围,默认是1-10列,随着level提高可以到50列,如果我们只想查6-9,就用--union-cols 6-9
--union-char= 用于强制列数的字符,union查询默认使用null,有时候null会失败,可以手动指定比如说123这些无关紧要
--union-from= 表中使用的UNION查询的SQL注入
有些情况下在联合查询中必须指定一个有效和可访问的表名,否则联合查询会执行失败,如在微软的Access中,也就是说,某些DBMS不支持“SELECT 1,2;”这样的语句,SELECT必须有FROM)用此参数指定这个表名,如:“–union-from=users”
下面这三种用的会少一点,了解一下,如果在特殊情况下可能会用上
--second-url= 结果页面URL搜索二阶响应,有些情况下可能注入的结果会在另一个页面显示,这时就需要指定其他的页面
-second-req= 从文件加载二级HTTP请求
--dns-domain= 域名用于DNS泄露攻击,攻击者控制了某个dns服务器,可以提高榨取数据的速度
这些选项可用于运行强制检查
--common-tables 检查常见表的存在性
--common-columns 检查常见索引的存在性
--common-files 检查常见文件的存在性
这些选项可用于优化sqlmap的性能
--predict-output 预测常见查询输出,根据检测方法,比较返回值和统计表内容,不断缩小检测范围,提高检测效率,与--threads参数不兼容,比如说我们通过查询结果可以判断出数据库是mysql,那么就不会继续去检测其他类型了(依据是/usr/share/sqlmap/data/txt/common-outputs.txt)
--keep-alive 使用持续HTTP(s)连接,性能好,与proxy不兼容
--null-connection 检索页面长度,而不需要实际的HTTP响应体,可以降低网络带宽消耗
--threads= 最大并发HTTP请求数(默认为1)
-o 打开所有优化开关
个人比较推荐使用predict这个参数,其他的可以看情况使用
这类选项可用于枚举表中包含的后端数据库管理系统信息、结构和数据
-b --banner 检索数据库管理系统的版本
--current-user 检索数据库管理系统的当前用户,比如说root,这个用户是指root@localhost里面的这个root
--current-db 当前使用的数据库,比如说library什么的
--hostname 主机名,比如说我们的metaspolitable2
--is-dba dba(database administrator)判断当前的用户是不是管理员=
--users 枚举数据库的所有用户
--passwords 枚举数据库用户的密码hash
--privileges 枚举数据库用户的权限,也可以针对一个用户进行枚举 --privileges -U username
--roles 枚举数据库用户的角色(这个如果学过数据库应该可以理解,权限和角色的分配)
--dbs 枚举所有的数据库
--tables 枚举数据库下面的表
--columns 枚举表里面的索引
-D 指定数据库的枚举
-T 指定表的枚举
-C 指定索引的枚举
-U 指定用户枚举
--exclude-sysdbs 枚举表时要排除DBMS系统数据库
--count 检索表的项数
--dump 爆DBMS数据库表项
--dump-all 爆所有DBMS数据库表项
--search 搜索列,表和/或数据库名称
--comments 在枚举期间检查DBMS注释
--statements 检索在DBMS上运行的SQL语句
-X 不枚举的DBMS数据库标识符
--pivot-column= 主列名称
--schema 列举DBMSschema
--where= 在条件下,dump表里面的数据
--start= 首先转储要检索的表条目
--stop= 要检索的最后一个转储表条目
--first= 首先查询输出要检索的字元
--last= 最后一个查询输出要检索的字元
--sql-query= 要执行的SQL语句
--sql-shell 交互式SQL shell的提示符
--sql-file= 执行给定文件中的SQL语句
-a, --all 检索所有
这些选项可用于指定要测试的参数、提供自定义注入负载和可选的篡改脚本
-p 可测试的参数,这个可以手动指定我们要测试的注入点,有的web可能在host,cookie,user-agent等存在注入点,我们可以通过这个选型进行手动指定
比如说
-p "user-agent", 这样可以避免在level为1下检测不到这些注入点
--skip= 跳过给定参数的测试,跟上面的刚好是相反的,用法相同
--skip-static 跳过看起来不是动态的测试参数
--dbms= 手动指定DBMS类型,比如说--dbms="mysql"
--os= 手动指定操作系统的类型,比如说--os="linux"
--dbms-cred= DBMS身份验证凭证(user:password)
--invalid-bignum 使用大的数字使值无效
--invalid-logical 使用逻辑操作使值无效
--invalid-string 使用随机字符串使值无效
通常sqlmap使用负值比如说id=-13使参数取值失效,当然也可以修改为以上几种方式
--no-cast 在检索结果时Sqlmap会将所有输入转换为字符串类型,若遇到空值(NULL)则将其替换为空白字符
但是在老版本的Mysql中这样做会导致数据检索出现问题,因此添加了“–no-cast”来告诉Sqlmap不要这样做
--no-escape 关闭字符串转义机制
--prefix=PREFIX 注入有效载荷前缀字符串
--suffix=SUFFIX 注入有效负载后缀字符串
这两个主要是应对一些个别的应用,有时候可能查询语句特别奇怪,sqlmap可能注入的payload无法正常使用,需要我们添加一些内容来使payload正常执行
--tamper= 使用给定的脚本篡改注入数据
/usr/share/sqlmap/tamper这个目录下有一系列混淆脚本,可以自行选择使用
下面这两个参数我也不是很理解…网上也没有详细的说明
--param-exclude= RRegexp从测试中排除参数(例如。“ses”)
--param-filter= 按位置选择可测试参数(例如:"POST")