---
# System prepended metadata

title: Hacker101 CTF Postbook writeup

---

# Hacker101 CTF Web—Postbook writeup
### 目的
#### 近來我開始深入探索資訊安全領域，尤其對 CTF（Capture The Flag）的各種挑戰特別感興趣。因此決定參與 Hacker101 的 CTF 挑戰，並將解題過程與思路記錄下來，作為學習紀錄和日後參考的資料。

# 解題過程
### 初步分析

打開 Postbook 網站後，首先檢查了網頁的基本結構和功能。主要包括用戶註冊、登入、發佈貼文等基本功能。這些功能通常是 Web CTF 中常見的攻擊目標，因此需要特別注意。
![image](https://hackmd.io/_uploads/r1Vx6f2pR.png)

### 檢查各種網頁上的資訊
看完所有網頁功能後，我先註冊了一個帳號並登入看看網頁內容，登入後映入眼簾的是歡迎訊息和兩篇貼文。
![image](https://hackmd.io/_uploads/SkY-0M260.png)
我點入兩篇貼文查看詳細內容時，發現貼文的請求是使用 **GET 方法**，並且 id 作為參數傳遞給 ==view.php==。這種 URL 結構如下：
```view.php?id=<ID>```
### 潛在安全風險
如果網站在權限控制上存在缺陷，攻擊者可能通過直接修改 id 參數來訪問其他用戶的貼文或私密內容，這就是典型的**水平權限提升（Horizontal Privilege Escalation）** 的問題。這種漏洞主要是因為系統未對 id 參數進行充分驗證，導致用戶可以非法訪問未授權的資源。

在嘗試後發現，當id=2時有一個藏有SECRET的網站。
![image](https://hackmd.io/_uploads/rJPp4QhTR.png)
第一個==flag==

#### 當我嘗試更改貼文時
![image](https://hackmd.io/_uploads/B1VCje6T0.png)

第二個==flag==

在我看發文的HTML時發現。
![image](https://hackmd.io/_uploads/ryITal66A.png)
發貼文居然不用身分驗證?
![image](https://hackmd.io/_uploads/SJxYAgppR.png)
我嘗試竄改後發文。
![image](https://hackmd.io/_uploads/HJ32CgpTA.png)
第三個==flag==
##
題外話
![image](https://hackmd.io/_uploads/Skpk1-p6R.png)
一下子就三個了! 好開心 ( \^ω\^)
##
在我檢查登入的地方時，嘗試更改用來辨識用戶的cookie
![image](https://hackmd.io/_uploads/HJrkB-6TR.png)
很意外的是網頁沒有因為沒有這個用戶而重新跳轉，
而沒有因註冊帳號被分配的id，就不會有用戶名和密碼。

![image](https://hackmd.io/_uploads/BJNhBWa6A.png)
所以我用這個帳號發貼文，但發完後profile卻沒有貼文，由此推測貼文很有可能附屬帳號名。

![image](https://hackmd.io/_uploads/B1SDubapR.png)
![image](https://hackmd.io/_uploads/HJGgY-6pC.png)
帳號無法被設定，可能只能通過==sign_up.php==創建帳號。

![image](https://hackmd.io/_uploads/r1nB9-apC.png)
但通過創建和admin同名帳號確定了，貼文並不是附屬帳號名。
##
另外，我還測試了==delete.php==能不能在跨帳號或是無帳號下越權刪除。
![image](https://hackmd.io/_uploads/r1hqRST6R.png)
結果和==view.php==沒有身份驗證，屬於**水平權限提升**
![image](https://hackmd.io/_uploads/ryxh0S6p0.png)
第四個==flag==

## payload
再來我用網路上找的payload檢查了網站最有可能出現[XSS](https://github.com/payloadbox/xss-payload-list/blob/master/Intruder/xss-payload-list.txt#L22)，[SQL injection](https://stackoverflow.com/questions/24396712/how-to-get-id-from-url-using-phphttps://github.com/payloadbox/sql-injection-payload-list)的多個地方。

### 1. URL
![image](https://hackmd.io/_uploads/HknCSgp6R.png)
一系列測試後無果
### 2. 貼文
由於貼文測試無果，大小於符號都會以```&lt;``` ```&gt;```替換，所以先從用戶名入手。

![image](https://hackmd.io/_uploads/SyCicE66C.png)
這裡的"Usernames should be lowercase characters only."
只有使用前端HTML ```disable```，而不是後端處理。

![image](https://hackmd.io/_uploads/By5Y5NT6A.png)
創建貼文測試

![image](https://hackmd.io/_uploads/r1htjVTTC.png)
![image](https://hackmd.io/_uploads/HJpsTEaTR.png)

刷新後成功觸發alert(1)，但並沒有拿到flag，所以只能找找其他地方。
##
在找用戶id和用戶cookie的id有沒有關聯性時，發現用戶id MD5後就是用戶cookie。
![image](https://hackmd.io/_uploads/H1SiBq0TC.png)
所以我將admin的id使用MD5進行雜湊計算。
![image](https://hackmd.io/_uploads/Hk2yLcATC.png)
![image](https://hackmd.io/_uploads/SyLmu9Aa0.png)
第五個==flag==

順帶看了他的密碼
![image](https://hackmd.io/_uploads/rkLOKqR6R.png)

## 最後
在此次挑戰中，通過發現 URL 權限提升漏洞、貼文功能未經身份驗證的漏洞
後面還有兩個flag我找了很久看了提示才發現，分別是:
1.user帳號用的是弱密碼```password```
2.id=945還有一篇貼文

若筆記內容有誤，歡迎留言指點，謝謝。


## 查閱資料
https://developer.mozilla.org/zh-TW/docs/Web/API/Document_Object_Model
https://www.securityverse.tw/index.php/2023/05/30/elementor-1044/
https://zh.wikipedia.org/zh-tw/%E7%89%B9%E6%AC%8A%E6%8F%90%E5%8D%87
https://tech-blog.cymetrics.io/posts/jo/zerobased-cross-site-scripting/
https://stackoverflow.com/questions/24396712/how-to-get-id-from-url-using-phphttps://github.com/payloadbox/sql-injection-payload-list
https://github.com/payloadbox/xss-payload-list/blob/master/Intruder/xss-payload-list.txt#L22
https://zh.wikipedia.org/zh-tw/MD5
https://www.ez2o.com/App/Coder/MD5