PWN-shellcode

本文介绍了缓冲区溢出中shellcode的基本概念,详细讲解了函数返回步骤,如何利用"jmp esp"作为跳板动态定位shellcode,并探讨了如何在实践中构造shellcode。还提到了ASLR、ROP和系统调用在安全中的作用。

构造一段shellcode的作用就是为了在缓冲区溢出时将shellcode的地址覆盖掉正常的返回地址。

题目:

依旧是栈溢出
1Ch=16+12=28,+esp=32:偏移量是32
能溢出:100-0x1c-4=68字节

C伪代码:

汇编代码

理论基础

函数返回步骤 :

  1. 保存返回值:函数返回值保存在EAX寄存器
  2. 弹出当前栈帧,恢复上一个栈帧
    a) ESP + 当前栈帧大小:堆栈平衡基础上,降低栈顶,回收当前栈帧空间
    b) POP EBP:前栈帧EBP弹给EBP,恢复上一个栈帧
    c) POP EIP:函数返回地址弹给EIP
  3. 跳转:按EIP的值返回母函数继续执行

由函数调用过程可知,一般情况下,ESP中地址总是指向系统栈且不会被溢出的数据破坏。函数返回时,ESP所指的位置是淹没的返回地址的下一位(子函数平衡栈ret n时,ESP将指向下n位)。
可用”jmp esp”作为跳板动态定位shellcode

  1. 用内存中任意一个”jmp esp”的地址覆盖返回地址
  2. 函数返回后被重定向去执行内存中jmp esp指令
  3. 由于函数返回后ESP指向返回地址后,jmp esp执行后,CPU将到栈区函数返回地址之后的地方取指令执行
  4. shellcode的布置。缓冲区前面一段用任意数据填充,把shellco
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值