BUUCTF PWN wp--pwn1_sctf_2016

news2024/9/20 13:03:46

第一步 checksec,并检查该题的保护机制,32位

  1. Arch: i386-32-little
    • 这表示程序的架构是32位的i386(即x86),并且使用小端序(little-endian)存储方式。这意味着程序是为32位系统设计的。
  2. RELRO: Partial RELRO
    • RELRO(Relocation Read-Only)是一种安全特性,用于减少对全局偏移表(GOT)的攻击。Partial RELRO表示只对部分GOT表进行了保护。如果采用完全RELRO,则GOT表在程序启动时就变成只读,从而提高安全性。Partial RELRO的保护级别低于完全RELRO。
  3. Stack: No canary found
    • 栈保护(Stack Protection)通常通过在栈中插入一个随机值(称为“canary”)来实现。如果发生栈溢出,canary值会被修改,程序可以检测到这种修改并终止执行,从而防止攻击。这里显示“No canary found”,意味着程序没有使用栈保护,这使得它更容易受到栈溢出攻击。
  4. NX: NX enabled
    • NX(No-eXecute)是一种安全特性,用于防止在栈或堆上的数据被执行。这里显示“NX enabled”,意味着程序启用了NX保护,这可以有效地防止某些类型的缓冲区溢出攻击。
  5. PIE: No PIE (0x8048000)
    • PIE(Position Independent Executable)是一种安全特性,使得程序的代码可以在内存中的任意位置加载,每次加载的位置都可能不同。这样可以增加攻击者预测内存地址的难度。这里显示“No PIE”,意味着程序没有使用PIE,其代码在内存中的位置是固定的(此处为0x8048000),这使得它更容易受到攻击。

第二步    进入主函数,发现只有一个vuln函数,跟进

跟进后如下

下面详细分析一下:

  1. printf("Tell me something about yourself: ");
    这行代码向用户输出提示信息,要求用户输入一些内容。
  2. fgets(s, 32, edata);
    fgets函数从edata流中读取最多31个字符到s中(加上一个终止符\0,总共32个字符)。这通常用于从标准输入读取用户输入。
  3. std::string::operator=(&input, s);
    这一行代码将字符串s赋值给一个std::string对象input。operator=是std::string类的赋值运算符,将C风格的字符串char*转化为C++风格的std::string。
  4. std::allocator<char>::allocator(&v5);
    这行代码创建了一个std::allocator<char>对象v5,它是C++标准库中用于管理内存分配的工具。
  5. std::string::string(v4, "you", &v5);
    这行代码使用分配器v5创建了一个包含字符串"you"的std::string对象v4。
  6. std::allocator<char>::allocator(v7);
    这行代码创建了另一个std::allocator<char>对象v7。
  7. std::string::string(v6, "I", v7);
    这行代码使用分配器v7创建了一个包含字符串"I"的std::string对象v6。
  8. replace((std::string *)v3);
    这行代码表示一个字符串替换操作,可能是在v3指向的字符串中将某个子串替换为另一个子串。
  9. std::string::operator=(&input, v3, v6, v4);
    这行代码表示可能是在字符串input中,将子字符串v4替换为v6。如果v4是"you",v6是"I",则这可能是将字符串中的"you"替换为"I"。(我们输入的其它字符只占一个字节,而我们输入的“I”经过replace函数后会变成“you”也就是放大了三倍,我们的输入只有31个字节,而我们需要64位的填充数据
  10. std::string::~string(v3);
    销毁v3指向的std::string对象,释放其占用的资源。
  11. std::string::~string(v6);
    销毁v6指向的std::string对象,释放其占用的资源。
  12. std::allocator<char>::~allocator(v7);
    销毁v7对象,释放内存分配器所管理的资源。
  13. std::string::~string(v4);
    销毁v4指向的std::string对象,释放其占用的资源。
  14. std::allocator<char>::~allocator(&v5);
    销毁v5对象,释放内存分配器所管理的资源。
  15. v0 = (const char *)std::string::c_str((std::string *)&input);
    将input对象的内容转换为C风格字符串指针v0。
  16. strcpy(s, v0);
    将v0指向的字符串复制到s中。
  17. return printf("So, %s\n", s);
    最后输出字符串s的内容,并返回printf的返回值。

第三步  我们进入一下与flag有关的get_flag函数

该函数的地址是0x8048F0D

计算填充数据,跟进数组s

两个s之间的距离为0x3c即60,因为前面的替换操作  I(一个字节)=you(三个字节)

而fgets限制为32个,60个字节刚好可以用20个I填满, db 4 dup(?) 这里还有4个字节内存要被占!!所以一共为20+4个(上面提到的64个填充数据=20*3+4)

第四步  编写脚本

第五步  运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

期权末日轮行情即将来临!注意两个操作更好盈利!

今天带你了解期权末日轮行情即将来临&#xff01;注意两个操作更好盈利&#xff01;期权末日轮&#xff0c;就是指在期权合约到期前的最后几天&#xff0c;比如50ETF期权品种的到期日是每个月第四个星期的星期三&#xff0c;那么在最后一个星期就有可能发生末日轮行情了。 末日…

Linux安装Navicat Premium

一、安装Navicat Premium17 1、下载安装包 https://www.navicat.com.cn/download/navicat-premium#linux 2、赋执行权限 //假设安装包在/etc/navicat目录下 cd /etc/navicat chmod x navicat17-premium-cs-x86_64.AppImage 3、启动应用程序 ./navicat17-premium-cs-x86_64…

python.exe -m pip install --upgrade pip报错解决

引言 在执行命令的时候&#xff0c;提示可以更新版本 [notice] A new release of pip is available: 24.1.2 -> 24.2 [notice] To update, run: python.exe -m pip install --upgrade pip按照提示&#xff0c;直接使用 python.exe -m pip install --upgrade pip 命令进行更…

Cocos Creator2D游戏开发(15)---预制体和按钮的绑定以及冷却效果的实现

场景: 植物大战僵尸中,种植植物前,要判断状态,只有在阳光充足时才能点击 图片资源: 预制体的创建,创建一个空节点命名: CardTemplate,将三张豌豆射手相关的图片拖入 如下图 其中card_mask图片中的透明度改为150; 在assets中创建prefab文件夹,将CardTemplate节点直接拖入pre…

openGauss——体系结构

一、体系结构概览 二、驱动程序 客户端程序使用驱动程序&#xff0c;向openGauss的后端管理线程GaussMaster发起连接请求。openGauss目前支持以下四种驱动程序&#xff1a; JDBC&#xff0c;用于Java连接ODBC&#xff0c;开放数据库互连Libpq&#xff0c;C语言程序接口Psycop…

SpringMvc 以配置类的形式代替xml文件

1、配置类 1.1、创建Mvc 项目之后创建 MyWebApplicationInitializer 类 实现接口 WebApplicationInitializer public class MyWebApplicationInitializer implements WebApplicationInitializer {Overridepublic void onStartup(ServletContext servletContext) throws Serv…

大数据-101 Spark Streaming DStream转换 窗口操作状态 跟踪操作 附带多个案例

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

windows安装pytorch精简版(英伟达GPU)

1 下载anaconda 官网:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 选择下载Anaconda-1.4.0-Windows-x86.exe 2 创建虚拟环境 以管理员身份打开Anaconda Prompt conda env list conda creat -n yolov8 python3.8 创建过程中有提示,填…

【图文详解】idea码云环境搭建

公众号&#xff1a;墨轩学习网-----B站&#xff1a;墨轩大楼 欢迎关注&#xff01;&#xff01;&#xff01; 一、码云简介 目前开源中国的四大框架&#xff0c;即四条产品线&#xff1a;开源中国社区、众包、码云和招聘。 码云是开源中国推出的基于Git的代码托管服务&#…

鸿蒙HarmonyOS开发:创建新的Lite工程

当开始开发一个应用/服务时&#xff0c;首先需要根据工程创建向导&#xff0c;创建一个新的工程&#xff0c;工具会自动生成对应的代码和资源模板。 说明 在运行DevEco Studio工程时&#xff0c;建议每一个运行窗口有2GB以上的可用内存空间。 创建和配置新工程 DevEco Studio提…

如何应对市场变革的战略利器之敏捷企业架构实践全景指南

敏捷与企业架构融合的必然性 在全球化和数字化的双重推动下&#xff0c;市场竞争的激烈程度前所未有。企业必须迅速适应市场的变化&#xff0c;以在激烈的竞争中脱颖而出。然而&#xff0c;传统的企业架构往往侧重于长期战略规划&#xff0c;尽管它在维持企业的稳定性方面功不…

阿贝云评测:免费虚拟主机与免费云服务器的优势对比

阿贝云作为一家知名云服务提供商&#xff0c;以其稳定可靠的服务质量在业界享有盛誉。其中&#xff0c;其免费虚拟主机和免费云服务器备受用户喜爱。在这篇评测中&#xff0c;我们将对这两种服务进行详细对比。 首先&#xff0c;就免费虚拟主机而言&#xff0c;阿贝云提供的免费…

图片工具箱:一键批量加水印,守护创意,提升效率!

前言 你是否曾在处理海量图片时&#xff0c;被繁琐的步骤和漫长的等待时间折磨得苦不堪言&#xff1f;是否梦想过拥有一款神器&#xff0c;能让你的图片处理工作变得轻松愉快&#xff0c;从此告别加班的烦恼&#xff0c;迎接升职加薪的曙光&#xff1f;那么&#xff0c;让我向…

我主编的电子技术实验手册(18)——认识电感

本专栏是笔者主编教材&#xff08;图0所示&#xff09;的电子版&#xff0c;依托简易的元器件和仪表安排了30多个实验&#xff0c;主要面向经费不太充足的中高职院校。每个实验都安排了必不可少的【预习知识】&#xff0c;精心设计的【实验步骤】&#xff0c;全面丰富的【思考习…

Golang学习笔记-Golang中的锁

同步原语和锁 Golang作为一个原生支持用户态的语言&#xff0c;当提到并发进程&#xff0c;多线程的时候&#xff0c;是离不开锁的&#xff0c;锁是一种并发编程中的同步原语&#xff08;Synchronization Primitives&#xff09;&#xff0c;它能保证多个 Goroutine 在访问同一…

数据库的范式

作用是减小表的冗余。 防止插入删除更新异常。 第一、第二、第三、第四、BC范式。并且不是越高越好。 第一范式&#xff1a;1NF的定义为&#xff1a;符合1NF的关系中的每个属性都不可再分。表1所示的情况&#xff0c;就不符合1NF的要求。 …

终端Tabby介绍和使用

介绍一款开源的跨平台终端模拟器&#xff0c;支持系统&#xff1a;Windows、macOS、Linux 下载安装 下载链接&#xff1a;Release Alpha 164 Eugeny/tabby GitHub 下载适合自己环境的版本&#xff1a; 选项说明 【1】Enable analytics选项的作用主要是允许Tabby收集和分析…

【数据集】遥感影像建筑物变化检测对比实验常用数据集分享

整理了几个变化检测的对比试验中常用的变化检测数据集&#xff08;建筑物&#xff09; LEVIR-CD 下载链接: https://justchenhao.github.io/LEVIR/ 数据介绍&#xff1a; 用于建筑物变化检测数据集 分辨率&#xff1a;0.5m 尺寸&#xff1a;1024*1024 数量&#xff1a;637组&…

python-求和again(赛氪OJ)

[题目描述] 最近小理遇到了麻烦的问题&#xff0c;你能帮帮他吗&#xff1f; 题目是这样的&#xff1a;计算 SUM(n)123...10^n 。输入格式&#xff1a; 输入包含多组数据&#xff0c;每组数据一行&#xff0c;包括一个整数 n 。当 n−1 时输入终止。输出格式&#xff1a; 对于每…

经济学有哪些分支,分别研究什么?

经济学的分支众多&#xff0c;每个分支都专注于研究经济领域的不同方面。 以下是一些主要经济学分支及其研究内容的概述&#xff1a; 微观经济学&#xff1a; 研究个体经济单位&#xff08;如家庭、企业&#xff09;的决策过程以及这些决策如何影响资源分配、市场结构和价格形…