tencent-connect / bot-docs

QQ频道机器人文档
MIT License
224 stars 254 forks source link

点击md文本中的链接后被发送了一条消息, 这功能是否涉及注入攻击? #205

Closed shynome closed 6 months ago

shynome commented 7 months ago

这是一段文本 这是一个按钮

今天碰到一条消息, 点击里面的按钮后会向发送一条 我是男娘 的消息, 这按钮在用户不知情的情况下进行了操作, 感觉是个大漏洞


官方修了就会close的,官方没关就是还没修或者没看GitHub,官方不看GitHub那关不关也就无所谓了


这 issues 在 Recent activity 中看着碍眼, 关了. 早该有官方人员回复的, 但直到现在都没有, 我不知道这是什么原因但这足以让我对QQ开发组感到心灰意冷, 这效率未免太过于低下了

自从使用了QQ收入就如同跌入了魔窟, 花费的时间太多得到的回报太少, 基于此, 我同时也将停止使用QQ

ToyoLiu commented 7 months ago

这个消息怎么发出来呀

HangR00 commented 7 months ago

同问

a-Void-Deer commented 7 months ago

这似乎是一条消息中内嵌了一个markdown,但是还没看出来是怎么做到的…求高手qwq markdown:[这是一个按钮] (mqqapi://aio/inlinecmd?command=%E6%88%91%E6%98%AF%E5%B0%8F%E7%94%B7%E5%A8%98&reply=false&enter=true)

mou-luo commented 7 months ago

cy,有人会踢我

StreeOVO commented 7 months ago

cy,有人会踢我

taskschd-E5 commented 7 months ago

这是一段文本 这是一个按钮

今天碰到一条消息, 点击里面的按钮后会向发送一条 我是男娘 的消息, 这按钮在用户不知情的情况下进行了操作, 感觉是个大漏洞

我也是

windandcqq commented 7 months ago

QQBot那边传来的?qq频道的相关的信息可以转发到正常的聊天吗

youli42 commented 7 months ago

屏幕截图 2024-05-01 175808](https://github.com/tencent-connect/bot-docs/assets/142669632/a7ff157b-a50a-4ab7-9b8b-3ce618418190) 使用OneNote编辑,同时在所有设备上测试均无法转发和编辑发送,大佬们加油,感觉有意思 电脑版本: 9.9.7-21804 (64位) 手机版本:V 9.0.30.15995

更新: 电脑版本: 9.9.9-23159 (64位)时,不可转发,但右键复制可以获取链接 手机版本:V 9.0.50.16545,可以转发,但转发后内容为:

这是一条md消息

这是一个按钮
[图片]

这是说明QQ在测试makedown文本的功能吗?

tsiyukino commented 7 months ago

所以点击的时候会自动@发送人,是把发送人当作qqBot了

rayquazaMega commented 7 months ago

QQBot那边传来的?qq频道的相关的信息可以转发到正常的聊天吗

奇怪的是,有些人可以转发,正常用户则不能。怀疑他们的客户端经过修改

也许是某些QQ版本存在这种漏洞,我们可以测试一下是哪些QQ版本或者平台可以转发该消息,以便在有可能的情况下更好地复现问题。我的版本是安卓V 9.0.17.15190,无法转发相关内容

a-Void-Deer commented 7 months ago

QQBot那边传来的?qq频道的相关的信息可以转发到正常的聊天吗

奇怪的是,有些人可以转发,正常用户则不能。怀疑他们的客户端经过修改

可以正常转发,并且客户端没有经过修改(9.0.50.16495)。第一个转发的可能是修改的客户端,但是后续是否能转发应该就是版本问题了。

ToyoLiu commented 7 months ago

手机端升级最新版本后可以转发 但是没有实际功能

tsiyukino commented 7 months ago

安卓9.0.50版本可以转发且有实际功能;电脑qqnt,ios低版本无法转发;ios高版本9.0.50转发没有实际功能

201793 commented 7 months ago

正常用户也可以转发。但是奇怪的是有人发出来的有效的转发后就无效了,有的人发出来的转发后还有效。

tsiyukino commented 7 months ago

安卓9.0.50版本可以转发且有实际功能;电脑qqnt,ios低版本无法转发;ios高版本9.0.50转发没有实际功能

我问了朋友让他们试了下,好像同样是安卓9.0.50也有人转发不了🤨;还有人用macbook点击会显示“该机器人不在群聊中”,但他点击另外一个同样的消息就可以正常发送

njueducn commented 7 months ago

一个有意思的bug,有人复现了吗

wwwyq07 commented 7 months ago

鸿蒙转发有效

Keika0724 commented 7 months ago

我今天也碰到了,很好奇原理一路找到了这里,消息也无法转发,求问大神具体细节

njueducn commented 7 months ago

我今天也碰到了,很好奇原理一路找到了这里,消息也无法转发,求问大神具体细节 哈哈我也一路找过来的

njueducn commented 7 months ago

这是操作要求,有谁尝试一下吗 markdown 模版 要求操作人在该子频道具有发送消息和对应 Markdown 模版 的权限。 调用前开发者需要先在“QQ开放平台-机器人-发布设置-消息模板”入口为对应机器人创建申请Markdown消息模板,得到模板 id ,在请求时填在对应的 markdown.template_id 上。 模板参数暂不支持数组。 消息体中所包含的URL需要报备并通过验证,方可使用。

WoodenP1ckaxe commented 7 months ago

看样子注入攻击是做不到的 但确实能诱导用户发送一段消息 image

shigu666 commented 7 months ago

客户端版本:8.9.93(正式版发布前的内测版,未升级) 0点前可以正常转发,0点后不能转发,疑似被下发云控或类似物,本人基于mirai的机器人(登录协议安卓平板8.9.63)遇到此消息提示需要前往最新版手机QQ查看

shigu666 commented 7 months ago

客户端版本:8.9.93(正式版发布前的内测版,未升级) 0点前可以正常转发,0点后不能转发,疑似被下发云控或类似物,本人基于mirai的机器人(登录协议安卓平板8.9.63)遇到此消息提示需要前往最新版手机QQ查看

现在仍然可以转发

然而我不行,长按无转发按钮,多选后转发提示暂不支持转发/收藏机器人消息

BuShouFan commented 7 months ago

QQNT PC 9.9.7-21804可以通过多选转发该消息

samas3 commented 7 months ago

pc QQNT 9.9.9-22961,无法转发消息

samas3 commented 7 months ago

且复制不能获得消息(奇怪的是昨天还可以

chiakimio commented 7 months ago

今天又遇到了,可以转发了,并且复制之后只能得到文本,无法得到原始消息内容了。

glzat commented 7 months ago

今天有一个新的指令: [xxx文本](mqqapi://aio/inlinecmd?command=我是小南梁&reply=true&enter=true)

当前版本:9.9.9-22961 (64位)

在这个版本中,文本呈现出蓝色超链接的样式,点击后会自动发送一些不雅文本

上面也有人说了,这大概是内嵌Markdown实现的,应该是类似超链接的东西,不涉及到注入攻击,利用了qq机器人的功能

但本人不才,不知道指令具体是什么意思

把英文翻译一下,大概是内嵌控制台,再自动按下回车

qq bot官方文档中,qq给出的指令是这样的: [/回车指令](mqqapi://aio/inlinecmd?command={urlencode(/回车指令)}&reply=false&enter=true)

希望大家多多提防,也希望qq官方加强对qq机器人使用规范的审查

glzat commented 7 months ago

这里贴上qq文档原文: 1. 回车指令格式(点击后,文本直接发送)

嵌入文本使用格式:

[/回车指令](mqqapi://aio/inlinecmd?command={urlencode(/回车指令)}&reply=false&enter=true)

客户端解析为:/回车指令 用户可点击的标签

当然,如果你选择引用这个超链接,便会"原形毕露",其指令就会显示出来

youli42 commented 7 months ago

一个新的指令又出来了,看上去肯定是有方法的,以下是特征: test 电脑端( 9.9.9-23159 (64位))选择回复时可以看到文本内容: test3 点击后效果也就是上面的截图

问题在于:最初的那个(这是一个按钮)我转发后仍然无效,而这个可以转发后正常使用了

KLuoNuoYa commented 7 months ago

一个新的指令又出来了,看上去肯定是有方法的

应该能做带白名单的拦截吧,正常情况下除了Bot不会发这个,拦截Bot外的账号就行

WoodenP1ckaxe commented 7 months ago

一个新的指令又出来了,看上去肯定是有方法的,以下是特征: test 电脑端( 9.9.9-23159 (64位))选择回复时可以看到文本内容: test3 点击后效果也就是上面的截图

这个有点区别 改成reply=true了 引用的话只会显示 [暂不支持该消息类型]

KeadeNF commented 7 months ago

区别有但不大,手机端看的是[暂不支持该类型消息],但电脑端依旧可以看到真面目()

mujinfa commented 7 months ago

复刻不出来

ProjectCF commented 7 months ago

电脑经典qq显示成[暂不支持该消息类型,请用手机QQ查看] 并且转发会变成"[暂不支持该消息类型,请用手机QQ查看]"的文本

007Run commented 7 months ago

本人电脑新版qq和移动端都可以触发,发送指令,并且转发也能正常触发。 但个别群友无法转发。 以及新版电脑端触发会发送消息,但是消息类型为引用。 19355029765db5addaf2c60cc7d917cc

youli42 commented 7 months ago

本人电脑新版qq和移动端都可以触发,发送指令,并且转发也能正常触发。 但个别群友无法转发。 以及新版电脑端触发会发送消息,但是消息类型为引用。 19355029765db5addaf2c60cc7d917cc 我也是这个,但是我点击后和原先的相同

3421917199 commented 7 months ago

是的目前有很多,但是来自哪里?

Image_1714646170430 这么多

3421917199 commented 7 months ago

希望腾讯可以把md语言使用权像telegram一样公开,对点击后调用API或者链接的进行一些限制,但是允许用户使用加粗斜体大字号,这样也方便阅读更加清晰明了,但是就现在来看,网上泛滥的消息都是点击后发送黄文的,很影响qq的生态环境

rayquazaMega commented 7 months ago

我正在尝试在频道中用自己的机器人复现这个东西,尽管使用markdown是需要申请的,我使用的脚本如下:

import os

import botpy
from botpy import logging

from botpy.message import DirectMessage, Message
from botpy.types.message import MarkdownPayload, MessageMarkdownParams
from botpy.types.announce import AnnouncesType
from botpy.ext.cog_yaml import read

#test_config = read(os.path.join(os.path.dirname(__file__), "config.yaml"))

_log = logging.get_logger()
from botpy.interaction import Interaction

class MyClient(botpy.Client):
    async def on_ready(self):
        _log.info(f"robot 「{self.robot.name}」 on_ready!")

    async def on_direct_message_create(self, message: DirectMessage):
        print(message.id)
        '''await self.api.post_dms(
            guild_id=message.guild_id,
            content=f"机器人{self.robot.name}收到你的私信了: {message.content}",
            msg_id=message.id,
            msg_type = 2
        )'''
        params = [
            MessageMarkdownParams(key="title", values=["标题"]),
            MessageMarkdownParams(key="content",
                                  values=["为了成为一名合格的巫师,请务必阅读频道公告", "藏馆黑色魔法书"]),
        ]
        markdown = MarkdownPayload(custom_template_id="65", params=params)
        await self.api.post_message(channel_id=channel_id, markdown=markdown, msg_id=message.id)

    async def on_at_message_create(self, message: Message):
        if "/私信" in message.content:
            dms_payload = await self.api.create_dms(message.guild_id, message.author.id)
            _log.info("发送私信")
            await self.api.post_dms(dms_payload["guild_id"], content="hello", msg_id=message.id)

if __name__ == "__main__":
    # 通过预设置的类型,设置需要监听的事件通道
    # intents = botpy.Intents.none()
    # intents.public_guild_messages=True

    # 通过kwargs,设置需要监听的事件通道
    intents = botpy.Intents.none()
    intents.public_guild_messages = True
    intents.direct_message = True
    intents.guild_message_reactions = True
    intents.guilds = True
    intents.interaction = True
    client = MyClient(intents=intents)
    client.run(appid, secret)

参考https://github.com/tencent-connect/botpy/blob/master/examples/demo_at_reply_markdown.py 暂时我还没有成功输出markdown消息(提示channel不存在,不知道什么情况),但是使用注释中的代码能够跟自己的机器人私信对话。

BuShouFan commented 7 months ago

image 有时会出现此类提示

BuShouFan commented 7 months ago

image

image 有时会出现此类提示

MaxwellLorentz commented 7 months ago

有大佬成功复现吗?

hejiehao commented 7 months ago

从小米应用商店下载的 V 9.0.50.16545 可以转发

shiolife commented 7 months ago

目前是有很多的,但是来自哪里?

图片_1714646170430 这么多

使用QN模块复制会出现些什么..依稀记得是by XXX好像?

shiolife commented 7 months ago

顺便,我手机的版本是9.0.50.16495的oppo qq分身,电脑是9.9.9-22868,截止今早都无法转发

qffylqwq commented 7 months ago

Windows 9.9.8-22401 转发不了...

AkahaOff commented 7 months ago

有这个情况 源码点坤坤变长10cm 但是QQBot网站上又是/回车指令

XiaoheiAG commented 7 months ago

大抵是qqbot的一个漏洞了

weng1277 commented 7 months ago

这个issue的标题已经被断章取义的变成盗号漏洞了