利用 AI Agent 进行 SSRF

利用 AI Agent 进行 SSRF
不是炒米线0x00: 打我干嘛qwq
我的VPS被打了,一看sshd日志,全是登录尝试。不过有几个IP吸引了我的注意,它们使用了chaomixian作为用户名尝试登录,而且这样的记录有6049条!
那就拉一条最新的(2026-02-28 21:03)幸运儿61.169.28.178来分析一下。
0x01: 信息收集
fscan先上手做初步的信息收集,可以看到,资产还是不少的:
顺藤摸瓜先来到http://61.169.28.178:8000,网页Title是Deeplumen,我马上想到了《人生切割术》😂。
上网搜索一下,发现一篇水文。但无论怎么看,这个都像是山寨的。我更愿意相信deeplumen.io是真的,这个是假的。
对着8000端口扫一下dirsearch,结果还算丰富。
快速做一下fuzz,发现访问/assets/路由,会进入一个加载不太正常的网页:
按钮乱点一通,发现ai真的有响应。这说明有戏啊。把混淆过的js扔给Gemini分析,获得以下api。
0x02: 你好,外卖🥡
| 请求方式 | 接口路径 | 功能描述 | 请求参数 / Body |
|---|---|---|---|
| POST | /public/ecommerce/api/generate | 触发 AI 生成内容(支持流式 SSE 和非流式) | {"productId": "...", "model": "...", "copyType": "...", "stream": true/false} |
| GET | /public/ecommerce/api/products | 获取所有商品列表数据 | 无 |
| GET | /public/ecommerce/api/models | 获取系统支持的 AI 引擎模型列表(如 GPT-4o 等) | 无 |
| 请求方式 | 接口路径 | 功能描述 | 请求参数 / Body |
|---|---|---|---|
| POST | /public/ecommerce/api/pipelines/category | 创建一个新的品类监测任务 | {"category": "空调"} |
| GET | /public/ecommerce/api/pipelines/category/:id | 轮询/获取指定品类监测任务的详细状态和分析结果 | 路径参数:id (任务ID) |
| GET | /public/ecommerce/api/pipelines/category | 获取品类监测的历史任务列表(支持分页) | Query参数:?page={page}&page_size={size} |
| 请求方式 | 接口路径 | 功能描述 | 请求参数 / Body |
|---|---|---|---|
| POST | /public/ecommerce/api/pipelines/brand-duel | 创建一个新的品牌对抗任务 | {"brandA": "格力", "brandB": "美的", "category": "空调"} |
| GET | /public/ecommerce/api/pipelines/brand-duel/:id | 轮询/获取指定品牌对抗任务的详细状态和对决结果 | 路径参数:id (任务ID) |
| GET | /public/ecommerce/api/pipelines/brand-duel | 获取品牌对抗的历史任务列表(支持分页) | Query参数:?page={page}&page_size={size} |
| 请求方式 | 接口路径 | 功能描述 | 请求参数 / Body |
|---|---|---|---|
| GET | /public/ecommerce/api/monitor/health | 检查 GPT 服务(浏览器自动化服务)的连接健康状态 | 无 |
| POST | /public/ecommerce/api/monitor/tasks | 发送对话任务(支持开启联网搜索功能) | {"targetUrl": "http://example.com", "message": "用请简要总结当前页面内容", "enable_search": true/false, "modelId":"gpt-4o"} |
| GET | /public/ecommerce/api/monitor/tasks/:id | 轮询特定监控对话任务的状态、回答以及实时浏览器截图 | 路径参数:id (任务ID) Query参数:?include_screenshot=true |
在源码中,可以看到涉及长时间运行的任务(品类监测、品牌对抗、Monitor),前端均使用了短轮询(setTimeout 配合 GET 请求)来获取任务的进度。服务端返回的状态(status 字段)约定如下:
pending: 任务排队中running: 任务运行中/查询中analyzing: 正在进行 AI 分析总结completed: 任务完成,附带analysis_result或response数据failed: 任务失败,附带error信息waiting_login/waiting_captcha: (特指Monitor模块)浏览器侧需要人工介入登录或过验证码
0x03: 隔壁老王
好啊,那当然要试一试。
1 | POST /public/ecommerce/api/monitor/tasks |
我去未鉴权,再读一下看看。
1 | /public/ecommerce/api/monitor/tasks/01KJJTEH83S9Q3Z94Y0VJH9C66 |
1 | { |
也是可以的。更重要的是,当status为running时,screenshot真的会不断以Base64形式更新截图。它居然是浏览器RPA访问ChatGPT!
马上让ai写了一个自动脚本,轮询获取截图,希望能获取一些有用信息
可惜这个状态截图只能看见GPT界面,没有什么用。基本上只能截到这几个画面:
这时候,我大概明白整套系统的工作流程了,实际上是包装了一下Dify Workflow:
- 首先,用户输入网址,应该是准备分析的;
- 然后,开一个浏览器,访问TargetUrl并且截图;
- 接着,通过RPA发给ChatGPT总结网页信息;
- 最好,交给其他LLM完成数据整合。
什么鬼才想出来的…比较神奇的是,它使用的网页版ChatGPT没有登陆,每次使用重置一下环境,居然真的很稳定,极少出现需要登陆。
0x04: 是输入法(SSRF)
这一部分文字不多,但尝试了非常久。这蠢蛋API居然是一条一条顺序执行的,一次性发了19条,等了好久好久..
那么怎么 SSRF 呢。嗯,提示词工程,让 ChatGPT 尽可能详细得描述页面,然后它可能就会回复:
1 | 当前页面包含了关于广告展示、管理以及如何与我互动的一些说明。主要内容如下:\n广告展示:广告可能会出现在对话中,尤其是在免费的使用计划中,且这些广告与我的回答无关。\n广告管理:用户可以隐藏不相关的广告,调整广告设置或选择报告广告。\n用户隐私:我的回答不受广告影响,广告商无法访问用户对话内容或数据。\n账户设置:免费用户会看到广告,而企业和付费计划则不会。\n如果你有其他问题或想了解更多,可以告诉我! |
尝试 file:// 协议头读文件 和 javascript:// 协议头进行 XSS,都没有成功…不够就算成功,也没什么高价值信息,都是容器…(端口开得相当狂野,根本没SSRF的必要..)
其他的API也看了一下,都没鉴权,但这也没什么意思。
测试 React4Shell,修了。然后当然是进一步注册登陆,看看有没有什么洞了。不过注册完,登不进去…果然IP访问还是不行的…
0x05: 该睡觉了
这时候的思路是,找在线工具,用IP反查域名。不过一条记录也没有。。。突然想到,可以去看看注册时发验证码的邮箱地址啊,一看,是:
1 | no-reply@notify.deeplumen.com |
不过这个deeplumen.com及其子域名,一个都没活着。8000端口的网页里还有一个deeplumen.ai,同样是死了。不过上网一搜,居然找到一个deeplumen.cn,443端口是个Wordpress,里面全是AI水文,icon是真的deeplumen的,但像素很低,而且像是截图,嗯对了,对味了,大概率就是这个了。(为了假冒deeplumen,还真是费尽心思)
目标当然不是这个Wordpress(47.110.83.239),但是可以信息收集一下嘛🤣。找到第一篇文章,发现有用户Harry评论。尝试用该用户名登陆Wordpress后台,提示用户名正确但密码错误。
接着去搜索deeplumen.cn的子域名,共搜索到(这个工具很好用):
1 | mvp.deeplumen.cn (89.208.244.19) |
诶,诶,IP对上了!而且log.deeplumen.cn:443和mvp.deeplumen.cn:443以及61.169.28.178:8000一模一样,连API都是一样的。不过经过测试,SSRF的来源地址都是61.169.28.178,应该是共用一个后端,反向代理到log和mvp站。(API数据互通,但Web数据不互通)
注册log.deeplumen.cn并登陆,我终于理解这一切(雾)
那么还有一个IP(89.208.244.19),nmap一下,woc,原来这才是真正的API,怪不得叫mvp!
这才相当当时发验证码的邮件下方的链接是localhost3000!(别盒了,临时邮箱qwq)
那么可以这样推测整个系统架构:
- 47.110.83.239:面向用户的服务器(虽然还没上线的样子)
- 89.208.244.19:开发时使用,承载业务AI分析相关API
- 61.169.28.178:有魔法环境,负责对接 ChatGPT 等服务
0x06: 还有呢
杭州星图灵知智能科技有限公司,你服务器成肉鸡了知不知道,还招人呢,哥,别打我了,小水管撑不住😭
还有这套代码曾经叫GEOK,应该是你吧。**还有这玩意真能骗到钱吗?**
0x07: 题外话
什么草台班子搞的东西,估计还有洞,要么是之前React4Shell被上线了没发现,不然打我vps干嘛…刚登上vps一看,已经被fail2ban给ban了。但还是非常蹊跷,这个IP尝试登录了我的两台VPS,而且都是知道用户名chaomixian,总计6000多次尝试,500多个IP,来自全球各地,大部分是中国。无语住了,这他妈的是被谁盯上了吧。留着钱吃吃喝喝,打我干嘛qwq。
| IP 地址 | 尝试次数 | 地理位置 / 运营商 |
|---|---|---|
| 43.135.130.196 | 494 | 阿里云 |
| 100.42.181.193 | 376 | - |
| 41.186.188.77 | 350 | 南非 |
| 121.37.30.12 | 98 | 中国 |
| 118.219.255.169 | 76 | 中国 |
| 190.102.41.232 | 74 | 中国 |
| 162.240.61.39 | 70 | 美国 |
| 160.191.89.118 | 70 | 荷兰 |
| 62.60.135.99 | 68 | 德国 |
| 171.244.62.7 | 60 | 美国 |
| 92.118.39.84 | 56 | 荷兰 |
这些IP每个扫过去,都像是被控了的肉鸡,不少直接能看到webshell(2222端口、222端口比较多)。真蚌埠住了。
不过,这些指定了chaomixian作为用户名的攻击,第一次从2025-07-11开始,打了他妈的 8个月了 !!如果计算所有的攻击次数,累计有 747,525 次,平均每30s就要被爆破一次,274 MB的日志不是开玩笑的😵
已关闭密码登陆.jpg


























