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)

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

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

相关文章

【机器学习】基于集成学习的 Amazon 用户评论质量预测

实验六: 基于集成学习的 Amazon 用户评论质量预测 1 案例简介 ​ 随着电商平台的兴起,以及疫情的持续影响,线上购物在我们的日常生活中扮演着越来越重要的角色。在进行线上商品挑选时,评论往往是我们十分关注的一个方面。然而目前电商网站的…

vue前端+nodejs后端通信-简单demo

本文记录vue前端nodejs后端通讯最简单的方法,供广大网友最快速进入全栈开发。 技术架构 前端 vue axios 后端 nodejs express 一、前端部分-搭建VUE 项目 vue create Vnodenpm run serve 启动; 具体操作步骤,请自行百度,这里没…

ArcGIS学习(三)数据可视化

ArcGIS学习(三)数据可视化 1.矢量数据可视化 需要提前说明的是,在ArcGIS中,所有的可视化选项设置都是在“图层属性”对话框里面的“符号系统”中实现的。 对于矢量数据的可视化,主要有四种可视化方式: 按“要素”可视化按“类别”可视化按“数量”可视化按“图表”可视…

25.云原生ArgoCD高级之app of apps模式

文章目录 app of apps 模式介绍app如何管理apphelm方式管理kustomize方式管理 app of apps 模式介绍 通过一个app来管理其他app,当有多个项目要发布创建多个app比较麻烦,此时可以创建一个管理app,管理app创建后会创建其他app。比较适合项目环…

Linux--- vim详解

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 “学如逆水行舟&#xff0…

EF Core 的基本使用及常见的坑

EF Core 的基本使用及常见的坑 1. EF Core 是什么 简单来说,就是实现代码中的类到数据库中表的映射的一种方法。 宝啊,是不是觉得我才开篇就鬼话连篇。 举个例子,假设我们要创建一个名为employees的表,包含id、name、age和salar…

vue实现瀑布流

每个色块宽度一致&#xff0c;高度自适应 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"><meta name"renderer" content"we…

STM32F407移植OpenHarmony笔记7

继上一篇笔记&#xff0c;成功启动了liteos_m内核&#xff0c;可以创建线程了&#xff0c;也能看到shell控制台了。 今天研究文件系统&#xff0c;让控制台相关文件命令如mkdir和ls能工作。 liteos_m内核支持fatfs和littlefs两个文件系统&#xff0c; fatfs适用于SD卡&#xff…

【C++】C++入门 — 类和对象初步介绍

类和对象 1 类的作用域2 类的实例化3 类对象模型4 this指针介绍&#xff1a;特性&#xff1a; Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;下一篇文章见&#xff01;&#xff01;&#xff01; 1 类的作用域 类定义了一个新的作用域&#xff0c;类的…

指针的深入理解(四)

这节主要讨论sizeof和strlen的区别&#xff0c;以及一些理解题。 sizeof 求的是对象的大小&#xff0c;深入理解一点就是&#xff1a;这个对象&#xff0c;他一定有一块对应的内存空间。求的就是这一块内存空间。 strlen 只能用来求字符串&#xff0c; 求取的是字符串的长度。…

QT 范例阅读:系统托盘 The System Tray Icon example

main.cpp QApplication app(argc, argv);//判断系统是否支持 系统托盘功能if (!QSystemTrayIcon::isSystemTrayAvailable()) {QMessageBox::critical(0, QObject::tr("Systray"),QObject::tr("I couldnt detect any system tray ""on this system.&qu…

【C++】开源:Windows图形库EasyX配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Windows图形库EasyX配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#…

Linux进程信号(2)--信号的保存

目录 1.阻塞信号 1.1 信号其他相关常见概念 1.实际执行信号的处理动作称为信号递达(Delivery&#xff09; 2.信号从产生到递达之间的状态,称为信号未决(Pending)。 3.进程可以选择阻塞 (Block )某个信号。 1.2信号在内核中的表示 sigset_t 信号集操作函数 使用sigprocm…

nginx slice模块的使用和源码分析

文章目录 1. 为什么需要ngx_http_slice_module2. 配置指令3. 加载模块4. 源码分析4.1 指令分析4.2 模块初始化4.3 slice模块的上下文4.2 $slice_range字段值获取4.3 http header过滤处理4.4 http body过滤处理5 测试和验证 1. 为什么需要ngx_http_slice_module 顾名思义&#…

Vue中keep-alive的作用、原理及应用场景

在进行Vue开发的过程中&#xff0c;我们经常会遇到需要进行组件缓存的场景&#xff0c;这时候Vue提供的keep-alive组件就派上了用场。keep-alive组件是Vue内置的一个抽象组件&#xff0c;它可以将其包裹的组件进行缓存&#xff0c;提高组件的性能&#xff0c;同时也可以节省服务…

普渡机器人CEO预测2024年服务机器人市场将扩大

原创 | 文 BFT机器人 根据普渡科技有限公司的报告&#xff0c;商用服务机器人在东亚地区的应用比其他地方更为广泛。然而&#xff0c;预计到2024年&#xff0c;全球其他地区也将迎头赶上。这家总部位于中国深圳的公司自豪地宣称&#xff0c;它已经成为中国最大的此类机器人出口…

前端excel带样式导出 exceljs 插件的使用

本来用的xlsx和xlsx-style两个插件&#xff0c;过程一步一个坑&#xff0c;到完全能用要消灭好多bug。这时发现了exceljs&#xff0c;真香&#x1f600; 案例 <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"view…

详解WebRTC rtc::Thread实现

rtc::Thread介绍 rtc::Thread类不仅仅实现了线程这个执行器&#xff08;比如posix底层调用pthread相关接口创建线程&#xff0c;管理线程等&#xff09;&#xff0c;还包括消息队列&#xff08;message_queue)的实现&#xff0c;rtc::Thread启动后就作为一个永不停止的event l…

如何使用MCSM搭建我的世界Java版服务器并实现远程联机游戏

文章目录 1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 本教程主要介…

c语言实现greedy snake(贪吃蛇)

##第一个小项目 大一学生寒假项目 最终实现效果如图 一.以C语言实现个人小项目 在我们快速学完了一个高级编程语言&#xff0c;就应该写一个小项目来加以巩固自己的学习成果。 所以今天&#xff0c;我们来尝试写一写greedy snake&#xff0c;对于大学生来说也是可以加强能…