shellcode 之 JMP ESP 与 JMP EBX

利用JMP ESP植入SHELLCODE 当我们使用构造shellcode覆盖返回地址跳转到shellcode植入点的位置进行攻击时,常常很难找到该地址的具体位置,无法到达目标计算机上去调试,因此更常用的是利用JMP ESP指令来进行攻击。 代码: #include <stdio.h> #include <windows.h> #include <stdlib.h> #define PASSWORD ... 阅读详情
堆栈溢出在我们exploit时常用到,利用其一般方式是:JMP ESP 与 JMP EBX;
 昨天有一“同学”问我关于JMP EBX详细的问题,所以在此介绍一下:

1 JMP ESP

函数调用后的堆栈结构:

    L     L -> child program of Local variable     L -> 一般情况下此处保存的ebp     R -> EIP for return parent funcion      P -> pass to child prgram variable     P      P

exploit后的堆栈结构:

    N      N     N -> NOP把原来的Local variable空间覆盖掉,导致它overflow     R -> 系统dll中的Jmp esp的地址     N -> NOP把原来pass过来的参数给覆盖掉      N     N     S -> Shellcode     S     S 解释:   1) 函数返回时执行ret XXX指令; 要做的事: pop eip; add esp,XXX;   2) 此时栈中的R已不是原来的返回地址了,而改成了系统dll中的Jmp esp的地址(eg:0x7FFA4512)   3) ret指令执行完毕后,此时的EIP->Jmp esp的addr(eg:0x7FFA4512);ESP->我们的shellcode   4) 程序继续执行,此时EIP里的内容是Jmp esp,系统执行Jmp esp,就跳到我们的ShellCode了

  注: 子过程是stdcall/pascal调用,才要用NOP把原来pass过来的参数给覆盖掉       因为堆栈平衡在子过程中完成,通过ret XXX; 如果是cdecl或无参数就不要R下面的NOP了

 

2  JMP EBX

函数调用后的堆栈结构:

    L     L  -> child program of Local variable     L  -> 一般情况下此处保存的ebp     R  -> EIP for return parent funcion      P  -> pass to child prgram variable     P      P     PL -> parent program of Local variable     PL     PL     ...     SEH.prev    ->前一个EXCEPTION_REGISTRATION结构     SEH.handler ->异常处理例程入口

exploit后的堆栈结构:

    N     N ->      N ->      N ->      N ->      N     N     N -> NOP把原来的栈上异常处理前的东西全覆盖掉,导致它overflow和Trap     N     N     ...     J -> 现在内容是0xeb 0x04 0x90 0x90(Jmp ___FCKpd___08);原来是前一个EXCEPTION_REGISTRATION结构     E -> 系统dll中的Jmp ebx的地址     S -> Shellcode     S     S 解释:   1) 子过程返回,此时的返回地址已经改成Nop了,EIP->0x90909090;   2) EIP所指向的地址不可访问,GP   3) SEH被激活,但此时的处理地址是系统dll的Jmp ebx的地址   4) SEH激活后EBX指向的是J的地址,就是前一个EXCEPTION结构的地址   5) 程序继续执行Jmp ebx后,现在EIP指向J的地址   6) 程序再继续执行Jmp___FCKpd___08,到我们的shellcode了

  注: 关于SEH激活后EBX指向的是J的地址,我debug到ntdll中的KiRaiseUserExceptionDispatcher       它会调用一个过程(0x77FACBB2),在这个过程中它主要处理了:       a)它会调用一个过程(0x77FBB3BC)把SEH的最后一个EXCEPTION_REGISTRATION结构放到EBX中       b)它会调用一个过程(0x77FBB23C)通过指针调用我们的SEH处理函数       a)处对应代码解释        77FACBC8    E8 EFE70000     CALL ntdll.77FBB3BC        77FACBCD    8365 FC 00      AND DWORD PTR SS:[EBP-4],0        77FACBD1    8BD8            MOV EBX,EAX                77FBB3BC    64:A1 00000000  MOV EAX,DWORD PTR FS:[0]        77FBB3C2    C3              RETN       b)处对应代码解释       77FACC06    6A 10           PUSH 10       77FACC08    53              PUSH EBX       77FACC09    6A 00           PUSH 0       77FACC0B    FF75 0C         PUSH DWORD PTR SS:[EBP+C]       77FACC0E    56              PUSH ESI       77FACC0F    E8 2C7E0000     CALL ntdll.77FB4A40       77FACC14    8945 08         MOV DWORD PTR SS:[EBP+8],EAX       77FACC17    FF73 04         PUSH DWORD PTR DS:[EBX+4]; exploit.__except_handler3       77FACC1A    8D45 F0         LEA EAX,DWORD PTR SS:[EBP-10]       77FACC1D    50              PUSH EAX       77FACC1E    FF75 0C         PUSH DWORD PTR SS:[EBP+C]       77FACC21    53              PUSH EBX       77FACC22    56              PUSH ESI       77FACC23    E8 14E60000     CALL ntdll.77FBB23C

      77FBB23C    BA 86B2FB77     MOV EDX,ntdll.77FBB286       77FBB241    EB 09           JMP SHORT ntdll.77FBB24C       77FBB243    90              NOP       77FBB244    BA ADB2FB77     MOV EDX,ntdll.77FBB2AD       77FBB249    8D49 00         LEA ECX,DWORD PTR DS:[ECX]       77FBB24C    55              PUSH EBP       77FBB24D    8BEC            MOV EBP,ESP       77FBB24F    FF75 0C         PUSH DWORD PTR SS:[EBP+C]       77FBB252    52              PUSH EDX       77FBB253    64:FF35 0000000>PUSH DWORD PTR FS:[0]       77FBB25A    64:8925 0000000>MOV DWORD PTR FS:[0],ESP       77FBB261    FF75 14         PUSH DWORD PTR SS:[EBP+14]       77FBB264    FF75 10         PUSH DWORD PTR SS:[EBP+10]       77FBB267    FF75 0C         PUSH DWORD PTR SS:[EBP+C]       77FBB26A    FF75 08         PUSH DWORD PTR SS:[EBP+8]       77FBB26D    8B4D 18         MOV ECX,DWORD PTR SS:[EBP+18]       77FBB270    FFD1            CALL ECX ; exploit.__except_handler3       77FBB272    64:8B25 0000000>MOV ESP,DWORD PTR FS:[0]       77FBB279    64:8F05 0000000>POP DWORD PTR FS:[0]       77FBB280    8BE5            MOV ESP,EBP       77FBB282    5D              POP EBP       77FBB283    C2 1400         RETN 14

 

Windows SEH的整个处理并不是想象的那么简单,涉及到KiTrap/KiUserTrapHandler

具体参见:  http://linux.insigma.com.cn/jszl.asp  http://linux.insigma.com.cn/jszl.asp?docid=157542564

以jmp esp 为跳板的shellcode开发 0x00 Shellcode概述 Shellcode与exploit 1) shellcode:缓冲区攻击中植入进程的代码。进行删改文件、窃取数据、上传木马并运行、格式话硬盘等。用汇编语言编写,并转换成二进制机器码,内容和长度受到苛刻限制。 2) exploit: 漏洞利用程序,用于生成攻击性的网络数据包或其他形式的攻击性输入。exploit的核心是淹没返回地址,劫持进程控制权,跳去执行shel 阅读详情

相关推荐

PWN-shellcode

构造一段shellcode的作用就是为了在缓冲区溢出时将shellcode的地址覆盖掉正常的返回地址。 题目: 1Ch=16+12=28,+esp=32:偏移量是32 能溢出:100-0x1c-4=68字节 C伪代码: 理论基础 函数返回步骤 : 保存返回值:函数返回值保存在EAX寄存器 弹出当前栈帧,恢复上一个栈帧 a) ESP + 当前栈帧大小:堆栈平衡基础上,降低栈顶,回收当前栈帧空间...

MuMuLee_的博客 2086

利用异常处理执行shellcode实例

    在《Q版缓冲区溢出教程》中有一个例子,如下:#include #include char name[] = "/x41/x41/x41/x41"       //name[0] - name[3]   "/x41/x41/x41/x41"       //name[4] - name[7]  "/x41/x41/x41/x41"       //ebp"/x12/x45/xfa/x7f

要饭's Blog 2593

CTF Pwn 062 栈溢出实战:受限缓冲区下的极简 Shellcode 构造与利用

栈溢出是二进制安全领域的经典漏洞,其原理是程序向栈上的固定长度缓冲区写入超量数据,导致覆盖相邻的返回地址等关键数据,从而劫持程序控制流。理解栈帧布局、函数调用约定及内存读写机制是掌握该漏洞的基础。在安全防护机制(如NX、ASLR)未完全开启的场景下,攻击者可将恶意机器代码(Shellcode)注入栈中并跳转执行,实现任意命令执行或权限提升,这在CTF竞赛和渗透测试中具有重要实战价值。当缓冲区空间极度受限或存在字符过滤时,传统的长Shellcode无法使用,需要构造极短且不含坏字符(如空字节)的Shellco

weixin_30736301的博客 428

JMP指令寻址方式总结,JMP BX指令寻址方式是什么

jmp dword ptr 内存单元地址 ( 段间转移) 高字地址存放cs 低字节存放ip。jmp far ptr 标号 超段转移 跳转包含目标地址jmp reg 16位寄存器。jmp short 标号 段间跳转 -128-127。jmp word ptr 内存单元地址 段内转移。jmp 指令的几种寻址方式。

我写写哈的博客 4091

轻松将jmp esp方式 改写为jmp ebx方式.doc

轻松将jmp esp方式 改写为jmp ebx方式.doc

CAS5和CAS6自定义异常提示消息

CAS自定义异常提示消息

weixin_42949219的博客 980

phim java.net_xemphimhai.net服务器iP

2021-01-30-----2021-01-3031.13.91.332021-01-30-----2021-01-3059.188.250.542021-01-30-----2021-01-3069.63.187.122021-01-30-----2021-01-3091.195.240.942021-01-30-----2021-01-30108.160.167.1482021-01-30-...

weixin_34365042的博客 1万+

stm32驱动NRF24L01_原理+代码解析

NRF24L01是NORDIC公司生产的一款无线通信通信芯片,采用FSK 调制,集成NORDIC自家的Enhanced Short Burst协议。可以实现点对点或是1对6的无线通信。无线通信速度最高可达到2Mbps。①2.4G全球开放的ISM频段,免许可证使用。②最高工作速率2Mbps,高校的GFSK调制,抗干扰能力强。③126个可选的频道,满足多点通信和调频通信的需要。④内置CRC检错和点对多点的通信地址控制。⑤可设置自动应答,确保数据可靠传输。//NRF24L01寄存器操作命令。

zyc18700766982的博客 2万+

2021-02-09 sex没有被调用出来的原因 ,答案。 封装的sex

上个问题的答案。 sex是私有变量, 得用set方法。 在父类里面写一个set方法,后面的test类,就可以调用出来sex了。 所以,记住,凡是私有的变量,属性,调用不出来的, 要用set, get方法去调用。但是,不得不说的是您的年龄劣势,真的是客观现实。 为您过去的失败而买单,付出。 解决思路: 是应该先看 不能出来的方法,是什么属性。 然后再去复习相关课程。 要不然,真的没有办法的! 比如这个sex, 就是私有的,因为封装了。不能被随便调用, 记住一个...

chenggong9527的博客 5604

深入解析EXI协议在ISO15118-2命令测试中的编解码实践

本文深入探讨了EXI协议在ISO15118-2车桩通信标准中的关键作用与实践方法。EXI编解码测试是确保通信准确性与效率的核心环节,文章详细介绍了从搭建测试环境、选择工具库到编写完整测试代码的全过程,并分析了结果差异的常见原因与调试技巧,为电动汽车充电系统的开发者提供了实用的技术指南。

potato的博客 1050

保姆级教程:用BIGEMAP和Global Mapper搞定5米精度DEM高程数据下载与处理

本文提供了一份详细的5米精度DEM高程数据处理教程,涵盖从BIGEMAP下载到Global Mapper处理的完整流程。通过实战案例和避坑指南,帮助用户掌握高效下载DEM数据、优化等高线生成及坐标系转换的关键技巧,适用于GIS新手和专业人士。

weixin_34169322的博客 392

shellcode 之 JMP ESP 与 JMP EBX [转载]

shellcode 之 JMP ESP 与 JMP EBX 2010-04-02 10:32堆栈溢出在我们exploit时常用到,利用其一般方式是:JMP ESP 与 JMP EBX;<br />昨天有一“同学”问我关于JMP EBX详细的问题,所以在此介绍一下:<br /><br />1 JMP ESP<br />函数调用后的堆栈结构:<br />    L<br />    L -> child program of Local variable<br />    L -> 一般情况下此处保存的ebp<

turbocc 因程序而激情 962

使用再生龙备份还原liunx系统(精确每一步)

再生龙镜像可自行到官网下载(ISO/ZIP格式均可),然后使用tuxboot烧录工具制作启动盘,另外准备一个U盘用来存储备份的镜像文件,即再生龙盘和存储盘是两个分开的。当然也可以用分区工具把同一个硬盘分区来使用,比较方便,先学会基本的吧,只是告诉有个捷径,省个U盘。

米可的博客! 8382

轻松将jmp esp方式 改写为jmp ebx方式

转载:Q版黑客溢出教程一书写这篇文章,希望能给想我一样的初学缓冲区溢出的菜鸟一些帮助,因为到现在的确还没找到介绍这类的文章。首先,介绍在堆栈溢出中,我们的两种利用方式—jmp esp和jmp ebx;接下来,说明了其转化的简单方法;最后给了两个实际例子,将isno写的.printer利用代码和flashsky写的RPC利用代码改写成jmp ebx的方式,以实现对win2000 sp0-sp4全版本

571

LVGL在单色屏上运行

本文主要讲述LVGL在单色屏应用中的实现思路,并已验证通过。网上关于lvgl移植的文章有很多了,本文不加以赘述。

weixin_43278295的博客 4465

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2668

isno的一个找任意进程中JMP ESP/EBX指令的小程序

没什么用,方便找到比较通用的地址/////////////////////////////////////////////////////// Get JMP ESP/JMP EBX/CALL EBX Address in a Process//                     by isno//            必须在VC下用DEBUG模式编译!!!////////////////

uuty的专栏 1927

Google 二次签名 导致 Facebook , Google 登录失败

google 授权登录

xq610928的博客 1957

Get JMP ESP/JMP EBX/CALL EBX Address in a Process

/////////////////////////////////////////////////////// Get JMP ESP/JMP EBX/CALL EBX Address in a Process// by isno// 必须在VC下用DEBUG模式编译/////////////////////////////////////////////////////#include &lt;...

爱.NET 228

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

又搞定了一道,做个记录

通用 jmp esp  在xp 2000 win7 0x7ffa4512 通用pop pop ret 0x7f5a1571 通用call ebx 0x7ffa1571

ice 176

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

绕过ASLR实战:如何利用jmp esp指令在栈溢出中稳定执行shellcode

本文详细介绍了如何利用jmp esp指令绕过ASLR保护,在栈溢出漏洞中稳定执行shellcode的实战技巧。通过分析ASLR机制、定位固定地址指令、构造精确payload等步骤,帮助安全研究人员有效应对现代操作系统的防御措施,提升漏洞利用成功率。

a1b2c3d的博客 776

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Shellcode的原理及编写

1.shellcode原理

maotoula的专栏 7万+

缓冲区溢出(栈溢出)实验 之 JMP ESP

3、缓冲区溢出之JMP ESP 本文属于原创,如有错误请指正。其中引用他人的部分已经标出,如涉及版权问题请联系本人 这里不得不讲一讲JMP ESP的原理了,在实验之前我一直没看懂他是如何试下跳转ESP之后回到栈区执行我们的shellcode的。在实验中你仔细观看会发现随着函数栈的销毁ESP是在变化的,JMP ESP正式利用这种变化,将我们精心准备的shellcode执行。   JMP ES...

大头的博客 1万+

JMP ESP =>SEH(CALL EBX)

首先你要知道怎么利用JMP ESP的方式 其利用格式是ORS,这里O=NOP,R=RET(jmp esp的地址),S=ShellCode。就是把缓冲区一直覆盖成NOP(空指令,什么都不做),直到原来的EIP位置时,J JMP ESP,紧跟后面才是我们的ShellCode。  这种方式执行到ShellCode的原理:正常情况下,函数返回时,RET,等于POP EIP,即回复原来PUSH的EIP

Yatere的天平秤 1745

栈溢出 利用jmp esp绕过栈帧移位

实验代码 #include<stdio.h> #include<windows.h> #define PASSWORD "1234567" int verify_password(char *password) { int authenticated; char buffer[44]; authenticated = strcmp(password,PASSWORD); strcpy(buffer,password);//overflowed return authenti

Misaka10046的博客 746
上一篇: 线程调度的部分资料
下一篇: 恢复tcpip.sys的dispatch hook
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值