#PHP_Shell #Obfuscation
یکی از راه حل های همیشگی این مسائل مبهم سازی #Shell هستش, یکی از راه های بسیار جالب مبهم سازی بر بستر زبان #PHP استفاده از پیوست کاراکتری هستش که البته بصورت مستیم نباید انجام بشه, قبل از توضیح کامل دو نکته را به یاد داشته باشید مقدار
root@unk9vvn:~#
Arrayroot@unk9vvn:~#
نکته دوم, در تصویر پست به این گونه عمل شده که اول رشته
https://gist.github.com/unk9vvn/4d6da81db718e0c9dc65f202480da9f1
@Unk9vvN
یکی از راه حل های همیشگی این مسائل مبهم سازی #Shell هستش, یکی از راه های بسیار جالب مبهم سازی بر بستر زبان #PHP استفاده از پیوست کاراکتری هستش که البته بصورت مستیم نباید انجام بشه, قبل از توضیح کامل دو نکته را به یاد داشته باشید مقدار
[]
معادل Array
میباشد میتوید با دستور زیر خودتان تست کنید,root@unk9vvn:~#
php -r "echo ''.[];"
PHP Notice: Array to string conversion in Command line code on line 1Arrayroot@unk9vvn:~#
نکته دوم, در تصویر پست به این گونه عمل شده که اول رشته
Array
را درون متغییرهای پویا ریخته و سپس مقدار 0 رو با استفاده از تکنیک '@'=='!'
که چون شرط صحیح درخواهد آمد بدست آوردیم, در مراحل بعدی شروع به پیمایش کاراکتر اول Array
که خانه 0 هستش کردیم که معادل حرف A هستش این پیمایش به قدری انجام میشود که به کاراکتر مورد نظر ما برسد, و بدین ترتیب همانطور که در انتهای کد میبینید رشته ()ASSERT
و [_]POST_$
را ساخته تا از ویژگی تابع ()ASSERT
به عنوان شل استفاده کنیم.https://gist.github.com/unk9vvn/4d6da81db718e0c9dc65f202480da9f1
@Unk9vvN
#LFI2RCE on #Metasploit
تا به حال با آسیب پذیری #Local_File_Inclusion رو به رو شده اید؟ یکی از چالش های این آسیب پذیری این است که فقط میتواند فایل های یک سرور را با آن خواند,
البته ما در پست های کانال های خصوصی چندین روش در خصوص گرفتن دسترسی با استفاده از کد سمت سرور به فایل های لاگ سرور قربانی و با صدا و دادن پارامتر به آن تشریح کرده ایم, اما آن روش ها منوط به شرط هاییست,
در این میان استفاده از اکسپلویت #php_include فریمورک #Metasploit میتونه با تمامی آن شرایط ها پایلود ریزی خودش رو انجام بده مانند تصویر پست,
https://www.offensive-security.com/metasploit-unleashed/php-meterpreter/
@Unk9vvN
تا به حال با آسیب پذیری #Local_File_Inclusion رو به رو شده اید؟ یکی از چالش های این آسیب پذیری این است که فقط میتواند فایل های یک سرور را با آن خواند,
البته ما در پست های کانال های خصوصی چندین روش در خصوص گرفتن دسترسی با استفاده از کد سمت سرور به فایل های لاگ سرور قربانی و با صدا و دادن پارامتر به آن تشریح کرده ایم, اما آن روش ها منوط به شرط هاییست,
در این میان استفاده از اکسپلویت #php_include فریمورک #Metasploit میتونه با تمامی آن شرایط ها پایلود ریزی خودش رو انجام بده مانند تصویر پست,
https://www.offensive-security.com/metasploit-unleashed/php-meterpreter/
@Unk9vvN
#Type_Juggling & #Object_Reference on #PHP_Object_Injection
جالب است بدانید که در خصوص پایلود پایلود ریزی مثلا مقادیر Serialize شده پارامتر کوکی هم میتوان در خصوص دور زدن مکانیزم احراز هویت اقدام به اکسپلویت کردن آسیب پذیری هایی مانند Type_Juggling کرد,
به کد آسیب پذیری سمت چپ بالا دقت کنید, بصورت واضح دیده میشه که کوکی تنظیم شده بر روی auth در پارامتر Cookie قراره که در تابع ()unserialize ترجمه و در شرط زیرین پارامترهای username و password رو با مقادیر متغیرات مقابل را مقایسه و در صورت صحیح بودن متغیر admin$ رو معادل True قرار میدهد
خب اولین نکته اینجاست که compare استفاده شده از نوع loose هست که به معنی در نظر نگرفتن نوع داده های مقایسه هست که همین موضوع موجب آسیب پذیری است
در تصویر پست سمت چپ پایین میبینید که یک آرایه تعریف شده با دو value که b:1 هستند به معنیه Boolean True که همین Value که یک DataType محصوب میشه موجب مقایسه True == String میشه و نتیجه آنکه خروجی Condition میشود True و به این صورت متغیر admin$ برابر True خواهد بود
آسیب پذیری سمت راست رو هم به خودتون میسپارم...
@Unk9vvN
جالب است بدانید که در خصوص پایلود پایلود ریزی مثلا مقادیر Serialize شده پارامتر کوکی هم میتوان در خصوص دور زدن مکانیزم احراز هویت اقدام به اکسپلویت کردن آسیب پذیری هایی مانند Type_Juggling کرد,
به کد آسیب پذیری سمت چپ بالا دقت کنید, بصورت واضح دیده میشه که کوکی تنظیم شده بر روی auth در پارامتر Cookie قراره که در تابع ()unserialize ترجمه و در شرط زیرین پارامترهای username و password رو با مقادیر متغیرات مقابل را مقایسه و در صورت صحیح بودن متغیر admin$ رو معادل True قرار میدهد
خب اولین نکته اینجاست که compare استفاده شده از نوع loose هست که به معنی در نظر نگرفتن نوع داده های مقایسه هست که همین موضوع موجب آسیب پذیری است
در تصویر پست سمت چپ پایین میبینید که یک آرایه تعریف شده با دو value که b:1 هستند به معنیه Boolean True که همین Value که یک DataType محصوب میشه موجب مقایسه True == String میشه و نتیجه آنکه خروجی Condition میشود True و به این صورت متغیر admin$ برابر True خواهد بود
آسیب پذیری سمت راست رو هم به خودتون میسپارم...
@Unk9vvN
#Unserialize #Use_After_Free #PHP_Internal
یکی از مواردی که در دوره تست نفوذ وب تیم تحقیقاتی Unk9vvN بهش بصورت ویژه پرداخت میشه، مبحث کشف آسیب پذیری های Binary مبتنی بر کامپایلر زبان PHP خواهد بود که بر بستر مقادیر Serialize امکان رخدادش وجود داره،
برای مثال در مقادیر Serialize شدن یک آرایه، امکان رزرو حافظه Heap بوجود خواهد آمد و از طرفی در مقادیر Serialize شده یک سمبل معادل اشاره گر Reference وجود داره که در تصویر ، در متغیر
بصورت خلاصه امکان رزور یک حافظه مبتنی بر تعریف ArrayObject وجود داره و امکان اینکه اون رو آزادش کنیم و بعد با استفاده از R بزرگ که نشان Reference هستش، به Element مورد تعریف حافظه Heap اشاره کرده و بنوعی آسیب پذیری Use After Free رو در حافظه بوجود بیاریم، این عملکرد اشتباه Garbage Collector هستش.
البته تا به امروز روش و تکنیک های متعددی در این مبحث مطرح شده که پیشنیاز فهمشون ، کتاب PHP Internals هستش، که ما بصورت مفصل در دوره تست نفوذ وب بخش Insecure Deserialization به این موضوع خواهیم پرداخت.
@Unk9vvN
یکی از مواردی که در دوره تست نفوذ وب تیم تحقیقاتی Unk9vvN بهش بصورت ویژه پرداخت میشه، مبحث کشف آسیب پذیری های Binary مبتنی بر کامپایلر زبان PHP خواهد بود که بر بستر مقادیر Serialize امکان رخدادش وجود داره،
برای مثال در مقادیر Serialize شدن یک آرایه، امکان رزرو حافظه Heap بوجود خواهد آمد و از طرفی در مقادیر Serialize شده یک سمبل معادل اشاره گر Reference وجود داره که در تصویر ، در متغیر
exploit$
اون انتهای مقادیر Serialize شده بصورت یک R بزرگ میبینیدشبصورت خلاصه امکان رزور یک حافظه مبتنی بر تعریف ArrayObject وجود داره و امکان اینکه اون رو آزادش کنیم و بعد با استفاده از R بزرگ که نشان Reference هستش، به Element مورد تعریف حافظه Heap اشاره کرده و بنوعی آسیب پذیری Use After Free رو در حافظه بوجود بیاریم، این عملکرد اشتباه Garbage Collector هستش.
البته تا به امروز روش و تکنیک های متعددی در این مبحث مطرح شده که پیشنیاز فهمشون ، کتاب PHP Internals هستش، که ما بصورت مفصل در دوره تست نفوذ وب بخش Insecure Deserialization به این موضوع خواهیم پرداخت.
@Unk9vvN
#Obfuscation #PHP
یکی از روش های مبهم سازی کد PHP که کمتر مورد توجه قرار گرفته است صدا زدن توابع به صورت String می باشد. در عکس اول یک کد با همین روش مبهم سازی شده، در این کد
@Unk9vvN
یکی از روش های مبهم سازی کد PHP که کمتر مورد توجه قرار گرفته است صدا زدن توابع به صورت String می باشد. در عکس اول یک کد با همین روش مبهم سازی شده، در این کد
shell_exec
اول base64 شده و در سه متغیر a، b، c تعریف شده است، در متغیر z این موارد کنار هم قرار گرفته اند و درون متغیر z مقدار c2hlbGxfZXhlYw
را دریافت می کنیم که base64 شده تابع shell_exec می باشد. در متغیر f مقدار base64_decode
که ما بین آن چندین بار As-
تکرار شده، در خط آخر با استفاده از str_replace
مقدار As-
را از متغیر f حذف می کنیم و نتیجه این کار کد زیر می شودecho base64_decode($z)("dir");
با decode کردن مقدار z کد تبدیل به شکل زیر می شودecho "shell_exec"("dir");این تنها دو نمونه ساده از این نوع مبهم سازی است.
@Unk9vvN