顾名思义,sqlmap是一个自动化sql注入的开源的渗透工具,它可以自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。他有一个强大的检测引擎,许多适合于终极渗透测试的小众特性和广泛的开关,从数据库指纹、从数据库获取数据到访问底层文件系统和通过带外连接在操作系统上执行命令。官方网址
如果想要深入了解此工具,那你首先要对SQL注入有一定的了解,可以查看我写的SQL手工注入原理,我们要用的测试环境也在此博客中存在,你也可以使用我个人搭建的环境,(但不保证环境的持续稳定运行)
sqlmap官方中文介绍
如果是在虚拟机中启动kali或者wsl的kali直接输入salmap即可启动,如果是windows系统中启动需要先cd到sqlmap的解压目录中然后在已python sqlmap.py
方法来启动
测试环境可以自行搭建我在SQL手工注入原理中写了测试环境,也可以用我个人并不保证能稳定运行的在线环境 之后我用的最多的就是sqli这个测试环境。
选项: -v
此选项可用于设置输出消息的详细程度。有七个详细级别。默认级别为1,其中显示信息,警告,错误,严重消息和Python回溯(如果发生)。
进一步了解sqlmap的功能的合理详细程度是2级,主要用于检测阶段和接管功能。而如果您想查看工具发送的SQL有效负载,则级别3是您的最佳选择。当您向开发人员提供潜在的错误报告时,也建议使用此级别,请确保将标准选项发送的流量日志文件发送给标准输出-t。为了进一步调试潜在的错误或意外行为,我们建议您将详细程度设置为4级或更高。应该注意的是,也可以通过使用此选项的较短版本来设置详细程度,其中字母的数量v提供的开关(而不是选项)内部确定详细程度(例如,-v代替-v 2,-vv代替-v 3,-vvv代替-v 4,等等)
这个功能用处不大,先提一下吧
直连数据库需要用到-d
python sqlmap.py -d "数据库类型(比如mysql)://用户名:密码@地址:端口/数据库名字" -f --banner --dbs --users
其中-f
为fingerprint-b
为banner,效果相似都为查看数据库具体版本,--dbs
为获取当前有哪些数据库, --users
为获取东区有哪些用户
选项:-u或–url
针对单个目标URL运行sqlmap。此选项需要以下格式的目标URL: http(s)://目标URL[:端口]/[参数]
如 : python sqlmap.py -u "http://114.67.75.192/newsqli/Less-1/?id=1" -f --banner --dbs --users
扫描给定文本文件中列出的多个目标
参数是:-m
提供给定批量文件(.txt格式)中列出的目标URL的列表,sqlmap将逐个扫描每个URL。
从文件加载HTTP请求
参数是:-r
sqlmap的可能性之一是从文本文件加载原始HTTP请求。这样,您可以跳过许多其他选项的使用(例如,设置Cookie,发布数据等)。
从配置INI文件加载选项
参数是:-c
可以从配置INI文件传递用户的选项,例如sqlmap.conf。(在sqlmap解压文件中有这个文件)
请注意,如果您从命令行提供其他选项,则在运行sqlmap时会评估这些选项并覆盖配置文件中提供的那些选项。
从Burp或WebScarab代理日志解析目标
参数是:-l
此选项需要一个参数,该参数是代理的HTTP请求日志文件。Burp官网添加链接描述WebScarab官网这两个是代理抓包软件,Burp是kali中内置的软件,之后可能会考虑写一篇这些软件的使用教程。WebScarab已经逐渐被淘汰很少会在使用了。
-g(根据google搜索结果进行注入)国内较少使用,这里就不做介绍了
有时服务器检测到某个客户端错误请求过多会对其进行屏蔽,而Sqlmap的测试往往会产生大量错 误请求,为避免被屏蔽,可以时不时的产生几个正常请求以迷惑服务器。
参数
--safe-url=URL地址
隔一会就访问一下的安全URL--safe-post=POST数据
访问安全URL时携带的POST数据--safe-req=文件
从文件中载入安全HTTP请求--safe-freq=URL地址
每次测试请求之后都会访问一下的安全URL许多站点都以令牌,每个页面响应期间随机设置的隐藏字段值的形式结合了反CSRF保护。SqlMap的会自动尝试识别并绕过这种保护,但也有选项–csrf-token,并–csrf-url可以用来进一步微调它。选项–csrf-token可用于设置包含随机标记的隐藏值的名称。在网站为此类字段使用非标准名称的情况下,这很有用。选项–csrf-url可用于从任意URL地址检索令牌值。如果易受攻击的目标URL首先不包含必需的令牌值,但需要从其他位置提取该令牌值,则此功能很有用。CSRF和SQL与XSS一样,是一种针对web攻击的手段,我之后会专门写一篇分析此攻击的博客。
参数
--csrf-token=csrf令牌
用于保存反CSRF令牌的参数--csrf-url=CSRF URL
提取反CSRF令牌要访问的URL地址此开关在推理算法中用于对要检索的值的字符进行顺序统计预测。根据给定的文件(sqlmap解压路径\data\txt\common-outputs.txt)以及当前使用的枚举知识,将构建具有最有希望的字符值的统计表。如果可以在公共输出值中找到该值,则随着过程的进行,后续字符表的范围将越来越窄。
参数
--predict-output
注:此参数和多线程--threads
相互冲突,不能同时存在
此选项指示sqlmap使用持久HTTP连接。相当于HTTP报文中设置connection:keep-alive。
参数
--keep-alive
注:此参数与代理--proxy
互相冲突,不能同时存在
使用此方法后如果服务器支持特定的技术,可以直接获得HTTP响应的大小而不用获得HTTP响应体。这种技术常用于盲注的时候区分True与False。开启此选项后,sqlmap将尝试测试和利用两种不同的NULL连接技术:Range和HEAD。如果目标Web服务器支持其中任何一种,则可以明显节省已使用的带宽,从而提高速度。
参数
--null-connection
注:此参数与--text-only
相互冲突,不能同时存在
可以指定允许sqlmap执行的并发HTTP(S)请求的最大数量。此功能依赖于Python多线程概念,并继承了它的优点和缺点。(主要缺点是Cpython的GUI锁造成的)
此功能适用于暴力破解(洪水攻击,穷举法攻击)以及SQL盲注技术完成数据提取的情况。对于后一种情况,sqlmap首先在单线程中计算查询输出的长度,然后启动多线程。每个线程都被分配为检索查询输出的一个字符。检索到该字符后,线程结束-使用sqlmap中实现的二等分算法,最多需要7个HTTP(S)请求。
出于性能和站点可靠性的原因,并发请求的最大数量设置为10。
参数
--threads
注:此参数和预测输出--predict-output
相互冲突,不能同时存在
使用参数: --level
测试等级越高,sqlmap进行的有效负载(Payload)就越多越细,且时间也就相对越长。默认等级为一,共有五个级别
始终测试GET和POST参数,从级别2开始测试HTTP Cookie请求头值,从级别3开始测试HTTP User-Agent / Referer请求头。
使用参数: --risk
此参数用于指定风险等级,有1~3共3级。默认风险等级为1,此等级在大多数情况下对测试目标无害。风险等级2添加了基于时间的注入测试,等级3添加了OR测试。
在某些情况下,例如在update语句中进行SQL注入,注入OR基于-的有效负载(Payload)可能导致表中所有条目的更新,这肯定不是测试者想要的。sqlmap的有效负载(Payload)配置文件在sqlmap解压路径\data\xml\payloads
可以手动修改有效负载来避免条目的更新。
选项:–string,–not-string,–regexp和–code
使用sqlmap进行注入测试时判断True与False时通常会避免被页面中的动态内容所干扰,但也会出现一些特殊情况让其判断失败。
--string=字符串
: 此字符串可以出现在原始页面上(虽然不是必需的),也可以出现在所有True注入查询页面上,但不是 False 页面上。
--not-string=选项
: 该字符串不存在于原始页面上,也不存在于所有True注入查询页面上,而是始终出现在False 页面上。
--regexp=正则表达式
: 用户可以提供正则表达式来代替静态字符串。
--code=状态码
: 如果页面可以使用状态码来判断是否成功可以使用此值,如:–code=200。
此选项可用于指定要测试的SQL注入类型。默认情况下,sqlmap测试其支持的所有类型/技术。 在某些情况下,您可能只想测试一种或几种特定类型的SQL注入技术,这就是该选项起作用的地方。
参数: --technique
技术:
B:基于布尔的盲注(Boolean-based blind)
E:基于错误(Error-based)
U:基于联合查询(Union query-based)
S:堆叠查询(Stacked queries)
T:基于时间的盲注(Time-based blind)
Q:内联查询(Inline queries)
如: --technique ES
为使用基于错误的查询和堆叠查询。默认值为BEUSTQ。
一些网站进行SQL注入测试时,针对一个URL的SQL注入测试可能会在另一个URL中显示。通常是由于用户在原始测试页面上提供的输入,数据库进行了存储而发生的。
选项:
--second-url
: 进行SQL注入的目标URL
--second-req
: 显示效果的URL地址
这些选项可用于指定要测试的参数,提供自定义注入有效负载和可选的篡改脚本。
选项:-p,--skip和--param-exclude
默认情况下(--level 1
),sqlmap测试所有GET参数和POST参数。当测试等级在2(--level 2
)或2级以上时,它还会测试HTTP Cookie请求头。当测试等级大于等于3级时,它还会测试SQL注入的HTTP User-Agent和HTTP Referer请求头。通过-p "参数"
可以直接指定需要测试的内容。
如:想要测试请求头中的参数id和User-Agent是否存在注入点,可以写-p "id,user-agent"
。
如果用户希望从测试中排除某些参数,方法:参数--skip
。当您要使用更高的值–level并测试所有可用参数(不包括通常要测试的某些HTTP标头)时,这特别有用。
如:当等级五(--level=5
)时,想要跳过对User-Agent与Referer的测试可以写--skip="user-agent,referer"
。
可以使用正则表达式来从测试中排除某些参数。方法:参数 --param-exclude
。
如: 要跳过包含字符串token或session属性的参数的测试,可以写--param-exclude="token|session"
。
当url注入点位于url中间的某一个位置,并非是在传参?
后方时,需要手动在注入点位置处加入*
号来表示注入点。(当使用Apache Web服务器的mod_rewrite模块或其他类似技术时,此功能特别有用。)
如: python sqlmap.py -u "http://目标url/参数1/内容1*/参数2/内容2/"
除了url外,其余地方的注入点也可以用星号*
指定,比如说POST请求,HTTP请求头(--headers,--user-agent,--cookie
),已文件方式请求(-r)等地方的注入点。
如: python sqlmap.py -u "http://目标url" --cookie="参数1=内容1*;参数2=内容2"
如果我们已知测试目标使用的数据库管理系统(DBMS),这时候我们就可以去指定数据库管理系统(DBMS)来加快SQL注入的进程,并且减少探测次数也可以降低风险,同样我们如果事先知道目标使用的系统,也可以事先指定
选项:
--dbms
: 指定目标数据库管理系统(仅支持sqlmap支持的数据库类型,本博客开头的时候写过sqlmap支持哪些数据库管理系统)
--os
: 指定目标系统(大多数服务器都是linux,也有少部分是windows,基本没有其他系统的了)
如果--fingerprint
与一起提供--dbms
,则sqlmap仅对指定的数据库管理系统执行版本认定
如 : python sqlmap.py -u "http://目标url/?参数=1" --dbms mysql -f
会只去确定此数据库管理系统(DBMS)是MySQL中那个版本,而不会再去测试其他数据库,如果此数据库管理系统(DBMS)不是MySQL则无法找到数据库详细信息。
请注意,此选项不是强制性的,强烈建议仅在绝对确定后端数据库管理系统或底层操作系统时使用此选项。如果您不知道,请让sqlmap为您自动识别。
在某些情况下,只有当用户提供要附加到注入负载的特定后缀时,易受攻击的参数才可被利用。当用户已经知道查询语法并希望通过直接提供注入有效负载前缀和后缀来检测和利用SQL注入时,这些选项就派上用场了。
选项:
--prefix
设置SQL注入Payload前缀
--suffix
设置SQL注入Payload后缀
比如
假设SQL语句为 = "SELECT * FROM users WHERE id=('.$_GET['id'].') LIMIT 0, 1";
python sqlmap.py -u "http://ip/sqlmap/mysql/get_str_brackets.php\
?id=1" -p id --prefix "')" --suffix " AND ('abc'='abc"
相当于SQL语句 = "SELECT * FROM users WHERE id=('1') AND ('abc'='abc') LIMIT 0, 1" ;
sqlmap本身不会混淆发送的有效负载,除了单引号之间的字符串被char()类似的表示形式所取代之外。sqlmap通过Tamper脚本来绕过Web应用防护系统(WAF)等防御措施,可以在sqlmap解压路径/tamper
文件夹下找到所有sqlmap自带的tamper脚本。(如果有能力,可以直接写tamper脚本)
如: python sqlmap.py -u "http://目标URL?id=1" --tamper "between.py,randomcase.py,space2comment.py"
下列使用范围基于sqlmap的1.4.2.42版本编写
tamper自带脚本 | 作用 | 适用范围 |
---|---|---|
apostrophemask.py | 将单引号 url 编码,用于过滤了单引号的情况。 | 所有 |
apostrophenullencode.py | 将单引号替换为宽字节 unicode 字符,用于过滤了单引号的情况 | 所有 |
appendnullbyte.py | 在你构造的payload后面加一个空字符 | Access |
base64encode.py | 进行base64编码 | 所有 |
between.py | 将大于符号和等号用 between 语句替换,用于过滤了大于符号和等号的情况 | 所有 |
bluecoat.py | 用随机的空白字符代替空格,并且将等号替换为 like ,用于过滤了空格和等号的情况 | MySQL 5.1, SGOS |
chardoubleencode.py | 用 url 编码两次你的 payload | 所有 |
charencode.py | 用 url 编码一次你的 payload | 所有 |
charunicodeencode.py | 用 unicode 编码 payload ,只编码非编码字符 | ALL,但是需要 asp 和 asp.net 环境 |
charunicodeescape.py | 以指定的payload反向编码未编码的字符 | |
commalesslimit.py | 将 payload 中的逗号用 offset 代替,用于过滤了逗号并且是两个参数的情况 | MySQL |
commalessmid.py | 将 payload 中的逗号用 from for 代替,用于过滤了逗号并且是三参数的情况 | MySQL |
commentbeforeparentheses.py | 在某个单词后的第一个括号前面加入 /**/ ,用于过滤了函数的情况 | ALL |
concat2concatws.py | 用于过滤了 concat 函数的情况 | MySQL |
equaltolike.py | 将等号用 like 代替,用于过滤了等号的情况 | ALL |
escapequotes.py | 将单引号转换成 ’ ,双引号转换成 " ,用于过滤了单引号或双引号的情况 | ALL |
greatest.py | 用 greatest 代替大于符号,用于大于符号被过滤了的情况 | ALL |
halfversionedmorekeywords.py | 在关键字前添加注释,用于过滤了关键字的情况 | MySQL < 5.1 |
hex2char.py | 根据名称猜测是十六进制字符 | |
htmlencode.py | 将 payload 进行 html 编码 | ALL |
ifnull2casewhenisnull.py | 改变ifnull语句的写法 | |
ifnull2ifisnull.py | 将 ifnull() 函数转为 if(isnull()) 函数,用于过滤了 ifnull 函数的情况 | MySql |
informationschemacomment.py | 在 information_schema 后面加上 /**/ ,用于绕过对 information_schema 的情况 | ALL |
least.py | 替换大于号为least | |
lowercase.py | 将 payload 里的大写转为小写 | ALL |
luanginx.py | 未知 | |
modsecurityversioned.py | 用注释来包围完整的查询语句,用于绕过 ModSecurity 开源 waf | MySQL |
modsecurityzeroversioned.py | 用注释来包围完整的查询语句,用于绕过 waf ,和上面类似 | MySQL |
multiplespaces.py | 在关键字周围添加多个空格 | ALL |
overlongutf8.py | ”转换给定的 payload 当中的所有字符“,类似空格大于小于这种 | ALL |
overlongutf8more.py | 以指定的payload转换所有字符 | |
percentage.py | 用百分号来绕过关键字过滤,具体是在关键字的每个字母前面都加一个百分号 | ALL, 但是需要 ASP 环境 |
plus2concat.py | 用 concat 函数来替代加号,用于加号被过滤的情况 | SQL Server 2012+ |
plus2fnconcat.py | 用 fn concat 来替代加号,和上面类似 | Microsoft SQL Server 2008+ |
randomcase.py | 将 payload 随机大小写,可用于大小写绕过的情况 | ALL |
randomcomments.py | 在 payload 的关键字中间随机插入 /**/ ,可用于绕过关键字过滤 | ALL |
securesphere.py | 在 payload 后面加入字符串,可以自定义 | ALL |
sp_password.py | 在 payload 语句后添加 ssp_password ,用于迷惑数据库日志 | SQL Server |
space2comment.py | 用 /**/ 替代空格,用于空格的绕过 | ALL |
space2dash.py | 用注释符–和一个随机字符串加一个换行符替换控制符 | SQL Server、 SQLite |
space2hash.py | 和上面类似,不过这儿是用#注释符 | MySQL |
space2morecomment.py | 将空格用 /_/ 替代 | ALL |
space2morehash.py | 和 space2hash.py 类似,但是这儿多一个 # 和换行符 | MySQL >= 5.1.13 |
space2mssqlblank.py | 用这些随机空白符替换 payload 中的空格 | SQL Server |
space2mssqlhash.py | 用 # 加一个换行符替换 payload 中的空格 | SQL Server、MySQL |
space2mysqlblank.py | 用这些随机空白符替换payload中的空格 | MySQL |
space2mysqldash.py | 用 – 加一个换行符替换空格 | MySQL、SQL Server |
space2plus.py | 用 + 替换空格 | ALL |
space2randomblank.py | 用这些随机空白符替换 payload 中的空格 | ALL |
symboliclogical.py | 用 && 替换 and ,用 || 替换 or ,用于这些关键字被过滤的情况 | ALL |
unionalltounion.py | 用 union select 替换union all select | ALL |
unmagicquotes.py | 用宽字符绕过 GPC addslashes | ALL |
uppercase.py | 将 payload 大写 | ALL |
varnish.py | 添加一个 HTTP 头 “ X-originating-IP ” 来绕过 WAF | ALL |
versionedkeywords.py | 对不是函数的关键字进行注释 | MySQL |
versionedmorekeywords.py | 注释每个关键字 | MySQL >= 5.1.13 |
xforwardedfor.py | 添加一个伪造的 HTTP 头 “ X-Forwarded-For ” 来绕过 WAF | ALL |
nonrecursivereplacement.py | 关键字双写,可用于关键字过滤(sqlmap1.4.2中无此文件) | ALL |
tamper脚本作用范围大部分摘录自:https://blog.csdn.net/dyw_666666/article/details/83420362也有一些为我个人补充的
暴力攻击又称为洪水攻击和穷举法攻击,攻击方式简单来说就是去一个个试错,简单粗暴。且在大多数时候都很有效。
在某些情况下,--tables
不能检索到数据库的表名。这些情况通常属于以下类别之一:
information_schema
。MSysObjects
不可读(默认设置)。sqlmap解压路径\data\txt\common-tables.txt
,您可以根据需要对其进行编辑。--common-tables
在某些情况下,--columns
不能检索到数据库表的列(表头)名。这些情况通常属于以下类别之一:
information_schema
。暴力破解列(表头)名用的字典是sqlmap解压路径\data\txt\common-columns.txt
,您可以根据需要对其进行编辑。
参数: --common-tables
接下来的内容涉及控制底层操作系统权限,在底层操作系统执行命令,改动注册表,和底层系统建立tcp连接等已经脱离基础使用范围,脱离小白我的能力范围。
Payload: 有效载荷,sqlmap中每执行一条sql注入都算是一个有效载荷
DBMS: 数据库管理系统(Database Management System)比如:MySQL,Oracle,Microsoft SQL Server,Microsoft Access…
CSRF:跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
WAF:Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF).。
我是根据sqlmap的-hh命令中的参数进行翻译的,我进行了一些对比发现官方文档并没有-hh命令中的参数全面。
简写 | 全写 | 意义 |
---|---|---|
-h | --help |
显示基本帮助消息并退出 |
-hh | 无 | 显示高级帮助消息并退出 |
无 | --version |
显示程序的版本号并退出 |
-v | VERBOSE | 详细程度:0-6(默认为1) |
-d | DIRECT | 直接连接数据库的连接字符串 |
-u URL | --url=URL |
指定连接的目标URL |
-l | LOGFILE | 从Burp或WebScarab代理日志文件中解析目标 |
-m | BULKFILE | 扫描文本文件中给定的多个目标 |
-r | REQUESTFILE | 从文件加载HTTP请求 |
-g | GOOGLEDORK | 将Google dork结果作为目标URL处理 |
-c | CONFIGFILE | 从配置INI文件加载选项 |
参数 | 意义 |
---|---|
--method=方法 |
强制使用给定的HTTP方法(例如:get,post) |
--data=数据 |
通过POST发送的数据字符串(例如:“ id = 1”) |
--param-del=字符 |
用于分割参数值的字符(例如:&) |
--cookie=cookie |
HTTP Cookie请求头的值 (例如:“PHPSESSID=a8d127e…”) |
--cookie-del=cookie分割字符 |
用于分割Cookie值的字符(例如:;) |
--load-cookies=文件 |
包含Netscape/wget格式cookies的文件 |
--drop-set-cookie |
忽略响应中的 Set-Cookie 头 |
--mobile |
通过HTTP User-Agent请求头模仿智能手机 |
-A 请求头 或 --user-agent=请求头 |
HTTP User-Agent的请求头(浏览器信息) |
--random-agent |
使用随机选择的HTTP User-Agent请求头 |
--host=HOST |
HTTP Host 请求头(主机信息) |
--referer=referer |
HTTP Referer 请求头(从何方网站来到此网站) |
-H 请求头 或--header=请求头 |
额外的一个请求头(例如:“X-Forwarded-For:127.0.0.1”) |
--headers=多个请求头 |
额外的多个请求头 (例如: “Accept-Language: fr\nETag: 123” 每个标头必须用换行符分隔) |
--auth-type=验证类型 |
HTTP身份验证类型(基本、摘要、NTLM或PKI) |
--auth-cred=验证凭据 |
HTTP身份验证凭据(名称:密码) |
--auth-file=验证文件 |
HTTP认证PEM证书或私钥文件 |
--ignore-code=忽略代码 |
忽略(有问题的)HTTP错误代码(例如401) |
--ignore-proxy |
忽略系统默认代理设置 |
--ignore-redirects |
忽略重定向尝试 |
--ignore-timeouts |
忽略连接超时 |
--proxy=代理 |
使用代理连接到目标URL(格式:--proxy http(s)://ip[端口] ) |
--proxy-cred=代理凭证 |
代理身份验证凭据(名称:密码) |
--proxy-file=代理文件 |
从文件加载代理列表 |
--tor |
使用Tor匿名网络 |
--tor-port=Tor代理端口 |
设置除默认以外的Tor代理端口 |
--tor-type=Tor代理类型 |
设置Tor代理类型(HTTP,SOCKS4或SOCKS5(默认)) |
--check-tor |
检查Tor是否正确使用 |
--delay=延迟秒数 |
在考虑超时HTTP请求之前,可以指定等待的秒数。有效值是一个浮点数,比如10.5秒。默认是30秒 |
--timeout=等待秒数 |
超时连接之前等待的秒数(默认为30) |
--retries=重试次数 |
在连接超时时重试(默认3) |
--randomize=RPARAM |
每次请求期间随机更改其值得参数名称。长度和类型根据提供的原始值保持一致 |
--safe-url=URL地址 |
隔一会就访问一下的安全URL |
--safe-post=POST数据 |
访问安全URL时携带的POST数据 |
--safe-req=文件 |
从文件中载入安全HTTP请求 |
--safe-freq=URL地址 |
每次测试请求之后都会访问一下的安全URL |
--skip-urlencode |
跳过有效负载数据的URL编码 |
--csrf-token=csrf令牌 |
用于保存反CSRF令牌的参数 |
--csrf-url=CSRF URL |
提取反CSRF令牌要访问的URL地址 |
--force-ssl |
强制使用SSL/HTTPS |
--hpp |
使用HTTP参数污染方法 |
--chunked |
使用 HTTP 分块传输编码(POST)请求 |
--eval=EVALCODE |
在请求之前评估提供的Python代码(例如“import hashlib;id2=hashlib.md5(Id).hedigest()” ) |
参数 | 意义 |
---|---|
-o |
打开所有优化开关(相当于–keep-alive --null-connection --threads=3) |
--predict-output |
预测常见查询输出 |
--keep-alive |
设置连接为持久连接。相当于HTTP请求头中设置connection:keep-alive |
--null-connection |
sqlmap中设置空连接,表示不接受HTTP当中的Body。 可以直接获得HTTP响应的大小而不用获得HTTP响应体,常用在盲注过程中 |
--threads=THREADS |
并发 HTTP 请求的最大数量(默认值1) |
--level=测试等级 |
要执行的测试级别(1-5,默认值1) |
--risk=风险等级 |
要执行的测试的风险(1-3,默认值1) |
--string=字符串 |
正确情况(True)下页面应该出现的字符串 |
--not-string=字符串 |
错误情况(False)下页面应该出现的字符串 |
--regexp=正则表达式 |
正确情况(True)下页面应该出现的正则表达式对应的内容 |
--code=代码 |
查询计算为True时要匹配的HTTP代码 |
--smart |
当拥有一个潜在目标url的大列表(如 -m),使用--smart 能加快找到有注入点的url。 |
--text-only |
仅基于文本内容比较页面(常用于页面中要大量活动内容,不如axjx) |
--titles |
仅根据标题比较页面(布尔盲注的时候根据指定标题来判断真假值,比如成功页面标题 True 失败页面标题 False --titles ) |
--technique=SQL注入技术 |
要使用的SQL注入技术(默认为“ BEUSTQ”全部) |
--time-sec=盲注等待时间 |
设置基于时间的SQL盲注的响应时间。默认情况下,它的值设置为5秒。 |
--union-cols=最大行数 |
进行联合查询注入时,Sqlmap自动检测列(表头)数,范围是1到10。当level值较高时列数检测范围的上限会扩大到50。可以通过此参数来指定最大行数。 |
--union-char=字符值 |
Sqlmap进行联合查询注入时使用空字符(NULL)(level值较高时Sqlmap会生成随机数用于联合查询注入)。 因为有时使用空字符注入会失败而使用随机数会成功。 您可以通过使用–union-char带有所需字符值(例 --union-char 123 )的选项。 |
--union-from=表名 |
在某些UNION查询SQL注入情况下,需要在FROM子句中强制使用有效且可访问的表名。有时候可能必须要用到指定的表SQL语句才能正确执行(例如–union-from=users)。 |
--dns-domain=DNS域名 |
用于DNS渗透攻击的域名 |
--second-url=目标URL
: 二阶攻击进行SQL注入的目标URL
--second-req=URL地址
: 二阶攻击显示效果的URL地址
参数 | 意义 |
---|---|
-p 测试参数 |
可测试参数(比如说提供-p "id,user-agent" ,会去请求头中的id与user-agent中寻找是否存在注入点) |
--skip=跳过参数 |
跳过给定参数的测试(具体介绍看上方,可测试的参数) |
--skip-static |
跳过看起来不是动态的测试参数 |
--param-exclude=正则表达式 |
从测试中排除参数的正则表达式(例如“ses”) |
--param-filter=测试参数 |
按位置选择可测试参数(例如“POST”) |
--dbms=数据库管理系统(DBMS) |
指定数据库管理系统(DBMS) |
--dbms-cred=用户:密码 |
数据库管理系统(DBMS)身份验证凭据(用户:密码) |
--os=OS |
指定数据库管理系统(DBMS)使用的操作系统 |
--invalid-bignum |
使用大数字来使值无效 当需要让参数无效时,sqlmap默认使用经典值,比如id=13 的无效值为id=-13 ,有了这个参数,就可以强制使用大整数值来实现相同的目标(例如id=99999999)。 |
--invalid-logical |
使用布尔值来使值无效 有了这个参数,就可以强制使用布尔操作来实现相同的目标(例如id=13 and18=19)。 |
--invalid-string |
使用随机字符串使值无效 有了这个参数,就可以强制使用随机字符串来实现相同的目标(例如id=akewmc)。 |
--no-cast |
关闭有效载荷(Payload)释放机构 |
--no-escape |
关闭字符串转义机制 |
--prefix=Payload前缀 |
设置SQL注入有效载荷(Payload)前缀 |
--suffix=Payload后缀 |
设置SQL注入有效载荷(Payload)后缀 |
--tamper=指定混淆脚本 |
使用混淆技术将SQL语句混淆注入 |
简写 | 全写 | 意义 |
---|---|---|
-a | --all |
获取一切能获取到的信息 |
-b | --banner |
检索数据库管理系统(DBMS)版本信息 |
-f | --fingerprint |
检索数据库管理系统(DBMS)指纹信息(和-b效果类似,但版本信息更加详细,-b,-f配合使用效果最好) |
无 | --current-user |
检索当前数据库管理系统(DBMS)当前使用用户信息 |
无 | --current-db |
检索当时数据库管理系统(DBMS)用的中使用的数据库名 |
无 | --hostname |
检索数据库管理系统(DBMS)使用的服务器的主机名 |
无 | --is-dba |
检查当前账号是否为数据库管理系统(DBMS)管理员账户 |
无 | --users |
检索数据库管理系统(DBMS)所用用户 |
无 | --passwords |
检索数据库管理系统(DBMS)用户密码散列 |
无 | --privileges |
检索数据库管理系统(DBMS)用户权限 |
无 | --roles |
检索数据库管理系统(DBMS)用户角色(效果和–privileges类似,都能获取用户和对应的权限) |
无 | --dbs |
检索数据库管理系统(DBMS)当前有哪些数据库 |
无 | --tables |
检索数据库管理系统(DBMS)存在哪些表 |
无 | --columns |
检索获取数据库管理系统(DBMS)当前数据库中的表头信息 |
无 | --schema |
检索数据库管理系统(DBMS)获取所有数据库中的表头信息 |
无 | --count |
检索表中有多少条数据 |
无 | --dump |
检索当前数据库库中所有表中的数据 |
无 | --dump-all |
检索所有数据库中的所有表中的数据 |
无 | --search |
搜索列、表或数据库名称(需要配合-D、-T、-C使用) |
无 | --comments |
检索数据库中的注释信息 |
-D | DB | 数据库管理系统(DBMS)中指定数据库 |
-T | TBL | 数据库管理系统(DBMS)中指定表 |
-C | COL | 数据库管理系统(DBMS)中指定列(表头) |
-X | EXCLUDE | 不枚举的数据库管理系统(DBMS)数据库标识符 |
-U | USER | 数据库管理系统(DBMS)中指定的用户 |
无 | --exclude-sysdbs |
排除数据库管理系统(DBMS)中的系统库 |
无 | --pivot-column=P.. |
数据透视列名 |
无 | --where=where条件 |
表转储时使用where条件 |
无 | --start=limit start |
要检索的第一个转储表项 |
无 | --stop=limit stop |
要检索的最后一个转储表项 |
无 | --first=第一个字符 |
要检索的第一个查询输出字字符 |
无 | --last=最后一个字符 |
要检索的最后一个查询输出字字符 |
无 | --sql-query=SQL语句 |
要执行的SQL语句 |
无 | --sql-shell |
提示交互式SQL Shell |
无 | --sql-file=SQL文件 |
从给定文件执行SQL语句 |
参数 | 意义 |
---|---|
--common-tables |
暴力破解表名 |
--common-columns |
暴力破解列名 |
--common-files |
暴力破解寻找存在的文件 |