AI協作解CTF

ChatGPT 出來一陣子之後,除了軟體開發以外,我們這些 CTF 愛好者也有討論過 AI 能不能解題,但那時大家都不看好,覺得這能力太弱了,除非題目難度太低,否則解不了。

過了兩三年,現在 AI 在軟體開發上突飛猛進,跟那時已經完全無法比了。雖然仍然有其侷限性,但拿來解 CTF 的題目成效如何呢?

最近我的隊友 zeyu 拿了某個 CTF 試了一下,crypto 類的題目用 o3 可以全部解掉,web 類的題目雖然不能直接解,但是在幫助看 code 上可是幫了大忙。

其中有一題很有趣,他允許你在 python 檔案中插入註解,檔案內容為:

print(“hello”)

{comment}

print(“byebye”)

{comment} 是你可以控制的檔案內容,但不能有換行,代表你無法跳出 comment,而最後這檔案會用 python3 main.py 去執行,而你的目標是透過構造 comment 來執行任意程式碼。

要執行程式碼,但又沒辦法跳出註解?聽起來似乎不太可能,但這就是 CTF 好玩的地方了,把看似不可能的東西變得可能。

zeyu 看到題目後嘗試了幾個 idea,例如說有沒有可能是 parser bug ,可以允許註解在沒有換行的狀況下被跳出?或是 python 其實除了 .py,也可以執行 .pyc,有沒有可能透過插入的文字構造出一個合法的 pyc 檔案?

這兩個想法都滿合理的,但要驗證都需要實際去看 source code,看 python 到底怎麼運作的,這時 AI 就幫上忙了。zeyu 用的是他們自己客製化過的 AI agent,但原理跟你用 claude code 或是開 cursor 差不多,就給一個 prompt 然後讓 AI 自己去找相關的 code,最後總結給你。

雖然上面這兩種 idea 都不是正確答案,但在驗證的過程中 AI 幫了不少忙。

那答案是什麼呢?

答案是如果你有一個壓縮檔 test.zip,裡面有個 main.py,當你執行 python test.zip 時,python 會自己幫你解壓縮然後執行 main.py,就是這麼神奇 🤩

因此這題就是要在發現了這個神奇的特性之後,用 comment 把整個檔案變成一個合法的 zip,就能執行任意 python 程式碼。這部分用想的就覺得很麻煩,要先去看 zip 的 format(雖然對很多有些 CTF 的人應該不陌生就是了🤣 ),這時 AI 也能恰到好處地幫上忙。

以上就是個跟 AI 一起協作來解 CTF 題目的故事。在 AI 出現前,上面這些都是人要自己去操作,自己去追 source code 去寫 exploit,當 codebase 很大的時候,勢必要花不少時間。

而現在有 AI 幫你做這些事情,省了很多時間。

先不論 AI 能不能幫你完全把 code 寫出來,或是寫出來的品質如何,這是另一個話題,但至少在看 code 這件事情上,AI 是確實很有幫助的,這點我完全認同。

以前面對一個超大的 codebase,無論是從頭開始找,還是從尾巴開始找,要把兩邊接起來都不是件容易的事。例如說你看到某個頁面疑似有 XSS,要找這個值的來源在哪裡,要一層一層往上追,有些還不好追。

現在我都直接問 AI,讓他幫我把整個路徑拼湊出來。就算沒有一次成功,通常也能給我一些新的方向或是檔案,我再跟 AI 彼此互相扶持,一步一步把答案找出來。

完整原文,裡面有不少技術的細節,

評論