shellcode 中 null byte 的成因和避免方式总结

news2024/11/18 23:39:31

背景

shellcode 中要避免 null byte(\x00)这个是个通用的概念(windows,linux 都是一样),因为栈溢出的数据作为字符串写入到栈上,\x00 会作为字符串终止符,毁掉整个 shellcode。

这就是为什么无论什么类型的栈溢出,无论用到什么技巧,在开发过程中都要千方百计避免 null byte 的出现。当然,还有应用自身的坏字符检测,这个我们以后再讨论,自己写 shellcode 的好处就是能够规避已知的坏字符。在某些特殊情况下,还能节省很多的栈空间(如果栈空间并不大的话,这就是好消息)。

今天我们讨论下 null byte 的成因,以及几个自己写 shellcode 的时候避免 null byte 的小技巧。

Null Byte 成因

开发的过程中,产生 Null Byte 的原因基本上有三个。

写入寄存器的值过小

例如我们需要寻找一个栈上的地址作为 Win32 API 的返回值写入地址,这个地址我们选择在 esp-0x260 的位置上。如果直接在作为减数的寄存器中写入 0x260,就会产生 null byte。

mov eax, esp
mov ecx, x260
sub eax, ecx

在这里插入图片描述

指令本身产生的 Null Byte

例如 mov eax, [eax] 指令,就会产生 null byte。

在这里插入图片描述

说完了两个最基本的成因,我们分享一下避免 null byte 的小技巧。

call 和 jmp 指令产生的 Null Byte

这个部分有机会写到自定义 shellcode 话再深入说。由于汇编也是从上到下执行的,这就涉及到代码逻辑的调整以及 call 指令的地址性质,得花点篇幅好好说。

避免 Null Byte(前两个成因)

解决小数产生的 Null Byte

方法1

针对第一种成因,我们可以选择使用负数的方式来解决。
拿上面的例子来说,我们可以取 0x260 的负数值,得到

fffffda0

在这里插入图片描述

然后使用加法而不是减法,得到相同的结果。

在这里插入图片描述

所有的数值过小的成因,都可以用这种方法解决。

方法2

或者,也可以使用 neg 指令,更加方便。

; 先将 0x260 的负数值写入 ecx,然后取负
mov ecx, 0xfffffda0
neg ecx

可以看到 opcode 里面没有 null byte。

在这里插入图片描述

同时运行起来,寄存器中也是我们想要的值。

在这里插入图片描述

在这里插入图片描述

解决指令本身产生的 Null Byte

针对第二种成因,很简单了,就是换个寄存器 😄

在这里插入图片描述

总结

第一种避免 null byte 的方式其实很简单,开发过程中注意就行,有小数都换成大数加负数或者负数取负即可。

第二种避免 null byte 的方式得结合实际情况,看当时哪个寄存器可用。可以看到除了特定的 mov eax, [eax] 会产生 null byte 外,使用其他寄存器都是安全的。

在这里插入图片描述

call 和 jmp 指令产生的 Null Byte,得从头开始讲了。不随便挖坑,还有坑没填完 😄

KEEP CALM AND HACK AWAY!

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

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

相关文章

HTML+CSS个人静态网页设计

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

【AGC】安全规则resource.data获取不到字段

问题背景 在表结构里有但resource.data获取不到uid字段 解决该问题 request变量是指请求,request.resource.data是请求数据的所有字段和值的映射;resource变量是指所请求的数据在数据库中保存的状态,resource.data是数据库中保存数据的所有…

教师工作量管理系统思路(链表应用)

教师工作量管理系统思路(链表应用) 文章目录教师工作量管理系统思路(链表应用)题目描述:初始信息菜单部分数据结构功能实现查询历史信息从键盘录入信息信息删除和修改工作量计算如何存储到工作量信息链表中&#xff1f…

Bootstrap响应式轮播效果网页(1+X Web前端开发中级 例题)

文章目录 📄题目要求 🧩说明 🧩效果图 💻HTML代码 🎯实现效果 📰完整答案 📄题目要求 阅读下列说明、效果图和HTML代码,进行静态网页开发,填写(1&…

springboot12总结篇(9 10 11)

1.视图解析 以重定向为例 如果返回字符串 则会调用视图解析器thymeleafResolver判断返回值为普通字符串,返回thymeleafView调用其render方法,拼接直接访问 2.异常处理 404 ControllerAdvie 处理异常类 ExceptionHandler ControllerAdvie 处理异常类…

适配器模式

思考适配器模式 适配器模式通过转换已有的接口,达成目标需要的接口 适配器模式还可以将多种差异化接口适配成同一接口做统一输出 1.适配器模式的本质 适配器模式的本质是:转换匹配,复用功能。 适配器通过转换调用已有的实现,从而能把已有的实现匹配成需要…

【Spring】——4、使用@Scope注解设置组件的作用域

📫作者简介:zhz小白 公众号:小白的Java进阶之路 专业技能: 1、Java基础,并精通多线程的开发,熟悉JVM原理 2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线…

VCED:学习Jina的简单操作

文章目录VCED:学习Jina的简单操作在pycharm里连接docker环境几个简单的jina demoimagetextvideoVCED:学习Jina的简单操作 在pycharm里连接docker环境 在pycharm里找到docker环境 New一个环境 在docker里进入terminal,找到python 位置 成功得到decker环境 运行jina…

004_步进电机实验

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。本章主要从步进电机的结构、工作原理、电机参数分别介绍,最后通过实验来实现步进电机运动的简单控制。本章所要实现的功能是:通过 ULN2003 驱动模块控制 28BYJ48 步进电机运行方向及速度&…

bugku-web-社工-初步收集

题目首页 社工又有杂项的存在 打开题目 小时候可能特感兴趣的网站 目录扫描一下 dirsearch 得到一个管理员后台登录网站 但是需要密码 再回到起始页面 存在一个下载点 可以操作 下载得到一个压缩包 解压打开 是一个小插件 尝试登录 同时 打开wireshark进行流量截取…

Nacos安装指南

Nacos安装指南 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: GitHub主页:https://github.com/alibaba/nacos GitHub的Release下载…

Monaco Editor教程(十六):缩略图minimap的配置详解

背景 缩略图 (Minimap) 是一种常见的用于快速预览和探索的工具,可作为导航辅助用户探索大规模图。 在大文件的阅读和编辑中,能够起到很好的导航作用,并且缩略图能够显示文件结构的大致轮廓,使开发人员能够快速知道对应的编辑位置…

WordPress重新安装的几种方法(2022年新版教程)

我们在建网站的过程中,可能出于某些原因会把网站重装,例如网站中病毒了、网站做的不满意,重头开始。本文会给大家分享一下2022年可行的重装WordPress网站方法。 1 重装WordPress的方法 方法一:重置数据库 方法二:宝塔面…

【MySQL】MySQL基础、详细总结

数据库Mysql 内容管理数据库基础什么是DB、DBMS、DBS、DBA?什么是元组、码、候选码、主、外码(键)、(非)主属性?主、外码的区别?为什么不推荐使用外码和级联 ?【分布式高并发】什么是…

Servlet规范之部署描述符

Deployment Descriptor 文章是对 JSR-000340 JavaTM Servlet 3.1 Final Release的Java™ Servlet规范的翻译,尚未校准 文章目录Deployment Descriptor部署描述符元素部署描述符的处理规则部署描述符部署描述符示意图web-app元素description Elementdisplay-name Ele…

从零开始学前端:json对象,冒泡排序 --- 今天你学习了吗?(JS:Day15)

从零开始学前端:程序猿小白也可以完全掌握!—今天你学习了吗?(JS) 复习:从零开始学前端:字符串、数组的方法 — 今天你学习了吗?(JS:Day12/13/14&#xff09…

范式建模维度建模 及结合BW的一些理解

用了几年BW了,时不时会想,BW为什么要这么设计啊,有时候用的可真麻烦,最近研究了下两种常见的建模理论,有了自己的一点感悟,我们从头开始,有很多资料是从大佬那里摘录的,就不一一列举了 一、范式…

DOPA-PEG-azide,Dopamine-PEG-N3,多巴胺PEG叠氮用于点击化学

多巴胺-聚乙二醇-叠氮(DOPA-PEG-azide,Dopamine-PEG-N3)该试剂具有更好的水溶性,它所属分类为Azide PEG Dopamine PEG。 peg试剂的分子量均可定制,有:2k、5k、3.4k、10k、20k、1k 。其质量控制为95%&#…

基于Matlab模拟用于天气观测的极化雷达回波(附源码)

目录 一、雷达定义 二、天线方向图 四、雷达脉冲合成 五、天气雷达力矩估计 六、仿真结果 6.1反射率 6.2 径向速度 6.3 频谱宽度 6.4 差分反射率 6.5 相关系数 6.6 差分相位 七、总结 八、程序 本示例展示了如何模拟满足天气观测要求的极化多普勒雷达回波。雷达在天…

柯桥增值税留抵如何退税?

今年,国家税务总局出台了“增值税期末留底退税”政策,这无疑对一些现金流缺乏的企业又是一重大利好呀! 那么问题来了,咱们会计该如何操作领回这一部分钱呢? 接下来跟着豆哥一块儿操作退税吧~ 政策解读 重点提醒&…