Jarvis OJ-PWN-[XMAN]level0 wp

地址:nc pwn2.jarvisoj.com 9881


第一次做pwn的题目 先准备一下环境
1.pwntools sudo pip install pwntools
2.python sudo apt install python-pip


先打开虚拟机 把文件放进去用checksec看一下
Jarvis OJ-PWN-[XMAN]level0 wp_第1张图片
发现是64位的 程序编译时关了栈不可执行保护
这说明我们可以在buf里面输入shellcode和填充字符
并且让函数的返回地址覆盖成buf的栈上地址 来实现栈溢出攻击

下面我们用IDA64来分析一下这个文件
F5查看伪代码
Jarvis OJ-PWN-[XMAN]level0 wp_第2张图片
我们看到在主函数中输出了一个Hello,World
接下来我们跟进vulnerable_function()函数
Jarvis OJ-PWN-[XMAN]level0 wp_第3张图片
可以看出来是通过read函数把标准输入的200位写入buf中
很显然是泄露内存(づ′▽)づ
接下来我们看一下buf
Jarvis OJ-PWN-[XMAN]level0 wp_第4张图片
    
    -  -  -  -loading  -  -  -

Jarvis OJ-PWN-[XMAN]level0 wp_第5张图片
从第一个01到第80个 由于是16进制 所以是 16x8=128个数
所以我们只需要将128填满 然后再进行跳转就可以啦
那么我们要跳转到哪里呢(◍•ᴗ•◍)ゝ
先用shift+F12看一下字符串 找一下比较关键的
Jarvis OJ-PWN-[XMAN]level0 wp_第6张图片
我们看到了一个/bin/sh
函数就是执行system("/bin/sh")
所以前面栈溢出的位置可以直接跳到这个函数
我们点进去看看(っ●ω●)っ
Jarvis OJ-PWN-[XMAN]level0 wp_第7张图片
看到了一群这样的东西
那我们从Export中打开callsystem
Jarvis OJ-PWN-[XMAN]level0 wp_第8张图片
这一行对应的Address是0000000000400596
构造payload=0x88*‘a’+p64(0000000000400596)
(*゚ー゚)
前面说需要128个空间覆盖buf,这里我们用128个‘a’来覆盖buf,用p64打包这个函数地址,用payload进行漏洞利用。
◝( ゚∀ ゚ )◟

我们有了大概思路以后就可以在Ubuntu里面新建一个文本文件了 先用touch OJ0创建了一个名字为OJ0的文件 然后就可以往里面写代码了

✧◝(⁰▿⁰)◜✧
Jarvis OJ-PWN-[XMAN]level0 wp_第9张图片

1.第三行就是用来建立一个远程连接,url或者ip作为地址,然后指明端口。由于题目在一开始就告诉了我们地址 于是我们就用题目来做远程连接,将9881作为端口保存在变量r中
2.倒数第二行就是 利用漏洞发入该端口中 获取控制权
3.r.close()就是利用好关闭
在这里插入图片描述
写好了大概是这样子的 我们保存并将它的后缀名改为.py即可
然后我们在虚拟机中运行该文件
Jarvis OJ-PWN-[XMAN]level0 wp_第10张图片
看来我们已经获取了控制权 那么就是Flag了
输入cat flag
Jarvis OJ-PWN-[XMAN]level0 wp_第11张图片
成功找到flag (´ΘωΘ`)
CTF{713ca3944e92180e0ef03171981dcd41}

你可能感兴趣的:(Jarvis,OJ)