*本文作者:小石,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
0×00 前言
WEB300 PokeMongo 这题主要考察的就是NoSQL的注入,附加上Bypass。
对于SQL注入攻击大家都耳熟能详了,但对于NoSQL就比较陌生了。
自MongoDB 2.4以后的版本采用V8引擎执行所有Java代码,允许同时运行多个Java操作,MongoDB提供了对Java的完整支持,如在Node.js、MongoDB服务器端和mongo shell里面都提供非常好的支持。
0×01正文
打开题目链接是一个登录框。
查看源代码,发现一行注释
得到hint
题目结合提示,应该是 MongoDB 用 JS 做查询,大概逻辑为
对于MongoDB JS可以看下这里
https://www.cnblogs.com/javaminer/p/3684695.html
this.username=='$username' && this.password=='$password'
用“逻辑或”绕过登录 这样表达式就变成了永真式
用户名admin 密码1′ || ’1 查询的逻辑大概就为
this.username=='admin' && this.password=='1' || '1'
登录之后提示要进行文件的读取 file/ReadMe.txt 但是要输入密码
于是返回 利用前面的逻辑表达式对 password 进行盲注 根据回显进行查询结果判断 算是个布尔盲注
1' || this.password[0]>'a
不嫌麻烦的手工..懒的就写脚本跑 得到密码后尝试读文件 文件内容说要在/etc目录下读文件
尝试读取 但是被过滤了 一阵fuzz 发现输入包含 ReadMe 且不以其开头 即可绕过
aaReadMe/../../../../../../../etc/passwd
又得到另一个提示 读取 /etc/init.d/apache2 即可拿到flag
0×02总结
对于SQL注入的攻击大家都已经非常重视,并且给出了许多防御的措施。但对于热度很高且流行的NoSQL注入攻击是容易被大家忽略的。
*本文作者:小石;本文属 FreeBuf 原创奖励计划,未经许可禁止转载。返回搜狐,查看更多
责任编辑: