SQL手工注入漏洞测试(MongoDB数据库)

漏洞简介

在这里插入图片描述

在这里插入图片描述

注意到该页面url处的id参数,该参数处就存在一个MongoDB的注入点。
此外,题目还给予了我们源码,如下所示:
在这里插入图片描述

漏洞复现

要对该站点进行SQL注入,首先需要研究该站点的源码。从该站点源码可以看出,我们传入的id参数的数据直接拼接到了MongoDB的数据查询语句中,这样我们就可以通过控制id参数的方式,来进一步实现SQL注入。此外,注意到下方倒数第三、四行处,可以看出显示的字段为title和content。
基于上述源码,与MySQL数据库的SQL注入方式相同,我们先闭合之前的查询语句,并且插入我们自己的查询语句。从query参数的构造可以看出,我们需要使用

'})

来进行闭合,之后,我们只需要写一个return语句,来返回我们所需要的内容。这样,无论id参数后面查询了什么,由于只返回我们构造的return的内容,因此原来的查询结果不会对我们的SQL注入返回造成影响。
我们依据上述原理,构造id参数如下所示:
id=1%27});%20return%20({title:1,content:%272

在这里插入图片描述

从上述结果可以看出,我们构造的payload可以成功在页面上回显。
之后,我们首先来查看MongoDB数据库中有哪些数据表。将上述payload中的title内容(也可以是content)换成tojson(db.getCollectionNames()),其中db.getCollectionNames()是MongoDB数据库中用于查询数据表的函数,tojson()函数是将其转换成json格式返回。
修改后的payload如下所示:

id=1%27});%20return%20({title:tojson(db.getCollectionNames()),content:%271

在这里插入图片描述
最后,我们需要查询数据表内的数据,我们猜测Authority_confidential为记录用户名、密码的数据表(当然了,如果猜不对还可以测试别的表),因此我们来查询该数据表内的数据,MongoDB数据库的数据表查询位db.Authority_confidential.find(),根据该语句构造的payload如下所示:

id=1%27});%20return%20({title:tojson(db.Authority_confidential.find()[1]),content:%271

在这里插入图片描述

解密拿到key
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值