webhacking.kr 一天五題系列 II
old-06
本題考點:Client-Side State Forgery(CSSF)、對稱編碼與混淆還原
題目給了一組 ID 和 PW,目前還不知道用途,先來看一下 source code:
1 |
|
可以發現它是用 cookie 來確認 id 和 pw 的值,在編碼的部分,首先會對原始值進行 20 次 base64 encode,接著使用符號替換掉 1~8 的數字,來作為 cookie 的值,而在 73 行可以看到,我們要將 id 設為 admin、pw 設為 nimda,所以一樣透過 source code 編碼的邏輯即可解決。
使用 Python 實作:
1 | import base64 |
填入 cookie 即可。
old-07
本題考點:WAF bypass、Probabilistic SQLi
題目是一個需要 auth admin 的介面,直接按會顯示 Access_Denied!,來看一下 source code:
1 |
|
我們可以先看到第 36 行的地方是進入 Admin Page 的條件,$data[0] == 2,再看到上方的隨機 SQL expression,意即要讓 lv=2,而 lv 受到 $go 控制。但再繼續往上看到第 13 行,限制了我們可以輸入到 $go 中的內容。
1 | /2|-|\+|from|_|=|\\s|\*|\//i |
根據上面的說明,他限制了以下幾點:
- 直接設定
$go=2 - 禁止表達式中出現
-、+、from、_、=、\s空白字元、*、/
因此我們需要嘗試使用其他字元來繞過他,這裡面並沒有限制 UNION、SELECT 等字的用法,不過因為限制空白字元,因此我們需要用括號來替代他。此外,因為限制直接輸入 2,因此可以用 LENGTH('aa') 來繞過,而括號閉合則有 rand=1,因此以該狀況來實作即可。完整表達式如下:
1 | select lv from chall7 where lv=(0)UNION(SELECT(LENGTH('aa'))) |
old-08
本題考點:HTTP 標頭惡意篡改、SQL Injection in INSERT/UPDATE
來看一下 source code:
1 |
|
我們的最終目標是讓 $ck[0]=="admin",而 $ck 的內容來自 $_SERVER['HTTP_USER_AGENT'] 的查詢,但我們只能透過 User-Agent 控制 $agent,因此可以看到下面的地方:
1 | if(!$ck){ |
這裡存在漏洞可以讓我們控制寫入的內容,並且直接將資料寫入資料庫中,因此我們可以先設定特殊的值給 $agent,透過 SQLi 控制參數讓 id=admin 後,再用特定的 User Agent 登入 admin。
Payload 如下:
1 | m3t30r', 'X.X.X.X', 'admin')# |
使用 BurpSuite 實作即可。
old-09
本題考點:SQLi with WAF bypass
題目上有三個連結,第三個點進去長這樣:
1 | Secret |
很明顯又是個 blind SQLi,來寫 code 吧。
我們可以用 if 表達式來設定在 true/false 下應該顯示的頁面來判斷,但這個參數 no 限制了 = 和某一些 ascii 的使用,因此我使用 like 來取代,並且用 hex 來取代 char 比對。
使用 Python 實作:
1 | import requests |
old-10
本題考點:Insecure Client-Side Logic
進到題目有點無俚頭,看一下source code:
1 | <table border="0" width="1800" style="background:gray"> |
看起來是個類似跑道的設計,然後我們必須讓 O 通過終點線 1600 px 處,但用按的每按一次只會前進 1 px,所以直接把 style 的 left 改為 1600 即可過關。
- Title: webhacking.kr 一天五題系列 II
- Author: Albert Huang
- Created at : 2026-06-13 15:06:57
- Updated at : 2026-06-26 14:08:16
- Link: https://blog.albert-web.tw/2026/06/13/webhacking-writeup-2/
- License: This work is licensed under CC BY-NC-SA 4.0.