MySQL、SQLServer、Oracle、PostgreSQL、Access五种数据库应该是目前市面上最流行的数据库了。我们进行渗透测试,碰到最多的也是这几种数据库。本文就这几种数据库在注入时的相同点和不同的做一下统计。
注释符
- MySQL: 单行:# 、多行: /**/
- SQLServer:单行: -- 多行: /**/
- Oracle:单行: -- 多行: /**/
- PostgreSQL:单行:-- 多行: /**/
- Access:无注释符
所以,除了Access无注释符。
MySQL的单行注释符为:# 其他三种数据库单行注释符均为:--
其余四种数据库的多行注释符均为/**/
数据库端口
- MySQL: 3306
- SQLServer: 1433
- Oracle:1521
- PostgreSQL:5432
- Access: 属于文件型数据库,所以不需要端口号
数据库文件后缀名
- MySQL:数据文件:. myd 、索引文件:. MYI 、表定义文件:. frm
- SQLServer: .mdf
- Oracle:.dbf 和 .ora
- PostgreSQL:无后缀名
- Access:早期是 .mdb ,后来是 .accdb
特有的数据库
- MySQL: information_schema
- SQLServer:sysobjects
- Oracle:dual
- PostgreSQL:
- Access:msysobjects
查看当前用户或权限
MySQL
查询当前用户
select user();
select substring_index(user(), '@', 1) ;
查询当前用户的权限
select * from mysql.user where user = substring_index(user(), '@', 1) ;
Access数据库是文件类型数据库,没有用户和权限的概念
SQLServer
判断是否是SA权限
select is_srvrolemember('sysadmin')
判断是否是db_owner权限
select is_member('db_owner')
判断是否是public权限
select is_srvrolemember('public')
Oracle
查看当前用户
select * from user_users;
查看当前用户拥有的角色
select * from session_roles;
查看当前用户拥有的权限
select * from session_privs;
PostgreSQL
select user #查看用户
select current_user #查看当前用户
ASCII转换函数
- MySQL:select char(97)
- SQLServer:select char(97)
- Oracle:select chr(97) from dual
- PostgreSQL:select chr(97)
- Access:select chr(97)
MySQL
SQLServer
Oracle
PostgreSQL
Access
select chr(97)&chr(100)&chr(109)&chr(105)&chr(110)