【PWN】学习笔记(三)【返回导向编程】(下)

news2024/10/5 21:17:48

目录

  • 课程
  • 回顾
  • ret2libc![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ebe1a9a9e54f4319946621dbe89c5774.png)
    • 做题
  • ret2libc2
  • ret2libc3

课程

课程链接:https://www.bilibili.com/video/BV1854y1y7Ro/?vd_source=7b06bd7a9dd90c45c5c9c44d12e7b4e6
课程附件: https://pan.baidu.com/s/1vRCd4bMkqnqqY1nT2uhSYw 提取码: 5rx6

回顾

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ret2libc在这里插入图片描述

.got.plt中存放的是代码的地址
在这里插入图片描述
nop滑梯,什么都不做执行下一个指令
在这里插入图片描述
一路nop到shellcode,只要指向nop区域即可;使得地址随机化变得低效
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

做题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

即使程序中没有call system指令,同时也不知道system libc的真实地址;但是我们一定会有system@plt,只要这个程序在任何地方引用过system这个函数
虽然secure函数中system(“shell?!”)没有任何用处,但是system()被放在了plt;如果连这一项都没有就需要在攻击之前泄露大量的信息,把真实地址泄露出来
在这里插入图片描述
在这里插入图片描述
还需要加上溢出ebp的四个字节,所以这里又是112
在这里插入图片描述
这里的padding 就是112个垃圾数据
在这里插入图片描述
可以简化成这个形式,都不需要exit了,不需要老老实实退出程序
在这里插入图片描述
逆向题入门也可以这样做
在这里插入图片描述

ret2libc2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
找不到/bin/sh
在这里插入图片描述
考虑写入进bss
在这里插入图片描述
在这里插入图片描述

值得注意的是这里调用了gets函数做了两次交互,而不是像之前的题目只发过去payload完事,最后一次交互需要输入/bin/sh
在这里插入图片描述
elf.symbols是程序编译链接时的粘合剂,每一个函数名和变量名都指代了自己存在的位置,在编译时对应名称的符号写入对应的内容
buf2属于变量名也是一个符号
在这里插入图片描述
这里老师是直接再输入了一次,我是在交互时输入
在这里插入图片描述

ret2libc3

在这里插入图片描述
在这里插入图片描述
先把四行字符串放在stdout缓冲区中,使用fflush将缓冲区清空再一口气把这些字符串输出在屏幕上
在这里插入图片描述
考虑到实际题目的代码量,这里可以按n修改这个这个变量的名称
找栈溢出的技巧:在每一个能输入的地方输入超长的数据,一旦崩溃就可能存在栈溢出漏洞
在这里插入图片描述
这里随机输入一个地址程序崩溃,但是这并不是栈溢出的崩溃,这里是地址无效导致的,所以需要找一个有效地址
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在继续输入超长数据时出问题了
在这里插入图片描述
在这里插入图片描述
main函数中用于保存局部变量的区域
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

首先调用子函数为其创建栈帧,将相关信息压栈
在这里插入图片描述
dest的空间是0x38,src的大小的0x100,将其通过strcpy(dest, src);覆盖会导致导致栈溢出
在这里插入图片描述
显然无法完成ret2systemcall
接下来就是ret2libc
plt是代码的填写者,got是代码的保存者
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中f7开头都是libc中的地址,80开头的都是elf本身的地址
在这里插入图片描述
这些f7开头的地址表示这些函数被调用过了,在libc中的地址已被填写,由此我们可以泄露这里面的地址以获取libc中的地址;这里我们选取puts,因为其地址位置高,所以我们在read的时候直接把puts对应的gots表中的起始地址传入
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
值得注意的是我们还有libc的拷贝,只要我们知道偏移量和其中一个值,system的值就可以推导出来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本地还是没打通

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

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

相关文章

Redis Set类型

集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中 1)元素之间是无序的 2)元素不允许重复 一个集合中最多可以存储2的32次方个元素。Redis 除了支持集合内的增删查改操作,同时还支持多个集合取交…

利用python进行数据分析 第十四章 数据分析案例

本书正文的最后一章,我们来看一些真实世界的数据集。对于每个数据集,我们会用之前介绍的方 法,从原始数据中ᨀ 取有意义的内容。展示的方法适用于其它数据集,也包括你的。本章包含了一 些各种各样的案例数据集,可以用…

hypervisor display显卡节点card0生成过程

ditsi 配置 lagvm/LINUX/android/vendor/qcom/proprietary/devicetree/qcom direwolf-g9ph.dts #include "direwolf-vm-la.dtsi" direwolf-vm-la.dtsi #include "display/quin-vm-display-la.dtsi" quin-vm-display-la.dtsi //对应/sys/class/drm/card…

软件测试面试八股文(超详细整理)

请你说一说测试用例的边界 参考回答: 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 常见的边界值 1)对16-bit 的整数而言 32…

Python纯净式下载与安装

1. 下载 Download Python | Python.org 建议下老版本些的,毕竟求稳。 点击需要的版本,然后滑倒最下面,可以看到不同系统对应的下载选项: 2. 安装 如果下载慢的话,可以复制链接到迅雷下载,下载完成后&…

Docker部署MinIO对象存储服务器结合内网穿透实现远程访问

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器,可以在各种环境中运行,例如本地、Docker容器、Kubernetes集群等。它兼…

人工智能革命:共同探索AIGC时代的未来

一、引言 随着大数据和强大的计算能力的兴起,人工智能技术(AI)正在快速发展,并为各个领域带来革命性的变化。人工智能与智能计算技术(AIGC)的融合不仅为企业、科研机构和普通用户提供了巨大的机遇&#xff…

【算法题】 TLV解析 Ⅱ (js)

从第三个字节开始因此 const msg "0F04ABABABAB"; const msg1 "0F04ABABABAB10001FF"; function solution(msg, tags) {const tagObj {};for (let i 0; i 3 < msg.length; ) {const tag parseInt(msg.slice(i, i 2), 16);const len parseInt(m…

漏洞复现--SysAid On-premise远程代码执行(CVE-2023-47246)

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

Unity3D对TXT文件的操作

系列文章目录 Unity工具 文章目录 系列文章目录前言一、读取txt文档1-1、TextAsset类读取1-2、代码实现1-2、打印结果 二、使用File类读取2-1.使用ReadAllText读取代码如下&#xff1a;2-2、结果如下2-3、使用ReadAllLines读取代码如下&#xff1a;2-4、读取结果 三、文件流读…

【深度学习】序列生成模型(二):束搜索

文章目录 序列生成束搜索理论基础算法步骤python实现 序列生成 在进行最大似然估计训练后的模型 p θ ( x ∣ x 1 : ( t − 1 ) ) p_\theta(x | \mathbf{x}_{1:(t-1)}) pθ​(x∣x1:(t−1)​)&#xff0c;我们可以使用该模型进行序列生成。生成的过程是按照时间顺序逐步生成序…

adb: error: cannot create file/directory ‘d:/1.png‘: No such file or directory

将文件从设备读取到PC 由于权限问题&#xff0c;不能直接pull到电脑磁盘根目录&#xff0c;否则会报错&#xff1a; adb pull <remote> <local> eg: C:\Users\admin>adb pull /sdcard/server.log C:\Users\admin\Desktop /sdcard/server.log: 1 file pulled.…

LeedCode刷题---二分查找类问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、二分查找 题目链接&#xff1a;二分查找 题目描述 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一…

基于STC89C51单片机实现的森林防火系统源码+仿真+原理图+设计报告,含视频讲解

森林防火 摘要 森林防火是非常必要的,火灾对森林的破坏是具有毁灭性的,有着很大的危害,在春秋季节森林火灾高发期,若发生火灾,对人民生活带来极大危害,不仅危害人们生产生活,而且对地球环境产生影响.本课题研究的内容是以单片机STC89C51为控制核心&#xff0c;以MQ-2型半导体电…

Android hilt使用

一&#xff0c;添加依赖库 添加依赖库app build.gradle.kts implementation("com.google.dagger:hilt-android:2.49")annotationProcessor("com.google.dagger:hilt-android:2.49")annotationProcessor("com.google.dagger:hilt-compiler:2.49"…

关于前端学习的思考-浮动元素嵌套块级元素12.18

1、块级元素嵌套浮动元素 先摆图片&#xff0c;当橘色的盒子高度减少的时候&#xff0c;NK AD TB PK NN并不会减少。如何解决呢&#xff1f; 加一个overflow&#xff1a;clip或者hidden 2、浮动元素嵌套块级元素 加一个overflow&#xff1a;clip或者hidden 综上所述&#xff0…

2020 年网络安全应急响应分析报告

2020 年全年奇安信集团安服团队共参与和处置了全国范围内 660起网络安全应急响应事件。2020 年全年应急响应处置事件行业 TOP3 分别为:政府部门行业(146 起)医疗卫生行业(90 起)以及事业单位(61 起&#xff0c;事件处置数分别占应急处置所有行业的 22.1%、13.6%、9.2%。2020 年…

修改npm源码解决服务端渲染环境中localstorage报错read properties of undefined (reading getItem)

现象&#xff1a; 这个问题是直接指向了我使用的第三方库good-storage&#xff0c;这是一个对localStorage/sessionStorage做了简单封装的库&#xff0c;因为项目代码有一个缓存cache.ts有用到 原因分析&#xff1a; 从表象上看是storage对象找不到getItem方法&#xff0c; 但…

Vue3使用Three.js导入gltf模型并解决模型为黑色的问题

背景 如今各类数字孪生场景对三维可视化的需求持续旺盛&#xff0c;因为它们可以用来创建数字化的双胞胎&#xff0c;即现实世界的物体或系统的数字化副本。这种技术在工业、建筑、医疗保健和物联网等领域有着广泛的应用&#xff0c;可以帮助人们更好地理解和管理现实世界的事…

Selenium框架的使用心得(一)

最近使用selenium框架实现业务前端的UI自动化&#xff0c;在使用selenium时&#xff0c;有一些心得想要和大家分享一下~ Selenium是一款用于web应用程序测试的工具&#xff0c;常用来实现稳定业务的UI自动化。这里&#xff0c;不想对其发展历史做介绍&#xff0c;也不想用官方…