標籤:
上周參加了CCTF,也算是練了一段時間以來第一次正式打比賽並打完了全程的,最後結果拿了個11名,還算滿意,畢竟是第一次。但這次比賽強隊確實不多,而且我們隊和別人的差距也是很大了,畢竟也還不到半年時間,還有太多東西要學,慢慢來吧,正確明年之前能夠憑實力打進一次線下賽。
先貼一下大神的wp:http://bobao.360.cn/ctf/detail/159.html
在貼貼我們自己的wp把。
WEB 350
給了一個靜態頁面,掃了掃也沒發現什麼東西,
然後後來給了一個hint,說是找部落格,好吧,瘋狂尋找群裡管理員們的部落格,最後在github上找到了Pocky Nya,然後在repositories找到了目標網址
然後先把源碼也下載下來,簡單讀了之後,大部分地方都有身分識別驗證,而且擷取參數地方也就兩個,都沒法XSS,後來意外中發現了原始碼的background.py的’/kamisama/posts/add’這裡是沒有身分識別驗證的,如下:
class AddPostHandler(BaseHandler): @tornado.web.authenticated def get(self): self.background_render(‘add_post.html‘, post=None) def post(self): title = self.get_argument(‘title‘, None) content = self.get_argument(‘content‘, None) tags = self.get_argument(‘tags‘, ‘‘).strip().split(‘,‘) if not title or not content: return self.redirect(‘/kamisama/posts/add‘) post = self.orm.query(Post.title).filter(Post.title == title).all() if post: return self.write(‘<script>alert("Title has already existed");window.history.go(-1);</script>‘) self.orm.add(Post(title=title, content=content, created_time=date.today())) self.orm.commit() return self.redirect(‘/kamisama/posts‘)
所以就可以偽造添加文章的資料包,然後設定儲存型XSS擷取管理員的cookie。如下所示:
因為考慮到萬一設在content裡面管理員看不到就不好了,所以我把XSS設定在了title上面,雖然有點毒瘤,不過這樣子就能百分百的擷取到管理員的Cookie了,很快就有人登入了,結果第一次擷取到的不是管理員的,是其他人擷取之後登入的,雖然確實拿到cookie了,但是裡面並沒有flag,結果花費了N久又把各種代碼重讀了一遍,發現在background.py裡面的SignInHandler中確實是把flag寫進了cookie的,所以我又提交了一次上面的payload,這一次成功擷取到了正確的cookie,如下:
username=2|1:0|10:1461405568|8:username|12:cG9ja3lueWE=|2821528813698c6ee9c1650c8420cfb4da968ec97ae080e65c07542f0d249df0;flag=434354467b434f44455f41554449545f425553544552537d
然後按照ascii碼轉一下就出flag了CCTF{CODE_AUDIT_BUSTERS}
WEB 300
用之前擷取到的cookie登入之後,訪問pocky.loli.club:41293/diaries目錄,能夠看到新的提示說是telegram上布置了一個機器人,同時給出了機器人的lua代碼,然後我們就去telegram社工一下pockynya就搜到了這個賬戶
然後根據它部落格裡面給出的給的lua代碼如下:
dolocal function run(msg, matches) if matches[1] ~= ‘!minecraft‘ then operation = matches[1] else return "!minecraft start|stop|restart" end if string.find(operation, ‘&‘) or string.find(operation, ‘|‘) or string.find(operation, ‘`‘) then return "Invalid operation " .. operation end local t = io.popen(‘cd /home/telegram && ./mc ‘ .. operation) local a = t:read("*all") return aendreturn { description = "loli.club minecraft bot!", usage = "!minecraft start|stop|restart", patterns = { "^!minecraft$", "^!minecraft (.*)$" }, run = run}end
所以我們可以用;斷開前面的命令,然後就能執行我們的命令了,如下:
!minecraft ;xxx
後面的xxx處就可以插入我們的命令列代碼,最後的flag就在../wwwroot/flag裡面
所以flag就是CCTF{TELEGRAM_BOT_AND_Lf}。
MISC 1
給了一個圖片,在圖片最後的32位有很連續的一堆字母,如下
base64解碼一下得到flag,ctf{we1c0me t0 anmactf!}
MISC 2
這裡,在第5560的內容裡面發現這樣的東西
type s4cr4t.txt
所以接下來這就是我們需要的檔案內容,是個Base64編碼的東西,解碼之後是這個,CCTF{do_you_like_sniffer},根據它的格式,他還需要的是MS打頭的漏洞編碼,根據隨便GoogleMS SMB 漏洞 溢出了一下,試了幾個之後就試出來了最後確切的漏洞編號就是MS08067,所以最後答案就是MS08067CCTF{do_you_like_sniffer}
re1:
IDA反編譯後查看,發現運行要求包含三個參數,且在其中隨機選一個進行測試,這裡注意md5_custom函數沒有用處….
經過check函數測試
取記憶體中找下:發現字串f2332291a6e1e6154f3cf4ad8b7504d8
嘗試提交,成功
flag:CCTF{f2332291a6e1e6154f3cf4ad8b7504d8}
re2:
一個.net程式,使用Reflector反編譯,得到代碼
發現這就是個和本地連接埠通訊的程式,於是先去關閉了防火牆,在通過RAWPCAP本地迴環抓包即可
得到flag::CCTF{7eb67b0bb4427e0b43b40b6042670b55}
re3:
一個簡單的反組譯碼
發現就是兩個字串的比較
嘗試將上面那個字串提交,發現正確.
flag:CCTF{789101112131415123456}
true-or-false
兩個linux程式,通過IDA反組譯碼,發現兩個程式開始時都會調用system兩次,通過ascll碼知道了false會將自己覆蓋到true上,true會將自己刪除.
然後在false裡發現了print_f函數,反組譯碼+凱撒加密就得到了結果的flag
PPGS{yvahk-enva-ova}
\\\\\\\\\\
CCTF{linux-rain-bin}
difffffffffffuse
通過IDA觀察反編譯出的C語言.
總共有3000個函數,3個函數為一周期。但是其中有一些周期中的,第二個函數是直接提取資料,第三個函數移位存在微小差異。通過把彙編代碼提取出來產生txt檔案,然後用python讀取檔案類比產生c程式,即把這3*1000個函數中的第二個函數都扒取出來,產生second.c檔案
程式最後會將這3000個函數加密後的40位元組與現有的40位元組相比較,於是我們在IDA中把這40個位元組抓取出來
0x83 0xec 0x5f 0xa2 0x93 0xce 0xa3 0xfb 0x5a 0x17 0x06 0xff 0x13 0x2d 0xd7 0xc4 0xbe 0xce 0x8d 0x6a 0xb8 0x15 0x26 0xfc 0x84 0x01 0x94 0x44 0xf8 0xd7 0x23 0x1c 0x4b 0xc2 0x31 0x04 0xa6 0x33 0x08 0x57
每一個字元的加密是獨立啟動並執行,也就意味著我們可以針對每一個字元進行單獨的爆破,看看加密後的資料是否相同,通過簡單爆破,最終得到flag:
CCTF{1f_Y0u_W4nNa_R3vEn93_____purpleroc}
神秘檔案1
拿到forensic.7z後解壓得到level1與mem.vmem兩個檔案,觀察檔案開頭,經過百度後得出level1為硬碟檔案,mem為記憶體檔案
恰巧本人有一個空硬碟,於是將硬碟格式化,用bootice將level1寫入了硬碟,
發現硬碟被Bitlocker加密,由於存在忘記密碼的可能,Bitlocker提供了檔案恢複密碼機制,密碼為48位純數字
考慮了恢複密碼在記憶體中的可能性後,用winhex開啟mem,在其中搜尋Bitlocker沒有找到,想起了恢複密碼id提示為F2298561,搜尋後找到有關內容
發現記憶體中的資料很多情況用00隔開,於是搜尋F2298561的16進位數,每兩個數用00隔開,最後找到了48位元字密碼
為046409-191059-605495-680889-626109-111617-371668-451517
解鎖成功!拿到flag CCTF{U_m4st_G00d_4t_F0nr4n51c}
BEST_EZ_MISC
拿到名為reverze.zip的壓縮包,用winhex看了一下,很容易想到是zip偽加密
將pk 01 02 後的第5個位元組改為00,發現可以解壓,得到reverse
開啟看了一下,發現是摩絲電碼,解密後得到0,9字串,程式跑了一下算上空格一共2048個字元,由於題目提示結果是個圖片,於是嘗試不同的像素來觀察,最終得到結果
雖然不是很清楚,但是顛倒一下很容易看出flag: ctf{pixelnice}
misc100T2
很簡單的流量分析,開啟以後嘗試搜尋ctf直接得到結果
flag為ctf{anma_qwe3_as34_gty6}
CCTF 2016 WriteUp(部分)