2017-05-09 3 views
1

Lors de l'analyse de la charge utile linux/x64/shell/reverse_tcp de Metasploit, j'ai réalisé qu'il utilisait la valeur 0x1007 comme argument prot de l'appel système mmap(). La page de manuel mmap() indique que l'argument prot est soit PROT_NONE, soit le bit OU d'un ou de plusieurs des indicateurs suivants: PROT_EXEC, PROT_READ, PROT_WRITE PROT_NONE. Selon le fichier /usr/include/x86_64-linux-gnu/bits/mman.h, les indicateurs mentionnés ci-dessus ont les valeurs 0x4, 0x1, 0x2 et 0x0, respectivement. Comment cela peut-il correspondre à 0x1007?Comment l'argument prot de mmap() syscall peut-il être 0x1007?

La signature de l'appel système est la suivante:

void * mmap (void * addr, longueur size_t, int prot, int flags, int fd, off_t offset);

La partie du code dont je parlais est:

global _start 
section .text 
_start: 

xor rdi,rdi      
push byte +0x9     
pop rax      
cdq        
mov dh,0x10      
mov rsi,rdx      
xor r9,r9      
push byte +0x22     
pop r10       
mov dl,0x7      
loadall286  
+1

Les valeurs que vous mentionnez couvrent trois bits: le noyau ignore probablement les valeurs des autres bits. – gsg

+3

Le bit n'a pas de signification pour MMAP mais si vous examinez le code 'cdq' définit _RDX_ à zéro. alors 'mov dh, 0x10' définit _DH_ à 0x10 ce qui rend _RDX_ = 0x1000 (4096) qui est utilisé comme paramètre de longueur lorsque _RDX_ est ensuite copié dans _RSI_. Le fait qu'il soit défini dans l'argument flag est sans conséquence. La valeur 7 (les 3 bits les plus bas) sont les bits connus du noyau, et le noyau ignore les bits dont il ne se soucie pas. Ce n'est pas comme ça que je l'aurais fait. –

+0

Lorsque je compile et exécute ce code, il renvoie une adresse dans _RAX_ qui est ce que je m'attendais (ce commentaire est en réponse à une modification qui a été annulée) –

Répondre

2

Comme indiqué par @MichaelPetch, l'octet le plus significatif est ignoré par le syscall mmap(). Cela n'a servi qu'à donner une valeur au paramètre length en utilisant les instructions mov dh, 0x10 et mov rsi, rdx.