首页
社区
课程
招聘
[求助]为什么shellcode会执行?
发表于: 2013-9-10 00:43 2793

[求助]为什么shellcode会执行?

2013-9-10 00:43
2793
1       #include <stdio.h>

2

3       static char shellcode[]=

4       "\xeb\x17\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89"

5       "\xf3\x8d\x4e\x08\x31\xd2\xcd\x80\xe8\xe4\xff\xff\xff\x2f\x62\x69\x6e"

6       "\x2f\x73\x68\x58";

7

8       int main() {

9         int *ret;ret=(int *)&ret+2:
          (*ret)=(int)shellcode;
10        return 0;

shellcode为什么执行,强制转换就执行?

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 70
活跃值: (88)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
这个跟汇编指令call有关,call在call它的过程时,会将eip压入栈中,保存在[esp]中,所以只要修改了[esp]中的值使它指向其他位置,那么main函数在返回时就会跳到修改的值的指向的位置,而不是先前call之前压倒栈中的值。
2013-9-10 01:02
0
雪    币: 93
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
#include <stdio.h>
       //ShellCode  2进制机器码.
       static char shellcode[]=

       "\xeb\x17\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89"

       "\xf3\x8d\x4e\x08\x31\xd2\xcd\x80\xe8\xe4\xff\xff\xff\x2f\x62\x69\x6e"

       "\x2f\x73\x68\x58";

      
int main() {

      
         int *ret;

       此时的栈情况:
       char *envp
       char *argv[]
       int    argc      
       返回地址
       EBP      
       局部变量 int *ret

         ret=(int *)&ret+2:            执行完这句后 ret指向返回地址.因为ret是int型指
                                                  针.+2*int=+8字节
         (*ret)=(int)shellcode;     将ShellCode的地址写到返回地址里.当main函数执行完之后
                                                  retn就跳到了Shellcode处执行.   
         return 0;
}
2013-9-10 01:38
0
雪    币: 45
活跃值: (55)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
覆盖了返回地址,另外一些情况是覆盖了SEH Handler
2013-9-10 07:57
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看起来你也是刚刚起步哦
2013-11-17 19:00
0
游客
登录 | 注册 方可回帖
返回
//