sql注入学习笔记(2)--sqlmap参数介绍

    技术2022-07-16  95

    Detection探测

    这些选项可用于自定义探测阶段 探测级别

    --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 只有在积极启发式的情况下才执行彻底的测试,当有大量检测目标时,只选择基于错误的检测结果

    Techniques技巧

    这些选项可用于调整特定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服务器,可以提高榨取数据的速度

    Brute force暴力

    这些选项可用于运行强制检查

    --common-tables 检查常见表的存在性 --common-columns 检查常见索引的存在性 --common-files 检查常见文件的存在性

    Optimization优化

    这些选项可用于优化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这个参数,其他的可以看情况使用

    Enumeration枚举类型

    这类选项可用于枚举表中包含的后端数据库管理系统信息、结构和数据

    -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 检索所有

    Injection注入

    这些选项可用于指定要测试的参数、提供自定义注入负载和可选的篡改脚本

    -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")
    Processed: 0.014, SQL: 10