用stdin进行jmp-pop-call技术

时间:2019-02-10 19:17:55

标签: assembly nasm x86-64 system-calls shellcode

我已经将此代码编写为练习使用jmp-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

似乎当我按下Enter键时,我插入的值(加上Enter键)将传递给外壳。我不明白为什么会这样...

您能解释一下我的问题吗?

谢谢。

编辑 在这里,strace输出:

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 +++

正如Peter Cordes在评论中所说,read函数返回-1 EFAULT并使用--omagic选项将其组装起来可以正常工作。 现在,我的问题是:一个干净的解决方案是否可以通过jmp-pop-call技术使用该选项?

0 个答案:

没有答案