jarvis oj pwn level0

首先题目下载链接:https://dn.jarvisoj.com/challengefiles/level0.b9ded3801d6dd36a97468e128b81a65d

地址:nc pwn2.jarvisoj.com 9881

(本人)相关环境:

                 ida反汇编工具(吾爱**可下载到)

                 系统Ubuntu 16.04(linux的一个版本)

                 pwntools(终端输入:sudo pip pwntools install 即可安装)

                 pwndbg(终端输入:sudo clone https://github.com/pwndbg/pwndbg 按下回车 cd pwndbg 按下回车 ./setup.sh)

                gcc-multilib(终端输入:sudo apt install gcc-multilib)

简单介绍环境的作用:IDA是一个静态反编译软件,目前做pwn的题目就靠它了,能帮我们更好的分析一个程序。

                                  系统Ubuntu 16.04是运行pwn的题目和使用下面工具的系统(目前的理解,其实跟还有很多作用的)。

                                  pwntools是一个ctf框架和漏洞利用开发库,用Python开发,由rapid设计,旨在让使用者简单快速的编写exploit。

                                    pwndbg是一个gdb的程序调试器。

                                   gcc-multilib装上去后就可以在64位Ubuntu运行32位的软件了。



环境好了后开始做题,先将文件放入Ubuntu中运行

jarvis oj pwn level0

很简单输出一行hello,world

将程序放入IDA中看代码情况,先查看main函数,按F5显示伪代码

jarvis oj pwn level0

伪代码很简单,先输出hello,world在返回到vulnerbale_function函数中

jarvis oj pwn level0

vulnerbale_function函数,很显然定义buf泄露内存,再查看buf

jarvis oj pwn level0jarvis oj pwn level0

buf大小只有128,我们只要将128填满,再进行跳转即可,那么我们跳转到哪儿呢?

jarvis oj pwn level0

我们在IDA浏览中看到callsystem函数中看到了/bin/sh,这就是我们要的。分析的差不多了下一步下写代码,在Ubuntu新建一个文本文件即可

jarvis oj pwn level0

写好了保存,将后缀命名为.py即可

我们来分析这一波代码

第一行from pwn import *,意思是调用pwn库,pwn库我觉的可以理解位c函数的库,可以调用很多有用的函数

第三行elf = ELF('./pwn0'),意思是获取pwn0的句柄(在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。)我也不是很理解,就理解位获取这个文件的信息,放入elf这个变量中吧

第四行call_addr = elf.sumbols['callsystem'],我们不是有程序文件的信息了吗,用sumbols获取我们想要的函数地址,将地址放入变量call_addr中

第六行r = remote('pwn2.jarvisoj.com',9881)的意思是用来建立一个远程连接,url或者ip作为地址,然后指明端口,这里我们将改题目建立远程连接,将9881作为端口,保存至变量r中

第八行payload = 'A' * (0x80+0x8) + p64(call_addr),前面说需要128哥空间覆盖buf,这里我们用128个A覆盖buf,用p64打包这个函数地址,用payload将这两个进行漏洞利用,因为我也不是很懂,所以解释的含糊不清,以后会解释清楚的。

第十行r.send(payload),前面我们将地址和端口保存到了r中,这样,我们将利用的漏洞放松过去

第十二行r.interactive(),我们已经将利用的漏洞发入了该端口中,现在我们可以获取控制权了

第十三行r.close(),利用好后我们就可以关闭了

jarvis oj pwn level0

如图我们已经进入该端口,是用cat flag

jarvis oj pwn level0

我们已经找到了flag    提交就可以了

我是初学者,正式学满打满算也只有一个星期而已,写的不好还请多多见谅。以后会努力学习,将博客写的更好的。