3、输出指定数据库指定表中的全部数据
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T user --dump-all
时间过长,截取选取扫描过程中的过程截图:
高级用法
绕过WAF
原理:只用–tamper对参数进行修改来绕过waf,官方提供的绝大部分脚本是用正则模块替换攻击载荷字符编码的方式来绕过waf的检测规则。
常用指令:
--identify-waf 检测是否有WAF #使用参数进行绕过 --random-agent 使用任意HTTP头进行绕过,尤其是在WAF配置不当的时候 --time-sec=3 使用长的延时来避免触发WAF的机制,这方式比较耗时 --hpp 使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上 --proxy=100.100.100.100:8080 --proxy-cred=211:985 使用代理进行绕过 --ignore-proxy 禁止使用系统的代理,直接连接进行注入 --flush-session 清空会话,重构注入 --hex 或者 --no-cast 进行字符码转换 --mobile 对移动端的服务器进行注入 --tor 匿名注入
sqlmap为我们准备了绕过waf的脚本,在sqlmap文件夹tamper文件夹下
使用情况如下:
使用方法--tamper xxx.py apostrophemask.py用UTF-8全角字符替换单引号字符 apostrophenullencode.py 用非法双字节unicode字符替换单引号字符 appendnullbyte.py在payload末尾添加空字符编码 base64encode.py 对给定的payload全部字符使用Base64编码 between.py分别用“NOT BETWEEN 0 AND #”替换大于号“>”,“BETWEEN # AND #”替换等于号“=” bluecoat.py 在SQL语句之后用有效的随机空白符替换空格符,随后用“LIKE”替换等于号“=” chardoubleencode.py 对给定的payload全部字符使用双重URL编码(不处理已经编码的字符) charencode.py 对给定的payload全部字符使用URL编码(不处理已经编码的字符) charunicodeencode.py 对给定的payload的非编码字符使用Unicode URL编码(不处理已经编码的字符) concat2concatws.py 用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替换像“CONCAT(A, B)”的实例 equaltolike.py 用“LIKE”运算符替换全部等于号“=” greatest.py 用“GREATEST”函数替换大于号“>” halfversionedmorekeywords.py 在每个关键字之前添加MySQL注释 ifnull2ifisnull.py 用“IF(ISNULL(A), B, A)”替换像“IFNULL(A, B)”的实例 lowercase.py 用小写值替换每个关键字字符 modsecurityversioned.py 用注释包围完整的查询 modsecurityzeroversioned.py 用当中带有数字零的注释包围完整的查询 multiplespaces.py 在SQL关键字周围添加多个空格 nonrecursivereplacement.py 用representations替换预定义SQL关键字,适用于过滤器 overlongutf8.py 转换给定的payload当中的所有字符 percentage.py 在每个字符之前添加一个百分号 randomcase.py 随机转换每个关键字字符的大小写 randomcomments.py 向SQL关键字中插入随机注释 securesphere.py 添加经过特殊构造的字符串 sp_password.py 向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs space2comment.py 用“/**/”替换空格符 space2dash.py 用破折号注释符“--”其次是一个随机字符串和一个换行符替换空格符 space2hash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符 space2morehash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符 space2mssqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符 space2mssqlhash.py 用磅注释符“#”其次是一个换行符替换空格符 space2mysqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符 space2mysqldash.py 用破折号注释符“--”其次是一个换行符替换空格符 space2plus.py 用加号“+”替换空格符 space2randomblank.py 用一组有效的备选字符集当中的随机空白符替换空格符 unionalltounion.py 用“UNION SELECT”替换“UNION ALL SELECT” unmagicquotes.py 用一个多字节组合%bf%27和末尾通用注释一起替换空格符 varnish.py 添加一个HTTP头“X-originating-IP”来绕过WAF versionedkeywords.py 用MySQL注释包围每个非函数关键字 versionedmorekeywords.py 用MySQL注释包围每个关键字 xforwardedfor.py 添加一个伪造的HTTP头“X-Forwarded-For”来绕过WAF
-level/-risk
Sqlmap一共有5个探测等级,默认是1。等级越高,说明探测时使用的payload也越多。其中5级的payload最多 ,会自动破解出cookie、XFF等头部注入。当然,等级越高,探测的时间也越慢。这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP cookie在level为2时就会测试,HTTP User-Agent/Referer头在level为3时就会测试。 在不确定哪个参数为注入点时,为为保证准确.性,建议设置level为5
Sqlmap一共有3个危险等级, 也就是说你认为这个网站存在几级的危险等级。和探测等级一个意思, 在不确定的情况下,建议设置为3级,–risk=3
工具使用payload目录
sqlmap\data\xml\payloads(windows)
伪造Http Referer头部
sqlmap可以在请求中伪造http请求头中的referer,当-level大于等于3时,会进行referer注入
eg: referer http://www.topreverse.cn
执行指定的SQL语句
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --sql-shell #执行指定的sql语句
执行OS系统命令
当且仅当数据库是mysql、postgresql、sql server时可以执行。
当数据库是mysql时,需要满足3个条件:
1、root权限
2、已经知道目标站点的绝对路径
3、secure_file_priv的参数值时空(未修改前是NULL)
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-shell #执行--os-shell命令
过程中sqlmap会向指定路径传入两个文件,tmpblwkd.php(木马文件)和tmpueqch.php。退出时输入q和x才可以删除传入的文件。
读取服务器文件
前提:数据库是:mysql、postgresql和sql server
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-read "c:/topreverse.txt" #读取目标服务器C盘下的test.txt文件
上传文件到数据库服务器
前提:数据库是mysql、postgre sql、sql server
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 --file-write C:\Users\system32\Desktop\text.php --file-dest "C:\phpStudy\PHPTutorial\WWW\test.php" #将本地的text.php文件上传到目标服务器test.php
sqlmap自身上传完成之后会进行验证,读取文件大小进行对比。
以上就是本文全部内容,希望大家可以有所收获!