4、SQLMap检测与识别:检测注入点、识别数据库类型、识别用户与权限、识别当前数据库

好,咱们进入正题。这一章讲的是SQLMap最核心的活儿——检测与识别。说白了,就是让工具帮我们搞清楚三件事:目标到底有没有洞?是什么数据库?我们能拿到什么权限?

我刚开始用SQLMap的时候,上来就一把梭,结果跑了一下午啥也没出来。后来才明白,检测阶段才是整个渗透测试的基石。你想想看,连注入点都没找准,后面再花哨的操作都是白搭。

4.1 检测注入点——找到那个突破口

SQLMap检测注入点,核心就一条命令:

sqlmap -u "http://example.com/page?id=1"

这条命令会做三件事:

  • 发送测试请求:给目标URL加各种特殊字符,比如单引号、双引号、括号
  • 分析响应差异:看页面返回的内容、状态码、响应时间有没有变化
  • 判断注入类型:是布尔盲注、时间盲注,还是报错注入

关键点:SQLMap默认只检测GET参数。如果是POST请求,得加 --data 参数。

举个例子,一个登录表单:

sqlmap -u "http://example.com/login" --data="username=admin&password=123"

我个人习惯,第一次跑的时候加个 --batch 参数,让工具自动选择默认选项。这样能快速知道有没有戏。

小技巧:如果目标有WAF(Web应用防火墙),可以加 --random-agent--delay=2,降低被拦截的概率。

4.2 识别数据库类型——知己知彼

找到注入点之后,下一步就是搞清楚对面是什么数据库。这很重要,因为不同数据库的语法和特性差别很大。

SQLMap会自动识别,但如果你想手动确认,可以用这个参数:

sqlmap -u "http://example.com/page?id=1" --banner

--banner 会返回数据库的版本信息,比如:

MySQL 5.7.34
Microsoft SQL Server 2019
PostgreSQL 13.2

我记得有一次项目,目标返回的banner是 MariaDB 10.3,但实际底层是MySQL。这种情况虽然少见,但遇到了别慌,SQLMap会自动适配。

常见的数据库指纹特征:

数据库类型 典型banner 默认端口
MySQL 5.x, 8.x 3306
Oracle Oracle Database 19c 1521
SQL Server Microsoft SQL Server 2019 1433
PostgreSQL PostgreSQL 13.2 5432

注意:有些数据库管理员会修改banner信息来迷惑攻击者。别完全依赖banner,结合后续的注入行为综合判断。

4.3 识别用户与权限——搞清楚你是谁

知道数据库类型后,下一步就是搞清楚当前连接的用户是谁,有什么权限。这决定了你能干什么。

查看当前用户:

sqlmap -u "http://example.com/page?id=1" --current-user

查看用户权限:

sqlmap -u "http://example.com/page?id=1" --privileges

输出结果大概长这样:

current user: 'root@localhost'
privileges: FILE, SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE

嗯,这里要注意。如果看到 FILE 权限,意味着你可以读写文件。如果看到 SUPER 权限,那基本上可以为所欲为了。

我曾经遇到一个目标,当前用户是 app_user@%,权限只有 SELECT, INSERT, UPDATE。这种情况下,想拿shell基本没戏,但数据还是能拖出来的。

4.4 识别当前数据库——锁定目标

最后一步,搞清楚当前连接的是哪个数据库。这就像你进了大楼,得先知道自己在哪一层。

sqlmap -u "http://example.com/page?id=1" --current-db

返回结果:

current database: 'wordpress'

拿到数据库名之后,就可以用 --tables--columns 进一步探索了。但那是下一章的内容,咱们先不展开。

实战建议:我一般会先跑 --current-db,确认目标数据库后,再用 --dbs 列出所有数据库。这样效率更高,因为有些目标数据库很多,全列出来要花不少时间。

知识体系总览

下面这张图,把本章的核心逻辑串起来了。你照着这个流程走,基本不会漏东西。

SQLMap检测与识别核心流程 检测注入点 -u 参数 + 测试请求 识别数据库类型 --banner 参数 识别用户与权限 --current-user / --privileges 当前数据库 --current-db 各步骤关键输出 • 检测注入点:确认是否存在SQL注入,判断注入类型(布尔/时间/报错) • 识别数据库类型:获取数据库版本banner,确定是MySQL/Oracle/SQL Server等 • 识别用户与权限:获取当前数据库用户名,查看是否有FILE/SUPER等高危权限 • 识别当前数据库:锁定当前连接的数据库名称,为后续拖库做准备 ⚠ 注意:每一步都可能遇到WAF拦截、权限不足等问题,需要灵活调整参数

这张图把整个检测流程串起来了。你照着这个顺序走,基本不会漏掉关键信息。我个人的经验是,别急着跳步,每一步都确认清楚了再往下走。否则后面发现问题再回头,反而更浪费时间。

核心总结:检测与识别阶段,说白了就是回答四个问题——有没有洞?什么库?谁在连?能干嘛? 这四个问题搞清楚了,后面的渗透测试才有方向。

专注资料整理