
Language Sloth Sloth Bot 1.0 ist anfällig für Directory Traversal in den Funktionen gif() und png(). Die Funktionen erstellen Dateipfade mit nicht bereinigtem Benutzereingaben für den Parameter 'name', was Angreifern ermöglicht, auf Dateien außerhalb der vorgesehenen Ressourcenverzeichnisse zuzugreifen.
Der Discord-Bot "The Language Sloth" ist in den Funktionen gif() und png() anfällig für Directory Traversal. Die Funktionen erstellen Dateipfade unter Verwendung von unbereinigtem Benutzereingabe für den Parameter 'name', sodass Angreifer auf Dateien außerhalb der vorgesehenen Ressourcenverzeichnisse zugreifen können.
Die Funktionen "gif" und "png" in der Datei files.py sind anfällig für Directory Traversal, da sie "open" verwenden, um Dateien lokal vom Server abzurufen, der den Bot hostet. Die folgenden Payloads ermöglichen jedem Discord-Benutzer das Abrufen von ".gif"- und ".png"-Dateien, die irgendwo auf dem Server gehostet werden, der den Bot hostet.
async def gif(self, ctx, name: str = None):
'''
(ADM) Sends a gif from the bot's gif folder.
:param name: The name of the gif file.
'''
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("**File not found!**")
async def png(self, ctx, name: str = None):
'''
(ADM) Sends a png from the bot's png folder.
:param name: The name of the png file.
'''
await ctx.message.delete()
try:
await ctx.send(file=discord.File(f'./png/{name}.png'))
except FileNotFoundError:
return await ctx.send("**File not found!**")
Der name-Parameter wird direkt in den Dateipfad interpoliert, ohne Validierung oder Bereinigung:
f'./gif/{name}.gif'
f'./png/{name}.png'
Beispiel-Payloads:
z!gif ..\..\..\..\Windows\filename
z!png ..\..\..\..\Windows\filename

Das obige Bild zeigt die Extraktion eines Bildes, das sich unter C:\Windows\cat.gif befindet.