标签: execve

了解执行和设置环境变量的要求

我们在解释老师方面遇到了很多麻烦.我们要求澄清并从他那里得到以下回复

  1. 对于execve,使用导出的变量向它发送一个环境,并创建一个内置命令来生成/ bin/bash的子shell,这样就可以使用env查看导出的变量.

    (他在谈论在这里创建我们自己的环境变量.)

  2. 是创建自己的.您可以在shell启动时复制environ并仅添加导出的变量

这与我在Stack Overflow上的以下帖子有关(阅读这篇文章将帮助您理解我想要做的事情):

使用execve的新路径来运行ls命令

我们对此非常困惑.我将再次解释我们现在要做的事情.与你的Linux shell如何做到这一点,我们需要编写自己的程序,可以设置环境变量,如PATH和USER以及用户想要定义的其他任何变量.

你将如何调用它的一个例子是(在你的程序中提示):

mysetenv dog spike
Run Code Online (Sandbox Code Playgroud)

这将创建一个看起来像"dog = spike"的环境变量

更重要的是,我们需要能够设置自己的PATH变量并将其发送到exec命令.这是一个令人困惑的部分,因为基于我们所有的问题,我们不明白我们应该做什么.

c path exec execve

12
推荐指数
2
解决办法
6万
查看次数

execve("/ bin/sh",0,0); 在管道里

我有以下示例程序:

#include <stdio.h>

int
main(int argc, char ** argv){
    char buf[100];

    printf("Please enter your name: ");
    fflush(stdout);
    gets(buf);
    printf("Hello \"%s\"\n", buf);

    execve("/bin/sh", 0, 0);
}
Run Code Online (Sandbox Code Playgroud)

我当我没有任何管道运行时,它应该工作,并返回一个shpromt:

bash$ ./a.out
Please enter your name: warning: this program uses gets() which is unsafe.
testName
Hello "testName"
$ exit
bash$
Run Code Online (Sandbox Code Playgroud)

但这不适用于管道,我想我知道为什么会这样,但我无法找到解决方案.示例运行波纹管.

bash$ echo -e "testName\npwd" | ./a.out
Please enter your name: warning: this program uses gets() which is unsafe.
Hello "testName"
bash$
Run Code Online (Sandbox Code Playgroud)

我认为这与以下事实有关:以一种接收EOF 的方式gets清空并且stdin/bin/sh没有错误消息的情况下退出.

但是我如何解决这个问题(如果可能的话,不修改程序,如果没有gets …

c shell freebsd pipe execve

10
推荐指数
1
解决办法
7721
查看次数

execve - 没有这样的文件或目录?

我在执行时遇到一些问题。我正在尝试制作一个可以像 bash shell 一样运行的 shell,但是我在分叉的子进程执行命令时遇到问题。这是我为孩子准备的。cmd 是一个 char * ,其中包含用户输入的命令。但是,当我运行此程序时,我从 perror 中收到此错误:

execve error: No such file or directory.
Run Code Online (Sandbox Code Playgroud)

我已经用一个简单的 ls 尝试过该程序,它应该使 path="/bin/ls" 并执行它(我已经确认这是我的 ls 命令所在的位置),但它仍然抱怨。我究竟做错了什么?谢谢!

if(pid == 0)
{
    // Parse the command
    char * word = strtok(cmd, " ");
    char path[128] = "/bin/";
    strcat(path, word);

    // Execute the process
    char * newenvp[] = { NULL };
    char * newargv[] = { path, NULL };
    ret = execve(path, newargv, newenvp);

    if(ret == -1)
        perror("execve error");

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

c linux execve

7
推荐指数
1
解决办法
4万
查看次数

SIGKILL杀死了这个过程

我有一个进程在执行程序后立即被杀死.这是已编译的可执行文件的代码,它是一个小程序,它读取由标准输入(通常是描述性文件)中的数字表示的多个图形,并使用Prim算法找到每个图形的最小生成树(它不显示结果,它只是找到解决方案).

#include <stdlib.h>  
#include <iostream>  

using namespace std;

const int MAX_NODOS = 20000;
const int infinito = 10000;

int nnodos;
int nAristas;
int G[MAX_NODOS][MAX_NODOS]; 
int solucion[MAX_NODOS][MAX_NODOS];
int menorCoste[MAX_NODOS];
int masCercano[MAX_NODOS];



void leeGrafo(){
    if (nnodos<0 || nnodos>MAX_NODOS) {
        cerr << "Numero de nodos (" << nnodos << ") no valido\n";
        exit(0);
    }  
    for (int i=0; i<nnodos ; i++)
        for (int j=0; j<nnodos ; j++)
            G[i][j] = infinito; 
    int A,B,P;
    for(int i=0;i<nAristas;i++){
        cin >> A >> B >> P; 
        G[A][B] = P; …
Run Code Online (Sandbox Code Playgroud)

c++ ubuntu gcc sigkill execve

6
推荐指数
2
解决办法
4690
查看次数

尽管缺少基于文件系统的功能,如何执行进程并保留功能?

我想让系统在没有setuid文件“+p”功能的情况下可用,并且通常没有在我设置PR_SET_NO_NEW_PRIVS时禁用的东西。

使用这种方法(init集合PR_SET_NO_NEW_PRIVS和基于文件系统的能力提升不再可能),您无法“重新填充”您的能力,只需要小心不要“泼洒”它们。

如何在execve不“飞溅”任何授予的功能的情况下进行其他处理(例如新程序的文件是否为setcap =ei)?只是“我相信这个新过程就像我相信自己一样”。例如,赋予用户一项能力(并且用户想在他启动的任何程序中行使它)......

我可以永久制作整个文件系统=ei吗?我想让文件系统不干扰该方案,不能授予或撤销功能;通过父->子事物控制一切。

linux execve linux-capabilities

6
推荐指数
1
解决办法
3326
查看次数

execve如何调用动态链接器/加载器(ld-linux.so.2)

我用gcc编译并链接了最基本的C程序test.c:

int
main() {
}
Run Code Online (Sandbox Code Playgroud)

正如所料,输出是动态链接的可执行文件:

$ file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses     shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x0f806c099f74132a158d98aebde4639ae0998971, not stripped
Run Code Online (Sandbox Code Playgroud)

运行strace提供以下输出:

$ strace -f ./test
execve("./test", ["./test"], [/* 31 vars */]) = 0
brk(0)                                  = 0x248d000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f77eeb27000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=109292, …
Run Code Online (Sandbox Code Playgroud)

linux linker system-calls execve

6
推荐指数
1
解决办法
1724
查看次数

为什么我们必须在 subprocess.Popen 中使用列表?

我的问题更多的是理论性而非实际性,我找到了更多的答案来解释我们如何在通话中使用列表,而不是为什么subprocess.Popen

例如众所周知:

Python 2.7.10 (default, Oct 14 2015, 16:09:02)
[GCC 5.2.1 20151010] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> cmd = subprocess.Popen(["python", "-V"], stdout=subprocess.PIPE)
Python 2.7.10
Run Code Online (Sandbox Code Playgroud)

然后我在UNIX上乱搞,发现了一些有趣的东西:

mvarge@ubuntu:~$ strace -f python -V 2>&1
execve("/usr/bin/python", ["python", "-V"], [/* 29 vars */]) = 0
Run Code Online (Sandbox Code Playgroud)

可能两者execve和使用的列表模型subprocess都有某种相关性,但是任何人都可以对此给出一个很好的解释吗?

提前致谢。

python subprocess execve

6
推荐指数
1
解决办法
2653
查看次数

Python sys.executable为空

我正在测试在os.execve虚拟环境中进行一些恶作剧。sys.executable如果我将当前的python进程替换为另一个python子进程,就会遇到空的问题。

以下示例显示了发生的情况(在python shell中运行):

import os, sys
print(sys.executable) # works this time
os.execve("/usr/bin/python", [], {}) # drops me into a new python shell
import sys # yes, again
print(sys.executable) # is empty
Run Code Online (Sandbox Code Playgroud)

我在python shell中运行以上命令的完整输出:

 lptp [ tmp ]: python
Python 2.7.10 (default, Oct 14 2015, 16:09:02) 
[GCC 5.2.1 20151010] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, sys
>>> print(sys.executable) # works this time
/usr/bin/python
>>> os.execve("/usr/bin/python", [], {}) # drops …
Run Code Online (Sandbox Code Playgroud)

python execve

6
推荐指数
1
解决办法
4214
查看次数

在程序集中使用参数调用 execve 的正确方法是什么?

我正在尝试执行以下操作execve/bin//nc -lnke /bin/bash -p 4444

在阅读 的手册页时execve,我看到以下要求:

int execve(const char *filename, char *const argv[],
                  char *const envp[]);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是将参数推到argv; 我不明白你如何推动一个数组(在汇编中)以使其正常工作。

我目前使用的程序集如下:

global _start

_start:
    xor eax, eax

    ; command
    push eax
    push 0x636e2f2f
    push 0x6e69622f
    mov ebx, esp

    ; args
    push eax
    push 0x34343434
    push 0x20702d20
    push 0x68736162
    push 0x2f6e6962
    push 0x2f20656b
    push 0x6e6c2d20
    mov ecx, esp

    ; null, arg 1
    push eax
    mov edx, esp

    ; push to stack
    push edx
    push ecx …
Run Code Online (Sandbox Code Playgroud)

linux assembly nasm execve shellcode

6
推荐指数
1
解决办法
3258
查看次数

重写一个小的 execve shellcode

浏览http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html

execve我理解了调用并试图重写它的nasm 程序。

一些背景信息:

int execve(const char *filename, char *const argv[], char *const envp[]);
Run Code Online (Sandbox Code Playgroud)

因此,eax = 11( 的函数调用号execve),ebx应该指向char* filenameecx应该指向argv[](这将与第一个参数相同,ebx因为第一个参数是其*filename本身,例如在本例中为“/bin/sh”),并且edx将指向envp[]null在本例中)。

原始nasm代码:

global _start

section .text
_start:

xor eax, eax
push eax

; PUSH //bin/sh in reverse i.e. hs/nib//

push 0x68732f6e
push 0x69622f2f

mov ebx, esp

push eax
mov edx, esp

push ebx
mov ecx, esp

mov al, …
Run Code Online (Sandbox Code Playgroud)

c++ assembly nasm execve shellcode

5
推荐指数
1
解决办法
2718
查看次数