CCTF 2016 WriteUp(部分)

來源:互聯網
上載者:User

標籤:

上周參加了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(部分)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.