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

1Ch=16+12=28,+esp=32:偏移量是32
能溢出:100-0x1c-4=68字节
C伪代码:

理论基础
函数返回步骤 :
- 保存返回值:函数返回值保存在EAX寄存器
- 弹出当前栈帧,恢复上一个栈帧
a) ESP + 当前栈帧大小:堆栈平衡基础上,降低栈顶,回收当前栈帧空间
b) POP EBP:前栈帧EBP弹给EBP,恢复上一个栈帧
c) POP EIP:函数返回地址弹给EIP - 跳转:按EIP的值返回母函数继续执行
由函数调用过程可知,一般情况下,ESP中地址总是指向系统栈且不会被溢出的数据破坏。函数返回时,ESP所指的位置是淹没的返回地址的下一位(子函数平衡栈ret n时,ESP将指向下n位)。
可用”jmp esp”作为跳板动态定位shellcode
- 用内存中任意一个”jmp esp”的地址覆盖返回地址
- 函数返回后被重定向去执行内存中jmp esp指令
- 由于函数返回后ESP指向返回地址后,jmp esp执行后,CPU将到栈区函数返回地址之后的地方取指令执行
- shellcode的布置。缓冲区前面一段用任意数据填充,把shellco

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

被折叠的 条评论
为什么被折叠?



