记一次Node.js站点渗透

前言

遇到一个站,后端是Node.js写的,对于这种类型的站点,一般比较难getshell,但也实现了最终的目标,拿到后台权限

信息搜集

先进行常规的信息搜集,子域名扫描、端口扫描、目录扫描等

20220304105858-093d6572-9b67-1

这个站后端脚本语言是Node.js

20220304112417-9309f880-9b6a-1

目录探测发现404界面也极像Node.js的404页面,后面重点关注js文件

20220304112611-d6a51bba-9b6a-1

突破接口

在进行目录扫描的时候,发现了一个有用的目录:

前面说了,重点关注js文件,查看页面源代码,发现一个有趣的js文件,为什么说这个文件有趣呢?因为这个js的文件名和产品名一致

20220310110807-4f560a3e-a01f-1

进去之后发现了新世界

20220310110930-806d992a-a01f-1

这个网站的前端界面都是通过在js文件里document.write函数构造


记一次Node.js站点渗透

页面动态渲染的数据是通过js函数中ajax请求获取

20220304114029-d64fe3aa-9b6c-1
$.ajax({
    url: host + "/agent/getPlayerInfo",
    type: "post",
    dataType: 'json',
    headers: {"content-type" : "application/json"},
    data: JSON.stringify({"uid" : uid})
  }).done(function(data){
    console.log(data);

核心的所有功能接口都是未授权访问的,根据不同的js文件里的ajax请求,使用postman直接构造数据包,即可实现后台相对应的功能

20220310111356-1f6cc1b8-a020-1

登陆后台

通过上述接口,可以通过用户的uid获取用户的用户名,将所有的用户名作为字典,放入burp爆破弱口令

20220304124413-bdb636ec-9b75-1
20220304123600-978d6464-9b74-1

分析后台登陆包,密码被加密了

20220304123354-4c77c078-9b74-1

在js中找到加密方式,截取的是16位的md5

20220304123709-c084503a-9b74-1


成功爆破出多个用户存在弱口令

密码错误:

20220304124845-5fa23974-9b76-1

密码正确:

20220304124707-25032bc0-9b76-1

进入管理员后台

利用爆破的用户登陆后台,发现不是管理员权限


记一次Node.js站点渗透

但是继续阅读js代码,发现存在如下的代码:登陆成功后data.code == 200,再根据返回包的agentClass值,可以控制显示的是管理员界面还是客服界面还是一级、二级用户界面。由于是前端判断且通过document.write函数渲染界面,因此可以前端绕过,直接修改返回包中的agentClass值为管理员的值,就可以进入到管理员界面,且后端所有接口也都如上面一样不存在鉴权,因此管理员的后台所有功能都可以使用
agentClass=1时:

20220304125954-ee89310a-9b77-1

agentClass=2-4时:

20220304130152-350a1e14-9b78-1

那么只要修改返回包的agentClass=1即可

20220304130647-e4921256-9b78-1
20220304130751-0ad92a12-9b79-1

成功进入管理员后台

20220310173031-ba9dee76-a054-1


本文转载自https://xz.aliyun.com/t/10978,只做本站测试使用,本文观点不代表安强科技社区立场。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年3月15日 下午1:47
下一篇 2022年3月15日 下午2:25

相关推荐

发表回复

您的电子邮箱地址不会被公开。