Ant X D^3 CTF 2021 8-bit pub
SCTF做到一道挺有意思的题,听晨曦✌说跟这题类似
直接找到对应的signin的部分
跟进user.signin
使用的是sql的占位符,无法直接注入
当我们传入Object的时候,参数会被转化成key=value
的格式拼⼊
可以构造万能密码,传入后登录成功,进入admin
1 | {"username":"admin","password":{"password":true}} |
登录后发先邮件功能,源码如下
这里使用了shvl进行对象的属性及赋值问题
poc
1 | const shvl = require('shvl'); |
diff两个版本的源码
将__proto__
过滤了,可以用constructor.prototype
来bypass
利用nodemailer
跟进send函数,使用的是nodemailer发送邮件
查看源码
全局搜索child_process
1 | lib/sendmail-transport/index.js |
跟进path从哪来的
options从前面实例化的时候传入
args
args也是从上面赋值
那么这两个参数都可以被污染
继续跟踪options.sendmail
这里实例化了刚才跟踪的类,所以需要使
1 | option.sendmail=True |
1 | sendmail -> true |
所以就可以命令执行了,可以反弹shell,也可以发邮件
1 | { |
1 | { |
用attatchment带出
1 | { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yiyi!
评论