我最近一直在研究shellcode。我编写了一个shellcode来使用execve系统调用来生成shell。
这是汇编代码:
global _start
section .text
_start:
jmp Shellcode
Execve:
xor rax, rax
; Get the address of the string
pop rdi
; Convert the A -> 0x0 to null terminate the string
mov [rdi +7], byte ah
; Copy the address of the string in RDI to BBBBBBBB
mov [rdi +8], rdi
; Copy the NULL 0x0000000000000000 -> CCCCCCCC
mov [rdi +16], rax
; Setup the addresses
lea rsi, [rdi +8]
lea rdx, [rdi +16]
add rax, 59
syscall
Shellcode:
call Execve
shell_string : db "/bin/shABBBBBBBBCCCCCCCC"
我用这个编译了这段代码。
nasm -f elf64 execve-jmp-call-pop.nasm -o execve-jmp-call-pop.o
ld execve-jmp-call-pop.o -o execve-jmp-call-pop
当我运行这个程序时,它给了我分段错误。我在gdb中加载了这个程序,它在* mov [rdi +7],byte ah *指令上给出了分段错误。我试着看看rax和啊注册值,但gdb说它无法访问。我在虚拟框中使用Ubuntu 14.04 64位操作系统。我是新来的。我不知道如何解决它。