CCTF 2016 WriteUp(部分)

上週參加了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碼轉一下就出flagCCTF{CODE_AUDIT_BUSTERS}

WEB 300

用之前獲取到的cookie登錄之後,訪問pocky.loli.club:41293/diaries目錄,能夠看到新的提示說是telegram上佈置了一個機器人,同時給出了機器人的lua代碼,然後我們就去telegram社工一下pockynya就搜到了這個賬戶

這裏寫圖片描述

然後根據它博客裏面給出的給的lua代碼如下:

do

local 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 a
end

return {
  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打頭的漏洞編碼,根據隨便谷歌MS 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}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章