linux - 如何使用 shellcode 读取文件而不明确提及禁用写权限的系统调用(0x0f05)?
问题描述
我正在处理类似 ctf 的挑战,它正在过滤我的 shellcode 以确保我没有 syscall、sysenter 和 int 指令分别为 0x0f05 0x0f34 和 0x80cd 的十六进制值编码。它还禁用了写权限。我有一个 shellcode 可以打开一个使用 sendfile 系统调用的文件,但它包含 syscall 指令。之前的挑战是相同的,但启用了写入权限。我在那个挑战中成功地使用了一个自我修改的 shellcode 来获得标志。
这是我用来读取文件“flag”(GAS intel 语法)的汇编代码(带有系统调用):
.globl _start
_start:
.intel_syntax noprefix
mov rbx, 0x67616c66
push rbx
mov rax, 2
mov rdi, rsp
mov rsi, 0
syscall
mov rdi, 1
mov rsi, rax
mov rdx, 0
mov r10, 1000
mov rax, 40
syscall
mov rax, 60
syscall
过去一天,我一直在寻找在 Linux 中进行系统调用的替代方法,但这似乎是不可能的(我是汇编新手)。
我读到了通过Call Gates方法进行系统调用的另一种方法,但它似乎依赖于全局描述符表,我认为由于 ASLR 的原因我无法访问它(如果我错了,请纠正我)。
我不一定要寻找确切的答案,而只是寻求一些帮助来理解在这种情况下可以进行系统调用的方法。
解决方案
推荐阅读
- .net - AAD B2C:按 PrincipalName 搜索用户
- pubmed - Pubmed API 返回的结果少于 Web 界面
- python - 特定情况下 Python 中的列表推导
- python - 有没有办法使用 numpy 或 opencv 对图像进行切片,以使切片图像具有至少一个感兴趣对象的实例?
- api - 添加资源的最 RESTFul 方式是什么?
- twilio - Twilio 使用自定义参数将呼叫转接到另一个 Twilio 号码
- python - 是否可以模拟 os.scandir 及其属性?
- c++ - 在c++中运行程序时没有输出
- r - 如何使用 ggplot 为每个带有“+”或“NA”值的标题着色?
- lua - Garry'sMod 检测两个玩家之间是否有墙