0day 第12章--12.3.3 Ret2Libc实战之利用VirtualAlloc

实验环境:
Winxp sp3
VS2010
实验配置:
禁用优化、关闭GS、关闭safeseh、开启DEP
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

思路:当程序需要一段可执行内存时,可以通过kernel32.dll的VirtualAlloc申请一段具有可执行属性的内存。因此可通过利用此函数将shellcode复制到申请的内存空间中,以绕过DEP。
如何利用?
将返回地址覆盖为VirtualAlloc的地址,参数输入进去即可。
VirtualAlloc(
LPVOID lpAddress, #申请内存区域的地址,
SIZE_T dwSize, #申请内存的大小
DWORD flAllocationType, #申请内存的类型
DWORD flProtect); #申请内存的访问控制类型,如读、写、执行等权限

参数设置:
我们将lpAddress=0x00030000,只要是一个未被占用的地址即可。
dwSize=0xff,申请的空间足够存放shellcode即可,我们选择255个字节
flAllocationType=0x00001000,查看MSDN可知这里是……
flProtext=0x00000040,内存属性设为可读可写可执行。

比较:
VirtualAlloc与VirtualProtect最大的区别在于VirutalAlloc各个参数不存在动态确定问题,可以直接写到shellcode里边。

实验程序:

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>
char shell[]={
   "\x90\x90\x90\x90\x90\x90\x90\x90"};

int test()
{
   
	printf("OK!");
	char array[4]={
   0};
	memcpy(array,shell,sizeof(shell)+1);
	return 0;
}

int main()
{
   
	HMODULE hMod = LoadLibrary(L"shell32.dll");
	test();
	return 0;
}

第一阶段:利用VirtualAlloc函数申请一段具有执行权限的内存
1、找到VirtualAlloc的地址
OD载入程序,右键查找->所有模块名称中查找,输入VirtualAlloc。发现有很多VirtualAlloc
在这里插入图片描述
双击这里进入࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值