# PicoCTF writeup ###### tags: `CTF` `資安` ## 一些簡介(?) 這是一份不怎麼專業的writeup >< 但絕對是手把手 一定讓你看懂的 題目幾乎都來自於 [PicoCTF](https://play.picoctf.org/practice) 希望能給剛開始學的人有一個可以看中文writeup的地方 適用於剛入門CTF的資安初學者 因為想讓大家最後都是透過自己解出來的 所以flag都只截一半的圖 ((才不是沒截好呢 有空就會更新! 但我也不是真的很厲害 所以解的題目也都偏簡單嗚嗚嗚嗚 ## 前言 不知道怎麼開始的話可以先看看[這份簡報](https://docs.google.com/presentation/d/1AY87AT3e-vbSz-f1EjOb6Y8AEL5WMhybahw4zSqlxcU/edit?usp=sharing)! (( 超級簡單的簡介跟實作 另外下面是各種資源們! - [高中職生資安研習營-SecurityFoscusOnline2023](https://github.com/MyFirstSecurity2020/SecurityFoscusOnline2023) - [資訊培訓相關資源彙整 Awesome CS Training](https://github.com/goodjack/awesome-cs-training) - [台灣資安 / CTF 學習資源整理](https://github.com/Ice1187/TW-Security-and-CTF-Resource) ## 一定要先知道的指令 - 下載檔案 --> **wget 網址** - 打開執行權限 --> **chmod +x** 遇到Permission denied的時候用 - 看自己現在有哪些檔案 --> **ls** - 印出檔案內容 --> **cat 檔名** - 前往 --> **cd 檔案路徑** p.s. 常用 cd ./檔名or資料夾名稱 - 執行 --> **./檔名** p.s. python檔用 **python3 檔名** - 解壓縮 --> **unzip 檔名** p.s. 第一次用要先 `sudo apt-get install unzip #下載套件` - 找關鍵字 --> **strings 檔名 | grep 關鍵字** - 編輯檔案 --> **vim 檔名** - alt + shift + : + i --> 開始編輯 - alt + shift + : + w --> 存檔 - alt + shift + : + qa! --> 直接離開 ## 一些解題常客 ### 不知所措題 不知道是什麼的檔案能用記事本都用記事本先開! 再來就是strings配grep ### 圖片題 先丟 [fotoforensics](https://fotoforensics.com/),再丟binwalk ### Crypto #### 古典密碼學 看不出來就先丟 [Cipher identifier](https://www.dcode.fr/cipher-identifier) ,沒找到再自己猜 / 查 - base32 特徵:英文大寫或數字 - base64 特徵:英文大小寫或數字還有==結尾 - 新手常碰到ㄉ凱薩:這個直接丟線上工具解 - 還有一些常見的古典密碼,可以自己去找找 - 好用的online decoder - [dcode.fr](https://www.dcode.fr/) - [cryptii](https://cryptii.com/pipes/caesar-cipher) ### Web - F12一生推 - 有輸入框可以考慮injection - 睜大眼睛看網址 - 可以改網址位址:像在後面加個/admin之類的 - 都不行就丟Burp Suite看看 ## General Skills ### Python Wrangling :::info :bulb: **:** 跑python的指令 ::: 1. 看到它是python檔 --> 用python跑跑看 2. 它叫我用 ende.py -e或-d 3. 先用-e 但它噴出一串怪東西 4. 再試試看-d flag就出來了 ![](https://i.imgur.com/EQaYmqY.png) ### Tab, Tab , Attack :::info :bulb: **:** Tab的自動填寫功能 ::: 1. 解壓縮 --> sudo apt-get install unzip #下載套件 unzip <檔案> 2. ls 看到解壓縮完的檔案Addadshashanammu 3. cd A 之後一直按Tab到最裡面的資料夾 4. ls 看檔名 5. ./執行檔案 ### Magikarp Ground Mission :::info :bulb: **:** ssh 、檔案路徑(cd) ::: 1. ssh 使用者名稱@ip -p <port\> --> ssh ctf-player@venus.picoctf.net -p 57710 2. ls 看看有什麼! 3. 照著指示做flag就出來ㄌ ![](https://i.imgur.com/Iqwb9TA.png) ### strings it :::info :bulb: **:** strings 、grep ::: 1. 下載檔案 2. `strings <檔案> | grep 關鍵字` --> `strings strings | grep pico` ### Glitch Cat :::info :bulb: **:** nc、python ::: 1. nc進去,拿到一個還沒轉成字串的flag 2. ctrl c 回自己的shell 3. 用python把flag轉出來 ![](https://i.imgur.com/5gu0toy.png) ### PW Crack 3 :::info :bulb: **:** 看程式碼! ! ! ::: 1. 打開python檔 --> vim <檔案> 或 nano <檔案> 或 cat <檔案> 2. 滑到最下面,出現一個pos_pw_list 3. 執行檔案,用這7組密碼試 ![](https://i.imgur.com/ER7Rs8K.png) ![](https://i.imgur.com/duadlsp.png) ### Big Zip :::info :bulb: **:** grep -r 用過的都說好用 ::: 1. 下載檔案(wget)然後解壓縮(unzip) 2. cd進資料夾big zip 3. 感覺可以用grep 4. 先下grep picoCTF{ 發現跑不出來 5. 看看grep --help 6. 發現有遞迴(-r)可以試試看 7. 下指令grep -r picoCTF{ ![](https://i.imgur.com/GsAqk13.png) ### flag_shop :::info :bulb: 整數溢位 int overflow ::: 1. 先來看看程式碼 ![](https://i.imgur.com/vSCSnsE.png) 2. 從黃色那行往上找發現 --> 可以藉由輸入number_flag更改account_balance的值 3. 如果要增加account_balance的值那就要讓total_cost變負數 4. 往上找發現total_cost = 900\*number_flag 5. 所以輸入number_flag的時候輸入很大的值 --> 發生溢位變成負數 6. 大概了解之後就可以nc進去試試看了 ![](https://i.imgur.com/QsAvJQK.png) ### PW Crack 4 :::info :bulb: **:** 看程式碼! ! ! 寫迴圈 ::: 1. 打開python檔 --> vim <檔案> 或 nano <檔案> 或 cat <檔案> 2. 滑到最下面,出現一個pos_pw_list 3. 他說正確答案在list裡,所以直接寫個迴圈讓他當user跑 (把list裡的密碼先hash_pw(),找出結果和correct_pw_hash一樣的,把那組pw叫user_pw存起來) 5. 最後再執行一次,flag就出來了! 修改原檔程式碼變成: (只截了要修改的地方) ![](https://hackmd.io/_uploads/Sk_6UxLUh.png) ![](https://hackmd.io/_uploads/B1AxvxI8h.png) ### PW Crack 5 :::info :bulb: **:** 讀檔暴搜! 字典攻擊! ::: 1. 一樣先看原程式碼跟他給的檔案們 2. 原始碼叫我們找出正確的密碼,給了一個字典檔 3. 推測應該是要用這個字典暴搜 4. 開始寫程式! - 可能遇到的困難: a. 讀檔要用 `.readlines()` 逐行讀取 b. 要再用`.strip()` 處理掉 \n 5. 找到正確密碼 `eee0` 6. 再執行 level5.py,輸入`eee0`,就拿到flag了! 修改原檔程式碼變成: (只截了要修改的地方) ![image](https://hackmd.io/_uploads/rJ1KL3tmA.png) ![image](https://hackmd.io/_uploads/HJxaUnF7A.png) ### mus1c :::info :bulb: 一個酷酷的神奇語言叫 rockstar &ensp; &ensp; [線上工具rockstar](https://codewithrockstar.com/online) 好像是官方網站吧>< ::: 1. 先看一下他給的檔案,檢查之後發現沒有藏東西 2. 偷看提示哈哈,他說 `Do you think you can master rockstar?` 3. google一下 `rockstar CTF`,跑出了一個網站 4. 把題目給我的歌詞丟進他的try it ! 5. 得到一串感覺是ascii的東西 6. 丟到 [dcode.fr](https://www.dcode.fr/ascii-shift-cipher) ,找到一個看起來是他想要的東西 7. 再用picoCTF{}包起來就是flag了! ![image](https://hackmd.io/_uploads/BkGYj2K7R.png) ![image](https://hackmd.io/_uploads/HkTBinFX0.png) ## Web ### GET aHEAD :::info :bulb: **:** 想看網頁的什麼都可以用curl指令 ::: 1. 看題目名稱他應該是把flag藏在HEAD裡 2. 打開cmd,先curl --help all看看應該要用什麼指令 3. 發現要用curl -I 網址 ![](https://i.imgur.com/kR2E7lL.png) 4. flag就出來了 ![](https://i.imgur.com/FhTO1ea.png) ### Cookies :::info :bulb: **:** 可以改cookies的資料! 還不改爆! ::: 1. 按F12 點application 再點cookies 2. 先隨便送一個東西出去 發現cookies value是-1 3. 改成1看看 ![](https://i.imgur.com/49WVBCG.png) 4. 再改成0看看 ![](https://i.imgur.com/jTGOL7m.png) 5. 發現他喜歡的餅乾會變 所以一直改數字有可能會跳出flag 6. 慢慢試 flag就出來了! ### Insp3ct0r :::info :bulb: **:** 神奇的F12 ::: 1. 按F12 點source 2. 點開網頁程式碼 3. 發現他只是把flag分三份放在html、css、js,所以只要複製貼上就好 ### Scavenger Hunt :::info :bulb: 更改網址前往目錄 &ensp; robots.txt : 阻止google進行抓取的隱藏文件 &ensp; .htaccess : Apache server下設置各種權限規則的隱藏文件 &ensp; .DS_Store : Mac OS X系統下儲存目錄自定義屬性的隱藏文件 ::: 1. 按F12 點sourse 2. 點開網頁程式碼 3. 發現他把flag的part1跟2放在html、css,所以先複製起來放著 4. 然後在js的註解看到 ``/* How can I keep Google from indexing my website? */`` --> 所以part3應該在robots.txt裡面 ![](https://i.imgur.com/XN413TY.png) 5. 他說這是Apache server 所以試試看part4是不是在.htaccess裡面 ![](https://i.imgur.com/rtZO19C.png) 6. 他說他用Mac,還可以Store a lot of info,所以試試看.DS_Store ![](https://i.imgur.com/1YcChKx.png) ### where are the robots :::info :bulb: robots.txt 是你的好朋友 ::: 1. 題目提到robots,所以直接看robots.txt 2. flag沒放在這裡,但看到了一串檔案路徑 ![](https://i.imgur.com/hOhlTMj.png) 3. 照著路徑過去就看到flag了 ![](https://i.imgur.com/A1yR0xw.png) ### Roboto Sans :::info :bulb: robots.txt 、base64 ::: 1. 先看一下source code,註解跟我說flag不在這 2. 再看一下robots.txt 3. 看到base64編碼過的東西 ![image](https://hackmd.io/_uploads/HJMW1BsfC.png) 4. 丟去online decoder解碼 5. 找到`anMvbXlmaWxlLnR4dA==`會變成`js/myfile.txt` 6. 從網址照著路徑過去flag就出來了! ### dont-use-client-side :::info :bulb:F12看一下 ::: 1. 有輸入框,可能是SQL injection 2. 發現不能用SQL injection 3. 看一下F12,他直接放在code上 4. 按照split順序自己接回去就有flag了 ![](https://i.imgur.com/YkS32w4.png) ### Some Assembly Required 1 :::info :bulb: ~~雖然他說要看組合語言,但有時候靠運氣就行(?)~~ ::: 1. 依舊是先看F12 2. 都看看,發現他直接把運行程式碼給我了,但看不太懂 3. 繼續隨便看看,看他會不會直接把flag放在這裡 4. 啊哈! 被我找到了 ![](https://i.imgur.com/27YQKkF.png) ### logon :::info :bulb: F12的network可以看傳了什麼東西出去 ::: 1. 先用用看SQL injection,發現不行 2. 再看看他傳了什麼出去,看到他的admin是用布林值判斷的 ![](https://i.imgur.com/tKhD3oA.png) 3. 把admin的value改成True ![](https://i.imgur.com/PKctISj.png) 4. 然後重新整理flag就出來了 ![](https://i.imgur.com/ubI1vQ8.png) ### Search source :::info :bulb: 暴力解雖然很累但還是蠻好用的 ::: 1. 依舊是F12看看程式碼 2. 超多ㄟ,先到處亂看 3. 發現沒什麼進展,題目又叫我從source找 4. 只好認命開始找了 ![](https://i.imgur.com/2s0ywir.png) ### picobrowser :::info :bulb: 開發人員工具裡還有很多好用的工具 ! ! ! ! ::: 1. F12一定要開的吧,先開network按按鈕,看發生了什麼 2. 他說 You're not picobrowser! 3. 查一下怎麼改browser 4. 意外發現右上三個點點裡還有好多東西可以用 ![](https://i.imgur.com/YiLewzs.png) 5. 把user angent改成picobrowser再重新整理flag就出來了 ![](https://i.imgur.com/4EMau24.png) ### Client-side-again :::info :bulb: 程式碼超亂 --> 用Online JavaScript beautifier變好看 &ensp;&ensp;&ensp; 不知道變數是什麼 --> console幫你印出變數 ::: 1. 看看網站的source code,看到一坨看起來拼起來就是flag的東西 2. 先把他弄得好閱讀一點 3. 再用console把那些被存在_0x4b5b裡的東西弄出來 4. 照著他給的程式碼把flag拼出來 ![](https://i.imgur.com/VgP3GCf.png) ![](https://i.imgur.com/KrwKHMx.png) ![](https://i.imgur.com/eYbm4k7.jpg) ### MatchTheRegex :::info :bulb: 正規表達式 ![image](https://hackmd.io/_uploads/H1HICoPf0.png) ::: 1. 題目叫我們用正規表達式 2. 看了下source code發現它驗證完如果對了會alert flag 3. 直接試`picoCTF{*` ![image](https://hackmd.io/_uploads/HJKBhjvGA.png) ### Forbidden Paths :::info :bulb: 點點斜線攻擊Dot dot slash attack (( aka 路徑遍歷 &ensp; &ensp; 可看看這篇文章 [零基礎資安系列(五)-路徑遍歷(Path Traversal)](https://tech-blog.cymetrics.io/posts/jo/zerobased-path-traversal/) ::: 1. 有個輸入框,感覺就可以用injection 2. 發現輸入檔名他會印出文件內容 3. 輸入常見的路徑遍歷payload: `../../../../../../../flag.txt` - ../ 在linux指令的意思是退回前一層 (要退幾層都可以,不要退太少就好) - flag.txt 是題目跟我們說flag放的地方 4. flag就出來了! ## Crypto <tips\> 認識的密碼越多就越快認出來! 好用的工具 [Cipher identifier](https://www.dcode.fr/cipher-identifier) ### caesar :::info :bulb: 凱薩密碼 Caesar cipher 善用線上工具! [caesar online decoder](https://www.dcode.fr/caesar-cipher) ::: 1. 題目直接跟我們說caesar -> 直接丟caesar online decoder 2. flag就出來了 ### Mod26 :::info :bulb: ROT13 (( aka 位移量13的凱薩密碼 善用線上工具! [ROT13 online decoder](https://rot13.com/) ::: 1. 題目直接跟我們說ROT13 -> 直接丟ROT13 online decoder 2. flag就出來了 ### 13 跟上面那題Mod26一模一樣的解法 ### Mind your Ps and Qs :::info :bulb: RSA 善用線上工具! [RSA online decoder](https://www.dcode.fr/rsa-cipher) ::: 1. 題目給我們RSA的c, n, e 2. 直接丟RSA online decoder之後,flag就出來了 ### The Numbers :::info :bulb: A1Z26 Cipher 善用線上工具! [letter-number online decoder](https://www.dcode.fr/letter-number-cipher) ::: 1. 打開題目給的檔案!看到一串數字組成的flag 2. 知道開頭一定是picoCTF,所以找一下規律 3. 從C:3, T:20, F:6 發現好像是字母順序 4. 找一下字母順序的decoder然後丟上去 5. flag就出來了 (( 話說這題的flag是全大寫 `PICOCTF{自己去解><}` ### Easy1 :::info :bulb: 維吉尼亞密碼 Vigenère cipher 善用線上工具! [cryptii](https://cryptii.com/pipes/caesar-cipher) (( 記得是要decode哦 ::: 1. 打開它給我們的表 --> 直接認出來這是維吉尼亞密碼(Vigenère cipher) 2. 丟給線上工具解 `plain = UFJKXQZQUNB ; key = SOLVECRYPTO` 3. flag就出來了! ### Vigenere :::info :bulb: 維吉尼亞密碼 Vigenère cipher 善用線上工具! [cryptii](https://cryptii.com/pipes/caesar-cipher) (( 記得是要decode哦 ::: 1. 題目直接跟我們說他用Vigenere 2. 丟給線上工具解 `plain = 他給的檔案內文 ; key = CYLAB` 3. flag就出來了! ### rail-fence :::info :bulb: 柵欄密碼 Rail Fence Cipher 善用線上工具! [cryptii](https://cryptii.com/pipes/caesar-cipher) (( 記得是要decode哦 ::: 1. 題目直接跟我們說他用Rail Fence Cipher 2. 丟給線上工具解 `plain = 他給的檔案內文 ; key = 4` 3. flag就出來了! ![image](https://hackmd.io/_uploads/H1Zcry5GA.png) ### morse-code :::info :bulb: 摩斯密碼Morse Code 善用線上工具![DataBorder Morse Code Sound & Vibration Listener](https://databorder.com/transfer/morse-sound-receiver/) ::: 1. 直接把檔案丟進線上工具裡面 2. 然後再依照題目加上picoCTF{},把字母改成全小寫,空格處改成底線 3. flag就是它了! ### Tapping :::info :bulb: 摩斯密碼Morse Code 善用線上工具![morsedecoder](https://morsedecoder.com/) ::: 1. 一看就是摩斯,直接丟線上工具 2. flag就出來了 (( 這題的flag長得像這樣 `PICOCTF{你找到的東西}` ### la cifra de :::info :bulb: 維吉尼亞密碼 Vigenère cipher 善用線上工具! [dcode.fr](https://www.dcode.fr/vigenere-cipher) 不知道key是什麼可以用字頻分析 ::: 1. 先nc進題目,發現一串像flag的東西 2. 丟到 [dcode.fr 的 cipher-identifier](https://www.dcode.fr/cipher-identifier) 3. 找到它可能是 Vigenère cipher 4. 使用線上工具,透過知道明文含有picoCTF撈答案 ![image](https://hackmd.io/_uploads/BJ4WNDZ4R.png) ![image](https://hackmd.io/_uploads/HkV2XvbVA.png) ![image](https://hackmd.io/_uploads/SyTaQvZER.png) ### Flags :::info :bulb: 國際訊號程式碼系統 (International Code of Signals) 又稱為Navy Signals Code 善用線上工具! [dcode.fr](https://www.dcode.fr/maritime-signals-code) ::: 1. 打開檔案看到一堆旗子 2. google一下 `flag cipher`就找到了 3. 再用線上工具decode一下,flag就出來了 (( 這題的flag長得像這樣 `PICOCTF{你找到的東西}` ![image](https://hackmd.io/_uploads/H1qPDPWVA.png) ## Reverse ### file-run1 :::info :bulb: 指令file可看檔案類型 &ensp; &ensp;&ensp;指令chmod +x 可提升執行權限 ::: 1. 先用 **wget** 下載檔案 2. 用 **file** 看一下他是什麼檔 -> 發現是ELF檔(執行檔) 3. 用 **./檔名** 執行一下 -> 他說Permission denied 4. 用 **chmod +x** 提升一下執行權限 5. 最後再執行一次就有flag了! ![image](https://hackmd.io/_uploads/H1AkAxMTT.png) ### file-run2 :::info :bulb: `strings 檔名 | grep 關鍵字` 超好用! ::: 1. 先執行看看,它說少了argument所以不能執行 2. cat看一下,好吧沒有程式碼可以看 3. 使出萬用技巧 `strings ./run | grep picoCTF{*` 4. flag就出來了! ### vault-door-training :::info :bulb: 看看程式碼! ::: 1. 先用 wget 下載source code 2. 用 java 檔名 執行一下 --> 他說Permission denied 3. 用 chmod +x 提升一下執行權限 4. 不知道要輸入什麼,但可以知道等等要去看判斷函數怎麼寫 5. 用cat 檔名 看一下code 6. 他直接給flag了 ![image](https://hackmd.io/_uploads/BJbo_CsJC.png) ### vault-door-1 :::info :bulb: 看看程式碼! ::: 1. 照著程式碼把它組回去就可以了 跟web的dont-use-client-side 做法一樣 &ensp; &ensp; ((我用excel直接對著數字填進格子,就不用照著順序去查表了 ![image](https://hackmd.io/_uploads/HkM3Qe-XA.png) ### transformation 1. 看它的題目之後自己寫一個exploit --> 但失敗了 2. 看提示他說有線上工具 3. 在[線上工具](https://string-functions.com/encodedecode.aspx)上慢慢試,然後就出來了 ![image](https://hackmd.io/_uploads/H1ezQLuzA.png) #補個我寫失敗的exploit ![image](https://hackmd.io/_uploads/Hk0ON8dfA.png) ![image](https://hackmd.io/_uploads/SkSH4I_zA.png) #再補個[別人寫成功的exploit](https://medium.com/@CYberVIaz/pico-ctf-transformation-writeups-a5496cb3377b) p.s.我其實看不懂為什麼character2那行要[-1],[-1]不是反轉嗎 ![image](https://hackmd.io/_uploads/H1SEr8OGR.png) ### crackme-py :::info :bulb: 1. 看source code &ensp; &ensp; 2. [ROT47 online decoder](https://www.dcode.fr/rot-47-cipher) ::: 1. 看到source code裡面放著secret 2. 下面說它用ROT47 decode 3. 直接丟ROT47 online decoder 4. flag就出來了! ![image](https://hackmd.io/_uploads/SyjFMD_G0.png) ### Shop :::info :bulb: 整數溢位 可以看[這篇文章](https://hackmd.io/@sa072686/cp/%2F%40sa072686%2FB1tr_OtOS) ::: 1. 因為之前遇過類似題目所以我就直接照著直覺試 2. 到Sell an item,賣東西賺錢 3. fruit flag的錢最多,所以賣它 4. 但因為我們沒東西可以賣所以物品數量那邊輸入負數 6. 之後發現金額改變了,變成負數 7. 因為整數有可能會溢位,所以推測數量輸入的負數如果很大就能把剩下的錢錢變正數 8. 經過一番測試之後發現它收的input應該也是整數,所以輸入的時候不能輸太小 9. 我用`-100000000`試兩次就成功獲得錢錢了 10. 再拿這些錢去買 11. fruit flag就得到一串東西了 12. 看起來是Ascii值,再把它轉成文字就得到flag了! ![image](https://hackmd.io/_uploads/rkYukx-X0.png) ## Binary Exploitation ### buffer overflow 0 :::info :bulb: buffer overflow 可以看看這篇簡介 [[Day23] 攻擊行為-緩衝區溢位 Buffer Overflow](https://ithelp.ithome.com.tw/articles/10188599) ::: 1. 看一下source code ```c = #include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #define FLAGSIZE_MAX 64 char flag[FLAGSIZE_MAX]; //目標是要進這裡 void sigsegv_handler(int sig) { printf("%s\n", flag); fflush(stdout); exit(1); } //這個input只需要16 void vuln(char *input){ char buf2[16]; strcpy(buf2, input); } int main(int argc, char **argv){ FILE *f = fopen("flag.txt","r"); if (f == NULL) { printf("%s %s", "Please create 'flag.txt' in this directory with your", "own debugging flag.\n"); exit(0); } fgets(flag,FLAGSIZE_MAX,f); signal(SIGSEGV, sigsegv_handler); // Set up signal handler gid_t gid = getegid(); setresgid(gid, gid, gid); printf("Input: "); fflush(stdout); char buf1[100]; gets(buf1); //這裡吃輸入可以吃100 vuln(buf1); //最好是不要讓vuln() return printf("The program will exit now\n"); return 0; } ``` 2. 綜合上述(註解的部分),我應該要輸入超過 16 + $x$ 個字蓋掉vuln()的return (( $x$ 是vuln()的return佔的大小 3. 所以輸入一大堆a給他,flag就出來了! ![image](https://hackmd.io/_uploads/ByX8Qgsf0.png) ### basic-file-exploit :::info :bulb: 看程式碼! ::: 1. 在data_read()裡面看到 ![image](https://hackmd.io/_uploads/SysR_xizC.png) 2. entry是我的input,所以我輸入0就會滿足判斷式 3. 去試試! - 先輸入1 建資料 --> 後面隨便輸 - 再輸入2 印出資料 --> 這裡的entry number輸入0 - flag就出來了! ![image](https://hackmd.io/_uploads/BkiiqxiMC.png) ### CVE-XXXX-XXXX :::info :bulb: CVE介紹可參考這篇文章 [公共漏洞和暴露 CVE 簡介](https://medium.com/@jieshiun/%E5%85%AC%E5%85%B1%E6%BC%8F%E6%B4%9E%E5%92%8C%E6%9A%B4%E9%9C%B2-cve-%E7%B0%A1%E4%BB%8B-f362626c9fc7) ::: 1. 題目給了一段描述,要找出這個漏洞的編號 2. 這種事就丟給AI哈哈哈哈 ![image](https://hackmd.io/_uploads/Hk4ipgiMR.png) 3. 結果他找錯漏洞了超好笑 4. 從下面的推薦問題看到 ![image](https://hackmd.io/_uploads/By_ATlsf0.png) 5. ~~終於對了~~ - 後來發現google都比他強 笑死 ![image](https://hackmd.io/_uploads/SyWt0eofC.png) ### keygenme-py :::info :bulb: 看程式碼! ::: 1. 在開頭看到前半的flag ![image](https://hackmd.io/_uploads/S1Gnj-ifC.png) 2. 照著他的變數名稱來看,另一半flag要動態找 3. 往下看程式碼看到下面這段 ```python= #根據前段程式碼可以知道下面兩個變數 #key = user_key #username_trial = bUsername_trial def check_key(key, username_trial): global key_full_template_trial if len(key) != len(key_full_template_trial): return False else: # Check static base key part --v i = 0 for c in key_part_static1_trial: if key[i] != c: return False i += 1 # TODO : test performance on toolbox container # Check dynamic part --v # 以下這段就是我們要找的東西! if key[i] != hashlib.sha256(username_trial).hexdigest()[4]: return False else: i += 1 if key[i] != hashlib.sha256(username_trial).hexdigest()[5]: return False else: i += 1 if key[i] != hashlib.sha256(username_trial).hexdigest()[3]: return False else: i += 1 if key[i] != hashlib.sha256(username_trial).hexdigest()[6]: return False else: i += 1 if key[i] != hashlib.sha256(username_trial).hexdigest()[2]: return False else: i += 1 if key[i] != hashlib.sha256(username_trial).hexdigest()[7]: return False else: i += 1 if key[i] != hashlib.sha256(username_trial).hexdigest()[1]: return False else: i += 1 if key[i] != hashlib.sha256(username_trial).hexdigest()[8]: return False return True ``` 4. 照著他的邏輯逆推,得到sha256完的第1~8個字元是 `6b8e5433` 5. 再依照他的順序重新組合 (4, 5, 3, 6, 2, 7, 1, 8) 6. 得到後半flag是 `e584b363` ![image](https://hackmd.io/_uploads/rJ8IjZoz0.png) ## Forensics ### information ::: info :bulb: 圖片題先丟進線上工具看 &ensp;&ensp;&ensp; 先看圖片本身,再看檔案資訊 ::: 1. 把圖片丟到 這裡--> https://fotoforensics.com/ 2. 旁邊能用的功能都看 3. 在神奇的地方找到了好像有用的東西 ![](https://i.imgur.com/Pw44s3S.png) 4. 看起來像base64 encode過的東西 --> 試一下用base64 decode ![](https://i.imgur.com/Z3en4Lw.png) :sparkles: <補充> 。把picoCTF用base64 encode --> cGljb0NURg== 。把picoCTF用base32 encode -->OBUWG32DKRDA==== base32 encode過 --> 英文大寫或數字 base64 encode過 --> 英文大小寫或數字 ### Redaction gone wrong :::info :bulb: 這裡看不到就換別的地方! ::: 1. 下載檔案 -> 打開發現是一個有部分文字被擋住的pdf檔 2. 看起來很可疑 -> 全部複製之後貼到word 3. flag就出來了! ![image](https://hackmd.io/_uploads/Sk4cX_7aT.png) ### Lookey here :::info :bulb: `strings 檔名 | grep 關鍵字` 超好用! ::: 1. 題目的標籤說了會用到grep 2. 直接用`strings 檔名 | grep picoCTF{*` 3. flag就出來了! ![image](https://hackmd.io/_uploads/SkvVmJqMR.png) ### extensions :::info :bulb: `file 檔名` 可以看出檔案真實身分! ::: 1. 先打開題目給的txt檔,看到一坨看不懂的東西 2. 用 `file flag.txt` 發現他的本體是 3. 把副檔名.txt改成.png,再打開它 4. flag就出現了! ![image](https://hackmd.io/_uploads/By-djIWER.png) ### Matryoshka doll :::info :bulb: 是時候該學binwalk怎麼用了! ::: 1. 先 `binwalk --help` 看一下怎麼用 2. `binwalk dolls.jpg` 發現藏了很多檔案 3. `unzip dolls.jpg` 再繼續無限拆 ((就跟題目說的俄羅斯娃娃一樣 <tips\> 可以直接 `binwalk -M -e dolls.jpg` 就不用手動一直拆了 4. 最後看到flag.txt,再沿著路徑進去把它cat出來 ![image](https://hackmd.io/_uploads/BkTopLdMC.png) ![image](https://hackmd.io/_uploads/B1XEAIdfA.png) ### PcapPoisoning :::info :bulb: pcap是封包哦!封包分析用wireshark ::: 1. 用Edit/Find Packet,它會跳出我打pico的那個框框 2. 前面記得要選擇string 3. flag通常藏在後面那個地方,所以最前面那格選Packet bytes 4. 然後flag就出來了! ![image](https://hackmd.io/_uploads/SyWE1DwfC.png) 話說看到flag出現在那裡 我才突然想到也可以用 `strings 檔名 | grep "pico{*"` ![image](https://hackmd.io/_uploads/rJtjgqPfR.png) ### Glory of the Garden ::: info :bulb: 圖片題先丟進線上工具看 &ensp;&ensp;&ensp; 先看圖片本身,再看檔案資訊 ::: 1. 把圖片丟到 這裡--> https://fotoforensics.com/ 2. 旁邊能用的功能都看 3. 在strings的地方用F3找pico ![image](https://hackmd.io/_uploads/rycT_5tzR.png) ### Wireshark doo dooo do doo... :::info :bulb: pcap是封包哦!封包分析用wireshark &ensp;&ensp;&ensp;或是用 `strings 檔名 | grep ` 找字串 ::: 1. 經過上次的經驗所以這次先 `strings 檔名 | grep "pico{*" ` 2. 發現沒東西,再換成 `strings 檔名 | grep "{" ` 3. 找到一串像凱薩過後的flag的東西 ![image](https://hackmd.io/_uploads/HkuQ65KfA.png) 4. 丟到online decoder,flag就出來了! ![image](https://hackmd.io/_uploads/By2dp9YMA.png) ### MacroHard WeakEdge :::info :bulb: binwalk超會找東西! ::: 1. 直接打開打不開 2. 一樣`strings | grep `先試一下 --> 沒東西 3. 丟給binwalk看有什麼東西 --> 一堆檔案 ((我找超久 4. 看到一個檔名是hidden的檔案,看起來就是個藏flag的地方 ![image](https://hackmd.io/_uploads/SkOR7aFzC.png) 5. 沿著路徑進去,把它cat出來 6. 看到一串英文 --> 去掉空格之後看起來像base64編碼過的東西 ![image](https://hackmd.io/_uploads/SkH1BTYGC.png) 7. 丟去 [base64 online decoder](https://www.base64decode.org/) 8. flag就出來了! ### Enhance! :::info :bulb: 到處找找,張大眼睛 ::: 1. 先用strings掃過 2. 看到看起來有點像html語法的東西 3. cat看看這個檔案 4. 在程式碼(?)裡面找到分散的flag 5. 把它組起來就完成了! ![image](https://hackmd.io/_uploads/HJATlJcGA.png) ## PicoCTF 2023 ### repetitions :::info :bulb: Base64 decoder ::: 1. 下載檔案用記事本開,發現結尾是==,所以應該是base64 3. 題目都叫repetitions了,所以base64瘋狂decode,弄到Flag出來 ![](https://i.imgur.com/zmWtlYy.png) ### Rules 2023 :::info :bulb: F12真的很好用 ::: 1. 先試試看用尋找找picoCTF{ ,但沒找到 2. 按F12開啟開發人員工具到處找找 ![](https://i.imgur.com/cjagHUf.png) ### money-ware :::info :bulb: 直接google ::: 1. 根據題目敘述他應該是中了勒索病毒,先猜Wannacry,但不對 2. 用以下關鍵字去google,然後就找到了 `1Mz7153HMuxXTuR2R1t78mGSdzaAtNbBWX malware` ![](https://i.imgur.com/V5OdvAb.png) ### findme :::info :bulb: 睜大眼睛用心觀察,flag就在你眼前 ::: 1. 照著他打的用test當帳號 test.當密碼 --> 毫無意外的進不了 2. 他又跟我說密碼是test! 3. 姑且相信他第二次 -->跑得有點慢,但順利進到一個頁面 4. F12看一下有寶藏 --> 沃!有提示,叫我fetch keyword value ![image](https://hackmd.io/_uploads/H1FkQ0l5T.png) 5. 於是我打開F12的network再重來一次 看到他噴出了好東西!!!!但他跑超快 ![image](https://hackmd.io/_uploads/HkaRQ0l5T.png) 6. 在我不知道第幾次試圖點到他但沒成功之後,我決定用截圖的 ![image](https://hackmd.io/_uploads/HkDySAx9p.png) 7. 善用工具直接讓他圖片轉文字 8. 然後看到這個==大概99.99%是base64,所以丟base64 decorder 9. 嗚呼!成功 ![image](https://hackmd.io/_uploads/BJngICeqa.png) ## BreakAllCTF ### CSIE_strace :::info :bulb: strace -s 顯示字元數 ::: 1. 題目叫我們strace 2. 發現字沒有全部跑出來 3. -s 100讓他全部出來 ![](https://i.imgur.com/zZbbjQ9.png) ### EasyCTF_adder :::info :bulb: 看程式碼 ::: 1. 先執行看看 --> 他叫我輸入三個數字 2. 用ida開起來,看程式碼 ![](https://i.imgur.com/mhptiae.png) 3. 看到第20行 --> 三個數字加起來要是1337 4. 執行程式 --> 輸入1337 0 0 5. 拿到flag! ![](https://i.imgur.com/sZprtNj.png)