栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

日行一pwn:pwn1

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

日行一pwn:pwn1

用俩图床,有的有水印,有的没水印,折磨

距离上一次日行一pwn已经快一个月了,干脆改成月行一pwn吧(汗。这段时间去恶补了王爽老师的汇编语言。

结果一回来就做了这么一道题,函数封装的严严实实,打眼一看全是C++。想入门pwn这么难吗。

正片

BUUCTF在线评测

使用BUUCTF靶场,首先标准步骤下载--放到kali里面查--拖到windows用ida反汇编

发现只有一个NX保护

NX保护就是CPU不会执行放在内存段中的代码,也就是我们之前在BOF中学习的像内存中写入Shell的方法,在开启NX后是不可行的

之后打开IDA进入主函数,可以发现主函数只干了一件事就是调用vuln函数

然后去看看Vuln函数,噩梦开始了

用或不用F5都是封装的整整齐齐的C++语句

去cplusplus.com上查了半天,那一大段语句的意思大概就是把输入的字符串中的I换成You。

那么思路就来了

我们可以看到s是定义在栈段3c-1c的变量,长度32字节。输入有fgets严格控制长度。但是由于I被替换成You就导致了输入长度可以扩展成三倍,也就是说最大输入长度可以达到96字节,

而这道题只需要3x16+12(栈长度)+4(32位寄存器ebp长度)+4(函数偏移地址)=68位,所以是可以造成溢出的。

然后就需要查找可以利用的后门函数了,在函数列表里发现了get_flag函数

然后直接执行这个函数就行了。

所以直接编写Exp

from pwn import *

p = remote('node4.buuoj.cn','28976')

payload = "I" * 20 +"AAAA" + p32(0x08048F0D)
p.sendline(payload)

p.interactive()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879599.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号