【网络安全】记一次网站站点渗透
前言
遇到一个站,后端是 Node.js 写的,对于这种类型的站点,一般比较难 getshell,但也实现了最终的目标,拿到后台权限
信息搜集
先进行常规的信息搜集,子域名扫描、端口扫描、目录扫描等
![](https://static001.geekbang.org/infoq/53/536f5ed0616b88dc6f99bb12155a7770.png)
这个站后端脚本语言是 Node.js
![](https://static001.geekbang.org/infoq/cf/cf0a2217329e6266ac72397e677e0401.png)
【一>所有资源获取<一】1、网络安全学习路线 2、电子书籍(白帽子)3、安全大厂内部视频 4、100 份 src 文档 5、常见安全面试题 6、ctf 大赛经典题目解析 7、全套工具包 8、应急响应笔记
目录探测发现 404 界面也极像 Node.js 的 404 页面,后面重点关注 js 文件
![](https://static001.geekbang.org/infoq/01/0169070df3d30f3ee8a5781294487d84.png)
突破接口
在进行目录扫描的时候,发现了一个有用的目录:
![](https://static001.geekbang.org/infoq/69/69f905ff93d1b203d74ef183523339ab.png)
前面说了,重点关注 js 文件,查看页面源代码,发现一个有趣的 js 文件,为什么说这个文件有趣呢?因为这个 js 的文件名和产品名一致
![](https://static001.geekbang.org/infoq/f6/f626d7c835335ee7590b7f1c11d6cc21.png)
进去之后发现了新世界
![](https://static001.geekbang.org/infoq/bf/bf8b0ecd27600a4efd6053e2596bcd93.png)
这个网站的前端界面都是通过在 js 文件里 document.write 函数构造
![](https://static001.geekbang.org/infoq/07/07f3ebdc7e5e1aa52fe01bd24d89b604.png)
页面动态渲染的数据是通过 js 函数中 ajax 请求获取
![](https://static001.geekbang.org/infoq/2f/2f808c9af7b64db6933ef6ad42a194f4.png)
核心的所有功能接口都是未授权访问的,根据不同的 js 文件里的 ajax 请求,使用 postman 直接构造数据包,即可实现后台相对应的功能
![](https://static001.geekbang.org/infoq/60/60926f40d487fa93771658c2ce6b38e3.png)
登陆后台
通过上述接口,可以通过用户的 uid 获取用户的用户名,将所有的用户名作为字典,放入 burp 爆破弱口令
![](https://static001.geekbang.org/infoq/cd/cdc775478639f7aa1554554dd334d769.png)
![](https://static001.geekbang.org/infoq/6b/6bb303299846d03a60c1036de123145f.png)
分析后台登陆包,密码被加密了
![](https://static001.geekbang.org/infoq/a7/a7914907ca3e2645ff17ea729156067c.png)
在 js 中找到加密方式,截取的是 16 位的 md5
![](https://static001.geekbang.org/infoq/f9/f980e041975e3f161b00a883bb7d5190.png)
根据 js 代码里的 if 逻辑可以很清楚的看到:返回包 code 值为 101100 是密码错误,200 就是登陆成功,
![](https://static001.geekbang.org/infoq/96/96072001625fde80e8fb70f787c73821.png)
成功爆破出多个用户存在弱口令
密码错误:
![](https://static001.geekbang.org/infoq/6e/6e199685a9e3c3de8a53572936793efb.png)
密码正确:
![](https://static001.geekbang.org/infoq/c1/c16f67e7d379be09edab691da9959f7f.png)
进入管理员后台
利用爆破的用户登陆后台,发现不是管理员权限
![](https://static001.geekbang.org/infoq/ba/ba0eea2887b8a964f008894286be1bfd.png)
但是继续阅读 js 代码,发现存在如下的代码:登陆成功后 data.code == 200,再根据返回包的 agentClass 值,可以控制显示的是管理员界面还是客服界面还是一级、二级用户界面。由于是前端判断且通过 document.write 函数渲染界面,因此可以前端绕过,直接修改返回包中的 agentClass 值为管理员的值,就可以进入到管理员界面,且后端所有接口也都如上面一样不存在鉴权,因此管理员的后台所有功能都可以使用 agentClass=1 时:
![](https://static001.geekbang.org/infoq/2c/2cffbe8de5805e36458c0f5b9c1ef8ab.png)
agentClass=2-4 时:
![](https://static001.geekbang.org/infoq/38/387f4a7522c10fddbc34e7e21db2085c.png)
那么只要修改返回包的 agentClass=1 即可
![](https://static001.geekbang.org/infoq/c2/c26e3107693aabaa4872e5e8dcd3d494.png)
![](https://static001.geekbang.org/infoq/ff/ffa71ddf2a76aac5c5e54c9761201861.png)
成功进入管理员后台
![](https://static001.geekbang.org/infoq/24/2450ddc43967f5a77c94e1f546352a17.png)
结语
到此结束此次的学习。
评论