BUUCTF-PWN-ciscn_2019_c_1

news/2025/2/26 14:15:55/文章来源:https://www.cnblogs.com/ylin07/p/18738376

这道题又是新的题型,研究了以下,要好好记录下来。
首先是看程序开启了哪些保护:

发现没开启栈溢出保护,我们继续往下看程序的逻辑:

一个简洁的页面,到此为止我们并不能看出可以利用哪些攻击方式,我们跟踪一下函数encryptbegin发现begin只是一个简单的显示程序,而重点在于encrypt函数,我们观察其程序内容:

int encrypt()
{size_t v0; // rbxchar s[48]; // [rsp+0h] [rbp-50h] BYREF__int16 v3; // [rsp+30h] [rbp-20h]memset(s, 0, sizeof(s));v3 = 0;puts("Input your Plaintext to be encrypted");gets(s);while ( 1 ){v0 = (unsigned int)x;if ( v0 >= strlen(s) )break;if ( s[x] <= '`' || s[x] > 122 ){if ( s[x] <= 64 || s[x] > 90 ){if ( s[x] > 47 && s[x] <= 57 )s[x] ^= 0xFu;}else{s[x] ^= 0xEu;}}else{s[x] ^= 0xDu;}++x;}puts("Ciphertext");return puts(s);
}

我们查看字符串,发现并没有看到想要的system\bin\sh\,也就是说我们要自己构造一个ROP链来实现攻击。但是这里有一个问题,这个程序会对输入的s字符串进行加密,也就是说会破坏我们的ROP链,同时我们也可以看到加密的位数是根据字符串的长度进行判断的strlen(s),这里有个小技巧:strlen(s)是通过'\0'的位置来进行对字符长度的判断的。也就是说,我们只要将字符串的首位设置为\0,那么程序逻辑就会判断要加密的程序长度为0,这样就不会对我们构造的ROP链进行破坏,接下来我们就可以利用栈溢出来构造我们的攻击方式了。

那么我们需要思考一下这类题的做法是什么呢?他什么后门函数也没给,即使栈溢出也不知道咋整啊?我们整理步骤如下:

  • 利用一个程序已经执行过的函数去泄露它在程序中的地址,然后取这个地址的末三位,然后取查找他使用的libc版本
  • 程序里的函数地址和它所使用的libc库中的函数地址是不一样的,他们之间存在一个偏移地址。我们通过offset = 函数中的地址 - libc中的函数地址取到这个偏移量
  • 得到偏移量之后之后我们可以通过程序中函数地址 = 函数地址 + offset的方式来找到其他函数在程序中的地址,然后我们就可以去构造rop链了

现在我们首先需要通过已经被执行的puts函数,利用他的plt和got地址来泄露我们的libc版本,我们构造以下程序:

我们得到了puts在程序中的地址的末九位9c0

接下来我们需要拿到它的libc版本,有两种方法:

  • 使用它libc检查的在线网站
  • 使用LibcSearcher库实现
    我们完成下面的libc定位使用,然后构造我们自己的ROP

    这里我们需要注意几个地方:
  • 一是我们获取我们的地址时我们并不知道会收到几条内容,一开始可以全部打印出来,然后收集你需要的信息
  • 二是关于libc的库要多进行几次尝试,如果都不正确就需要考虑是不是哪里出了问题
  • 三是关于构造ROP链时,我们需要在其前面添加一个ret实现栈对齐,关于这个我暂时还没有搞清楚,之后可能会继续加以记载吧
    执行攻击脚本,我们最终可以得到我们想要的构造程序,执行得到:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows API 学习~

Win32~用api 创建一个Windows 窗口 windows窗口创建过程 Windows API 索引 - Win32 apps | Microsoft Learn 创建项目 ​ 配置属性,系统里面子系统选择窗口 ​ ‍注册窗口类: 首先需要调用RegisterClassEx 函数来注册一个窗口类,该函数会向操作系统注册一个新的窗口类, 并返…

个人开发者神器:5款高效的项目管理工具推荐

作为个人开发者,高效的项目管理是确保工作顺利进行的关键。在众多的项目管理工具中,轻量级的 APP 因其便捷性和实用性备受青睐。本文将为您推荐 5 款个人开发者的神器——轻量级项目管理 APP,帮助您提升工作效率,更好地实现项目目标。 禅道项目管理软件 禅道是一款专业且开…

drawio使用阿里云最新图标

简介 draw.io是一款免费的在线绘图工具,可用于创建各种类型的图表、流程图、组织结构图、网络拓扑图等。它具有易于使用的直观界面和丰富的图形库,支持与Google Drive、OneDrive、Dropbox等云存储服务集成。用户可以直接在浏览器中使用draw.io,也可以将其安装为Chrome应用程…

VulnHub-DC-6靶机-wpscan爆破+命令注入反弹shell+nmap提权

一、环境搭建 选择扫描虚拟机选择靶机路径这里如果出现报错,无法导入,如VMware出现配置文件 .vmx 是由VMware产品创建,但该产品与此版 VMware workstation 不兼容,因此无法使用(VMware版本不兼容问题),可以修改.vmx文件版本和虚拟机一致二、信息收集 扫描ip nmap -sn 19…

浅析Golang的内存管理(中篇): go runtime的内存管理模型与内存分配器

文章目录go runtime的基本内存模型 三级存储体系(MCache,MCentral,Mheap) 对象分配流程 一、go runtime的基本内存模型go runtime 借鉴了C++的内存模型和TCMalloc(Thread-Caching Malloc)内存分配机制,再开始之前,先了解一些go runtime对内存对象抽象的名词概念,它们分…

浅析Golang的内存管理(上篇):操作系统内存管理

文章目录计算机存储体系介绍 虚拟存储器 内存管理单元与页式存储管理 CPU发起一次访存的全过程 一、计算机存储体系介绍从计算机的组成角度来看,计算机的存储分为,寄存器-高速缓存-主存储器(泛指内存)-本地存储(磁盘)-外部存储(光盘、云盘等),由下到上,运行速度越来…

SVN介绍与安装

一、svn介绍 1、svn是一个版本控制工具; -svN是subversion的简称:是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。 -SVN的作用:在项目组当中对需求规格说明书、测试用例、…

提示词装饰器:一种改善AI生成回复的简单方式

通过结构化提示解锁AI的全部潜力 人工智能是一种非常强大的工具,但其回应的质量往往取决于我们与其沟通的有效性。如果你曾经在从AI模型获得精确且结构良好的回答时遇到困难,你并不孤单。许多用户在提示制定中面临不一致、模糊的回应或过多的试验和错误。那么,是否有一种方法…

信息安全项目管理工具:等保2.0要求的3类检测系统

随着信息技术的飞速发展,信息安全问题日益凸显。等保 2.0 作为我国网络安全领域的重要标准,对信息安全提出了更高的要求。在等保 2.0 的要求下,信息安全项目管理工具中的 3 类检测系统发挥着至关重要的作用。本文将详细介绍这 3 类检测系统,帮助读者更好地了解信息安全领域…

[c++算法] 树的直径,包教包会!

哈喽大家好,我是 doooge。今天我们要将数论中的一个算法-树的直径。 $$\Huge 树的直径 详解$$ 1.树的直径是什么 这是一棵图论中的树:这棵树的直径就是这棵树中最长的一条简单路径。 2.树的直径怎么求 2.1暴力算法 直接对每个点进行 DFS,找到每个点离最远的点的距离,最后求…

图吧工具箱PC电脑工具(图拉丁吧硬件检测工具箱) v2025.01 中文绿色便携版

点击上方蓝字关注我 前言 图吧工具箱(大家通常叫它图拉丁吧硬件检测工具箱)是一个完全免费、开源、没有广告的硬件检测工具集合。这个工具箱是专门为喜欢自己动手组装电脑(DIY)的朋友们,特别是图钉社区的成员们制作的。里面包含了好多常用的硬件测试和检测小工具,特别适合…

在Windows上安装UOS打印机

因自己放在办公室发挥余热的Windows电脑即将寿终正寝,所以这两天试着将包括文件打印在内的基础网络服务逐渐转移到UOS主机上。 参照官方教程一通操作,Windows始终在添加打印机页面找不到同个局域网下的UOS主机,点击疑难解答则提示“该设备或资源未设置为接受端口“文件和打印…