首页 > 解决方案 > 用 read() 系统调用覆盖 Shellcode?

问题描述

我试图通过一个相当复杂的 shellcode 过滤器,为此我使用了多阶段 shellcode 注入。对于我的第一阶段,我有以下内容:

.global _start
_start:
.intel_syntax noprefix

        mov rax, 0
        mov rdi, 0
        lea rsi, [rip+10]  
        mov rdx, 1000
        syscall

这个调用read(0, rip+10, 1000)应该从标准输入读取额外的shellcode,并在系统调用之后插入它,但是我得到了一个

read(0, 0x401018, 1000)                 = -1 EFAULT (Bad address)

执行时。我已经编译了

gcc -Wl,-N --static -nostdlib -o stage1 stage1.s

并提取原始 .text 部分

objcopy --dump-section .text=stage1-opcodes --writable-text stage1

这应该使代码的 .text 部分可写。我不确定我还需要做什么来确保内存地址[rip+10]可访问并且不会引发错误的地址错误。

标签: linuxassemblyx86-64shellcode

解决方案


推荐阅读