JMP-поп-вызов технику со стандартным вводом - PullRequest
0 голосов
/ 10 февраля 2019

Я написал этот код как упражнение, чтобы попрактиковаться с техникой jc-pop-call shellcoding:

global _start

section .text
_start:
    jmp call_shellcode

shellcode:
    pop rsi
    ;sys_write syscall
    xor rax, rax
    mov al, 1
    xor rdi, rdi
    mov dil, 1
    xor edx, edx
    mov dl, 18
    syscall
    jmp call_shellcode2

shellcode2:
    pop rsi
    ;sys_red syscall
    xor rax, rax
    xor rdi, rdi    
    mov edx, 4
    syscall

    ; exit syscall
    xor rax, rax
    mov al, 60 ;mov rax, 60
    xor rdi, rdi ;mov rdi, 0
    add dil, 0
    syscall

call_shellcode:
    call shellcode
    welcome: db 'Insert password: ', 0xa

call_shellcode2:
    call shellcode2
    input: db 0xffffffff

Проблема заключается в следующем:

$ ./simple_shellcode
Insert password: 
abc
$ abc
bash: abc: command not found

Кажется, что когдаЯ нажимаю ввод, значение, которое я вставил (плюс ввод), передается в оболочку.Я не могу понять, почему это произошло ...

Можете ли вы попытаться объяснить мне проблему?

Спасибо.

РЕДАКТИРОВАТЬ Здесь,strace output:

execve("./BindShell", ["./BindShell"], 0x7fff3b5e0d00 /* 49 vars */) = 0
write(1, "Insert password: \n", 18Insert password: 
)     = 18
read(0, 123 
0x40104f, 4)                    = -1 EFAULT (Invalid address)
exit(0)                                 = ?
+++ exited with 0 +++

Как сказал в комментариях Питер Кордес, функция read возвращает -1 EFAULT и, собирая ее с опцией --omagic, работает нормально.Теперь мой вопрос: чистое решение использует эту опцию, используя технику jmp-pop-call?

...