QCTF writeup

X-man-A face:
這道題是二維碼補圖的題,用ps將那兩個空的角補全就好了,掃碼可以得到一串base64加密的字符串,解碼就是了
Flag:QCTF{Pretty_Sister_Who_Buys_Me_Lobster}

X-man-Keyword:
這道題給了一張png圖片,常規(guī)思路試了一下,發(fā)現(xiàn)好像沒什么東西藏在圖片中,用Stegsolve發(fā)現(xiàn)圖層沒什么問題,也提取不出什么東西,長寬也沒問題,想了想有沒可能是lsb隱寫,就去網(wǎng)上找了個工具,解了下 ,密碼根據(jù)圖片猜就是lovekfc

image.png

噢噢 發(fā)現(xiàn)有點東西PVSF{vVckHejqBOVX9C1c13GFfkHJrjIQeMwf}

這一看就應(yīng)該是一個加密 ,試了一波凱撒 ,呃呃呃,然后就去google,百度,搜狗查了挺久的沒什么發(fā)現(xiàn),直到出題人給了hint2:種把關(guān)鍵詞提前的置換
發(fā)現(xiàn)了一種關(guān)鍵詞加密法的加密算法
原理 參考https://wenku.baidu.com/view/ab7a4f0131126edb6f1a10a0.html

最后根據(jù)原理寫出解密腳本


image.png

NewsCenter:
簡單的sql注入,用sqlmap跑就可以了


image.png

Lottery:
簡單看了下題目,最終目標是買個flag,初始money是20, 買lottery需要的9990000,然后就是玩一個游戲--猜數(shù)字 ,數(shù)字猜對的越多,獲得的money越多
查看了網(wǎng)頁的js代碼,找到關(guān)鍵邏輯

image.png

只要number數(shù)組全為true,就可以獲得最多的money
抓了個包

image.png

發(fā)現(xiàn)了numbers數(shù)組
只要將數(shù)組的值全改為true,那么就可以一次贏最多的money

image.png

重復多幾次就夠money買flag了

image.png

Xman-dice_game:
拿到題目,看了下防護機制:

image.png

程序是64位的 只開啟了NX
拖到IDA中反匯編一下

image.png

程序的邏輯也很簡單,就是玩猜數(shù)字優(yōu)秀,要連續(xù)猜中50次 ,就會將flag打印出來

利用思路:
將seed種子覆蓋成一個固定的值,然后爆破處程序的隨機數(shù)
Seed在棧中的偏移

image.png

輸入70個1就可以將seed覆蓋成一個常數(shù)
爆破腳本:

image.png
image.png

getshell腳本:

image.png
image.png

Xman-stack2:
防護進制

開啟了NX和Canary 說明不是一般的棧溢出
用ida反匯編后 ,查看代碼發(fā)現(xiàn)了兩個漏洞點

image.png

主要是這個數(shù)組下標溢出 ,同時這個數(shù)組下標溢出可以使得打印數(shù)組的循環(huán)輸出256個棧上的字符,只要將v13[-20] = -1

image.png
image.png

根據(jù)打印出來的內(nèi)容可以得到棧上ebp和返回地址對應(yīng)數(shù)組的偏移,然后通過修改功能就可以一個字節(jié)一個字節(jié)的修改返回地址,構(gòu)造ropchain了
因為程序中本來就有system函數(shù),所以我將返回地址修改成hackhere函數(shù)的地址,但是打遠程時 ,服務(wù)器上不能用/bin/bash getshell
所以想到泄露libc地址,利用puts函數(shù)打印處printf_got地址的內(nèi)容

image.png

泄露出來后在libc database search那個網(wǎng)站查到相應(yīng)的libc版本
這里查到兩個 ,試了后發(fā)現(xiàn)是libc6-i386_2.23-0ubuntu10_amd64
我查到libc版本后,用one_gadget 來找gadget

image.png

還有一點是泄露完地址返回main函數(shù)后棧的地址會發(fā)生變化,所以要重新算,將數(shù)組再打印一遍就好了

exp:

image.png
image.png

NoLeak:
這道題我比賽的時候沒有做出來,那時候傻傻的unlink修改了存儲chunk指針的數(shù)組的內(nèi)容后就不知道怎么做了,比賽結(jié)束以后看writeup才明白怎么做
先分析下程序:
程序的漏洞有兩個,一個是UAF,另一個是堆溢出

image.png
image.png

具體思路:
因為程序沒開NX和PIE,所以可以通過向bss段寫shellcode,然后執(zhí)行的方式來getshell,因為沒有辦法直接控制rip,所以通過向__malloc_hook寫入shellcode的地址,然后再malloc一個chunk,觸發(fā)malloc_hook來getshell。至于要怎么寫,可以通過fastbins dup 獲取包含 數(shù)組buf的chunk, 修改buf數(shù)組的內(nèi)容,將__malloc_hook的地址寫到數(shù)組中,然后再通過編輯功能向__malloc_hook寫入shellcode的地址

具體步驟:

  1. 先生成大小分別為0x70,0x90,0x90的3個chunk0,1,2
  2. 利用unsorted bin attack ,向0x601040+0x28 + 0x10的地址寫入 main_arena+0x88的地址,
  3. 通過fastbins dup,在數(shù)組buf上分配堆塊。這是為了后面修改buf數(shù)組的內(nèi)容做準備 ,將chunk0 free掉,然后修改chunk0的fd指針,使其指向 0x601075,因為經(jīng)過unsorted bin attack后,0x601075+0x8處的值為0x7f,大小符合fastbins list。先生成一個0x70大小的chunk,然后再生成一個0x70大小的chunk,就在0x601075那分配出一個chunk,同時將buf[9]地址的內(nèi)容修改為0x601070 ,即向buf[9]寫入指向buf[6]的指針
  4. 用編輯功能,將&buf[6]地址上的內(nèi)容,將buf[6]修改為0x601090,為后面向bss段寫shellcode做準備,同時partial overwrite 修改buf[7]的最低位,使其變成__malloc_hook的地址
  5. 用編輯功能 ,修改buf[7],使__malloc_hook 指向0x601090
  6. 向0x601090 即*buf[6] ,寫入shellcode
  7. 隨便分配一個堆,觸發(fā)__malloc_hook getshell

下面畫一張 buf的內(nèi)存分布的示意圖:

image.png

  • unsorted bin attack 向buf數(shù)組寫入main_arena + 0x88的地址
update(1,p64(0x601040+0x28)*2)#unsorted bin attack 
print "update chunk1 fd and bk to [%s]"%"0x601040 + 0x28"
delete(0)
create(0x80,'G'*0x30)
image.png
  • fastbins dup 在buf數(shù)組的上分配chunk
update(0,p64(0x601075))
create(0x68,'H'*0x10)
create(0x68,'I'*3+p64(0x601070))#9

image.png
image.png

可以看到此時buf[9]地址的內(nèi)容被修改為0x601070

  • 編輯buf[9],即向buf[6]地址寫東西,向buf[6]寫入buf[10]的地址,同時partial overwrite 修改buf[7]最低位為'\x10',這是__malloc_hook 的地址就在buf數(shù)組中了
update(9,p64(0x601090)+'\x10')
image.png
  • 向__malloc_hook寫入0x601090 ,同時向0x601090寫入shellcode
update(7,p64(0x601090))
update(6,sc)
  • 最后隨便malloc一個chunk 就可以getshell了
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 0x00 前言 Pwn弱雞,比賽劃水,只好跟著大佬的博客刷刷一些題目才能維持尊嚴,在刷題目的時候又發(fā)現(xiàn)了一些新姿勢...
    Fish_o0O閱讀 1,646評論 0 6
  • 記錄一下,防止以后忘了 house_of_roman:該技術(shù)用于 bypass ALSR,利用12-bit 的爆破...
    zs0zrc閱讀 1,774評論 1 0
  • pwntools簡單語法 作為最好用的pwn工具,簡單記一下用法: 連接:本地process()、遠程remote...
    SueLyon閱讀 24,827評論 3 37
  • 古時候重農(nóng)輕商,商人沒有地位,結(jié)果呢?呂不韋以商入仕,一路高歌。 十年前淘寶剛出現(xiàn)的時候被傳為詐騙,結(jié)果呢?馬云成...
    偏愛閱讀 521評論 0 1
  • 2016年3月22日 星期二 雨 去開學的第一天就下起綿綿細雨,熟悉的街道,熟悉的早餐路邊攤,熟悉的校大門賣炒粉的...
    貳伍閱讀 342評論 0 0

友情鏈接更多精彩內(nèi)容