是否可以在未设置执行许可权的情况下执行Linux二进制文件?


25

有没有办法在没有设置执行位的Linux下运行可执行二进制文件?chmod +x不是一个选择。

例如,它的权限可能r--r--r--只是。

通过将源传递给解释器(例如bash script.sh或),无需设置执行位和放入shebang即可执行脚本python script.py

那么有没有类似的东西execute abinaryfile可以将目标代码加载到内存中并运行呢?


3
制作副本并使用chmod选项?
TiCL 2011年

不,我想知道是否有一种方法可以在无法设置权限位(在给定文件或它的任何副本上)的环境中执行二进制文件
Tom

Answers:


36

您可以将/lib/ld*.so用作ELF解释器,如下所示:

$ cp /bin/ls /tmp/ls
$ chmod a-x /tmp/ls
$ /lib/ld-linux.so.2 /tmp/ls

实际名称因架构而异。有些名字包括/lib/ld-linux.so.2/lib/ld-linux-x86-64.so.2/lib/ld-2.7.so。您可能会发现它的唯一形式是/lib/ld*


好信息.....无论如何,ld代表什么?
Vineet Menon

@VineetMenon ld是程序链接器/加载器。它查找并加载程序使用的共享库,然后执行它。ld-linux处理ELF二进制文件。
丹尼尔·贝克

好吧,如果/lib/ld-linux.so.2不是可执行文件(那甚至有可能吗?)
LawrenceC

@ultrasawblade AFAIK,只能.so加载可执行文件,ld-linux这很重要。
丹尼尔·贝克

在64位Ubuntu上,它是/lib64/ld-linux-x86-64.so.2
Tor Klingberg

1

不,至少不是以相同的方式。执行python时,您仍在执行二进制文件。Python是+ x。您将需要编译一些可以加载文件并执行的文件。

TiCL应该让他/她的回答成为答案,因为这是最好的方法。


是的,我知道“ python”在那种情况下是二进制文件。我希望的是“已经编译了一些可以加载文件并执行的东西”……
Tom

@Tom您将找到可以将二进制文件读入内存并执行它的C程序。不过,我不知道Python是否足够低级,无法以C方式实现。
2011年

0

如果文件不可执行exec,Linux内核的系统调用将失败并显示EACCES

尽管可以sh myprog.sh,但尝试运行程序./myprog.sh无法正常进行,因为这样做时:

  • Bash使用exec系统调用 ./myprog.sh
  • shebang由execLinux内核的系统调用直接解释,如下所述:https : //stackoverflow.com/questions/2429511/why-do-people-write-the-usr-bin-env-python-shebang-on pyt的第一行/ 40938801#40938801
  • Linux内核拒绝未经可执行权限执行文件

可以通过以下方式验证main.c

#define _XOPEN_SOURCE 700
#include <errno.h>
#include <stdio.h>
#include <unistd.h>

int main(void) {
    char *argv[] = {"myprog", NULL};
    char *envp[] = {NULL};
    int ret;
    ret = execve("myprog.sh", argv, envp);
    perror("execve");
    printf("%d\n", errno);
    printf("%d\n", EACCES);
}

myprog.sh

#!/bin/sh
echo worked

如果myprog.sh不是可执行文件,则main失败并显示:

execve: Permission denied
13
13

已在Ubuntu 17.10中测试过gcc -std=c99

POSIX 7在以下位置提到了这一点:

在以下情况下,除fexecve()以外的exec函数将失败:

[EACCES]拒绝新过程映像文件的路径前缀中列出的目录的搜索权限,或者新过程映像文件拒绝执行权限。

进一步的理由可以在以下网址找到:https : //security.stackexchange.com/questions/66550/unix-execute-permission-be-easily-bypassed-is-it-superfluous-or-whats-the

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.