linux - 用 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]
可访问并且不会引发错误的地址错误。
解决方案
推荐阅读
- odbc - 在 Windows 10 上找不到 Lotus Notes ODBC
- reactjs - 我们可以在一个组件中有多个 useEffect 挂钩吗
- c# - 您可以使用原始 graphQL 语法使用 octokit.net 库在 c# 中查询 github API v4 吗?
- asp.net - 受保护的异步子程序未在生产中执行
- bash - sed 在模式中保留通配符值
- mysql - mysql xdevapi nodejs:返回插入的行 auto_increment id
- python - Tkinter在Anaconda Windows10中只能导入运行一次
- pdf - PDF:混淆文本编码以防止自动解析和复制+粘贴
- python - 如何在 selenium 和 python 程序之间切换?
- javascript - 如何等待函数在for循环js中完成?