【漏洞学习】聊天机器人安全漏洞实战:服务器端JavaScript注入探秘

前言

在如今的网络应用中,聊天机器人随处可见,无论是各类应用还是客服系统,都能看到它的身影。今天咱们就来聊聊聊天机器人的安全问题,看看怎么在测试中发现它的漏洞,甚至让它彻底没法用。我们会在安全的环境下,用故意留有漏洞的OS 2 Shop测试应用来操作。

1 探索聊天机器人与初步分析

1.1 与聊天机器人互动

打开OS 2 Shop的支持聊天功能,就能看到聊天机器人。简单和它聊几句,它会回复我们。登录后,页面还显示了一个token,不过现在先不管它,我们主要任务是找漏洞,让聊天机器人彻底失效。

1.2 查看源码找线索

动手前,先打开浏览器开发者工具的Sources面板。

搜索"chatbot"关键字,发现一些相关文件引用,其中"get chatbot status"文件挺有意思。

这个文件有处理消息、返回响应等基础功能,但我们更想知道怎么利用它找到漏洞。

2 认识服务器端JavaScript注入漏洞

2.1 漏洞原理

这次要利用的是服务器端JavaScript注入(SSJI)漏洞。简单讲,当Web应用把用户没处理过的输入,直接拼接到服务器端JavaScript解释器动态执行的字符串里,就会出现这个漏洞。它和XSS有点像,不过XSS攻击用户浏览器,SSJI能让攻击者在应用服务器上直接运行任意代码,常见于Node.js环境。

2.2 易受攻击函数

常见易受攻击的函数有eval、setTimeout等,在服务器端模板注入(SSTI)里可能见过eval,它在SSJI里也适用。还有像child process模块里的exec、spawn、fork这些系统交互函数,处理不好会导致操作系统命令注入,不过我们重点关注评估函数。

3 确认技术栈与关键函数

3.1 确定技术栈

用Wappalyzer插件查看OS 2 Shop的技术栈,发现用的是Node.js和Angular。

3.2 寻找关键函数

既然是Node.js,就找找哪些评估函数可能导致SSJI。借助AI,输入"列出Node.js中可能导致SSJI漏洞的函数",得到了一些响应。

虽然它列出了eval,但我们发现VM模块更适合演示。VM模块本是在独立上下文运行代码,类似沙箱,可攻击者能从VM上下文中逃逸回主Node.js进程。

VM模块里的runInContext、runInNewContext和Script这几个函数很关键,攻击者常利用原型链从这个"沙箱"逃逸回主进程。

4 阅读源码找注入点

4.1 源码阅读技巧

如果做渗透测试有源码权限,一定要会读源码。要是在漏洞赏金场景没源码,通过分析技术栈也能找线索。

像使用Node.js且有客服聊天功能的应用,都可以试试找这个漏洞。

4.2 定位关键文件

打开OS 2 Shop的GitHub页面,进入routes目录找到chatbot相关文件。

chatbot.ts文件里的initialize chatbot函数负责初始化聊天机器人和加载训练数据,set username函数接收用户输入并传给库函数,这个文件主要处理HTTP通信。

在应用里用开发者工具网络面板,发送消息"Hey",能看到请求JSON体和响应。这些UI交互在chatbot.ts处理,后端逻辑在另一个文件。

5 找到关键后端逻辑与构造payload

5.1 关键后端逻辑

打开index.ts文件,发现它导入了VM模块,这就给了我们逃逸"沙箱"注入payload的机会。

我们的目标是禁用聊天机器人,所以关注addUserTokenNameVoid函数里的factory.run,它把用户输入放进JavaScript模板字符串,再传给factory.run用VM模块当作实时代码执行,和eval原理一样。

5.2 构造payload

就像绕过XSS那样,通过添加引号闭合字符串来注入payload。在记事本构造payload,先设用户名为admin,闭合圆括号和分号,添加语句设process.query为null,再添加分号,调用users.addUser添加随机用户ID和用户名test。

复制payload到OS 2 Shop聊天输入框回车,成功解决"永久禁用聊天机器人"挑战,机器人对所有用户失效。

6 payload原理与总结

6.1 解释payload原理

为啥设process.query为null呢?回到chatbot.ts文件,要是bot值为null,机器人就没响应。所以我们先设它为null,又添加了新用户到数据库。

这样既禁用了聊天机器人,还注册了自己的用户。

6.2 总结

以上就是这次分享的SSJI漏洞利用实战。对Node.js安全测试或聊天机器人漏洞挖掘感兴趣的话,强烈推荐用OS 2 Shop靶场练习,能在不破坏真实系统的情况下,学会服务器端代码注入技巧。

7 视频讲解

链接:https://www.youtube.com/watch?v=ofnf1wpO3x8

相关推荐
Highcharts.js1 小时前
Highcharts React 5.0 正式版:支持 ES 模块化、组件更精简、开发体验全面升级
前端·javascript·react.js·elasticsearch·前端框架·highcharts
hexu_blog1 小时前
前端VUE后端java实现智能抠图
前端·javascript·vue.js·java处理抠图·vue实现智能抠图
光影少年2 小时前
react的useRef 作用:获取DOM、保存可变数据、区别 createRef
前端·javascript·react.js
你很易烊千玺12 小时前
日常练习-数组 字符串常用的场景
前端·javascript·字符串·数组
存在的五月雨12 小时前
Vue3项目一些语法
前端·javascript·react.js
大家的林语冰13 小时前
Node 2026 发布,JS 三大新功能上线,最后一个奇偶版本
前端·javascript·node.js
三*一13 小时前
Mapbox GL JS 自研面要素整形工具开发实录
开发语言·javascript·arcgis·ecmascript
我的世界洛天依14 小时前
胡桃讲编程|续篇!用高数 + JS ES262 硬核解构:求乐正绫的值
javascript