墨者学院刷题笔记——SQL手工注入漏洞测试(MongoDB数据库)

今天继续给大家介绍Linux运维相关知识,本文主要内容是SQL手工注入漏洞测试(MongoDB数据库)。

一、题目简介

我们这里采用墨者学院的MongoDB数据库渗透测试题目,其地址为:https://www.mozhe.cn/bug/detail/YXlRYUJPYk1vQjAreHlweVAyMzVTUT09bW96aGUmozhe
开启后,页面如下所示:

点击该下方的新闻处,可以来到如下页面:
墨者学院刷题笔记——SQL手工注入漏洞测试(MongoDB数据库)_第1张图片
注意到该页面url处的id参数,该参数处就存在一个MongoDB的注入点。
此外,题目还给予了我们源码,如下所示:
墨者学院刷题笔记——SQL手工注入漏洞测试(MongoDB数据库)_第2张图片

二、漏洞利用

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

'})

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

id=1%27});%20return%20({title:1,content:%272

访问后,结果如下:
墨者学院刷题笔记——SQL手工注入漏洞测试(MongoDB数据库)_第3张图片
从上述结果可以看出,我们构造的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

使用该payload后,得到的页面回显如下所示:
墨者学院刷题笔记——SQL手工注入漏洞测试(MongoDB数据库)_第4张图片
最后,我们需要查询数据表内的数据,我们猜测Authority_confidential为记录用户名、密码的数据表(当然了,如果猜不对还可以测试别的表),因此我们来查询该数据表内的数据,MongoDB数据库的数据表查询位db.Authority_confidential.find(),根据该语句构造的payload如下所示:

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

利用该payload执行产生的回显如下所示:
墨者学院刷题笔记——SQL手工注入漏洞测试(MongoDB数据库)_第5张图片
从上图中,我们可以得到一个用户名mozhe和密码的md5加密值,我们对该md5进行解密,结果如下所示:
墨者学院刷题笔记——SQL手工注入漏洞测试(MongoDB数据库)_第6张图片
我们利用该用户名和密码登录系统,结果如下所示:
墨者学院刷题笔记——SQL手工注入漏洞测试(MongoDB数据库)_第7张图片
注意看最下方的数值,可以看出我们得到了最后的KEY值。

你可能感兴趣的:(渗透测试,数据库,sql,mongodb)