学习编写Metasploit的exploit模块

表示终于是成功了,倒腾了一个星期了,周六在大神的指导下,栈溢出成功了!

在WinXP Sp3上写了一个栈溢出的漏洞,然后再BT5上写了个exploit模块,使之栈溢出,原理其实很简单,开一个数组然后赋值给该数组覆盖该函数的返回地址。简单介绍下如何获取返回地址,以及应当填充的字符的个数吧。

首先是返回地址Ret,即应该将漏洞代码的返回地址覆盖成的地址,Windows上一般采用的方法就是去调用一些系统进程的jmp/call esp指令(该地址是固定的,但Win7后加了地址随机化),然后再由该指令跳到shellcode,具体原理就不解释了,网上有好多说的很清楚的。

1.获取jmp/call esp指令的地址:

#include<windows.h>
#include<stdio.h>
#define DLL_NAME "kernel32.dll"
// 一般加载的进程像user32.dll,kernel32.dll  
int main(){
	BYTE *ptr ;
	int position, address ;
	HINSTANCE handle ;
	BOOL done_flag = FALSE ;
	handle = LoadLibrary(DLL_NAME) ;
 	if( !handle ){
		printf(" load dll error") ;
	 	exit(0) ;
	}
	ptr = (BYTE*) handle ;

	for( position = 0; !done_flag; position++ ){
		 try{
		 	  	  //机器码0xffe4对应的是jmp esp   
		 	  	  if( ptr[position] == 0xFF && ptr[position+1] == 0xE0 ){
  				  	  int address  = (int)ptr + position ;
    		   		  printf("OPCODDE found at 0x%x\n",address) ;
		 	  	  }
		 }
   		 catch(...){		  	   				     		  	  	
				        address = (int)ptr + position ;
	           			printf("END OF 0x%x\n",address) ;
				        done_flag = TRUE ;
   		 }
	}
	return 0 ;
}
这是从ODAY安全书上找到的一种方法,在查找地址的时候比较好用,下面是一些机器码及对应的指令


2.得到应该添加的空字符数

表示就是这个问题让我纠结了很久,最后还是因为差了八个字节,让ret处被shellcode给填充了,一直看不到shellcode执行的效果:

开始是直接把返回地址打出来,然后根据开的数组的大小计算个数,

void a(void(*b)()){
    ///
}
void b(){
    a(b) ;
}
在网上找到了这个打出地址的方法,后面大神也说这应该不会出错,而且个数也是4的整数倍,不会出现什么补齐的现象。。。希望有知道原因的赐教下。。。。。

后面还是用 ollydbg(强烈推荐使用)检测时候才发现这个问题,

第一次成功的经验,希望能对初学者有些帮助。。。。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Exploit 编写系列教程 译序............................................................................................................................................2 Exploit 编写系列教程第一篇:栈溢出...............................................................................3 Exploit 编写系列教程第二篇:跳至 ShellCode............................................................25 Exploit 编写系列教程第三篇 a:基亍 SEH 的 Exploit.................................................54 Exploit 编写系列教程第三篇 b:基亍 SEH 的 Exploit—又一个实例........................77 Exploit 编写系列教程第四篇:编写 Metasploit Exploit.............................................83 Exploit 编写系列教程第五篇:利用调试器模块及插件加速 exploit 开发.................94 Exploit 编写系列教程第六篇:绕过 Cookie,SafeSeh,HW DEP 和 ASLR..............126 Exploit 编写系列教程第七篇:编写 Unicode Exploit................................................218 Exploit 编写系列教程第八篇:Win32 Egg Hunting..................................................256 Exploit 编写系列教程第九篇:Win32 Shellcode 编写入门......................................316 Exploit 编写系列教程第十篇:利用 ROP 绕过 DEP.....................................................432 附录 A:对《基亍栈的溢出》一文的补充.......................................................................509 附录 B:对《编写 unicode exploit》一文的补充........................................................511
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值