;black box reverse engineering di un eseguibile ELF che attraverso la syscall ptrace va ad attaccarsi ad un processo in esecuzione per iniettare nello spazio di memoria di quest'ultimo una shellcode e poi eseguirla.
;la chiamata di sistema ptrace consente a un processo di eseguire il debug di un altro processo. utilizzando ptrace saremo in grado di interrompere l'esecuzione di un processo target ed esaminare i valori dei suoi registri e della memoria, nonché modificarli in qualsiasi valore desideriamo.
;il codice va ad iniettare la shellcode nella posizione dell'instruction pointer (registro rip le architetture x86_64) del processo a cui si è attaccato e di cui ottiene il controllo. la shellcode avvia una sessione di shell, e non restituire il controllo al processo originale.
;in linux esiste una protezione: per utilizzare questo eseguibile su un processo in running bisogna prima settare:
;echo 0 > /proc/sys/kernel/yama/ptrace_scope
;0 permessi ptrace classici. nessuna restrizione aggiuntiva sulle operazioni eseguite. l'utilizzo di PTRACE_TRACEME è invariato.
;1 ptrace limitato [valore predefinito]. quando si esegue un'operazione che richiede un ATTACH, il processo chiamante deve avere una relazione predefinita con il processo target. la relazione predefinita è che il processo target deve essere figlio del chiamante.
;arg uint32_t argc @ rdi
;arg char **argv @ rsi
;var int64_t canary @ rbp-0x8
;var void *var_60h @ rbp-0x60
;var void*data @ rbp-0xe0
;var pid_t pid @ rbp-0xe4
;var uint32_t var_f4h @ rbp-0xf4
;var char **str @ rbp-0x100
0x000012cf endbr64
0x000012d3 push rbp
0x000012d4 mov rbp, rsp
0x000012d7 sub rsp, 0x100
0x000012de mov dword [var_f4h], edi ;argc
0x000012e4 mov qword [str], rsi ;argv
0x000012eb mov rax, qword fs:[0x28]
0x000012f4 mov qword [canary], rax
0x000012f8 xor eax, eax
0x000012fa cmp dword [var_f4h], 2
0x00001301 je 0x1332
;prologo della main, alloca spazio sullo stack e setta il canarino, poi controlla se sono stati passati due parametri, in caso continua, altrimenti stampa una stringa di Usage e poi esce.
Read the whole post...