更改Linux命令

时间:2017-10-10 16:42:19

标签: linux

我正在学习UNIX安全性,特别是如何通过创建system()调用的命令的自定义版本来利用调用system()命令的setuid C程序。恶意而不是预期的东西。我已经为cat命令创建了一个Linux脚本,但我不确定在哪里放置它以及如何通过其文件名而不是./cat

来调用它

我想我需要将目录添加到$PATH,但是当我尝试将其添加到fork: Resource temporarily unavailable时。

**更新**

所以在我的机器上只是为了测试我编写的C程序

#include <stdlib.h>
#include <stdio.h>

int main() {
  system("ls");
}

我写了一个新的ls命令

#!/bin/bash

echo "Ran ls command"

并使其可执行。然后我跑了export PATH="/path/to/command/:$PATH"

所以我发现最初的问题是我的自定义ls命令调用了导致fork问题的真正ls(我认为),但现在我想知道我何时在另一台机器上运行它。

如果易受攻击的setuid进程

#include <stdio.h>
#include <stdlib.h>

int main() {
  system("cat /some/file");
}

我想写一个自定义cat命令

#!/bin/bash

/path/to/file/

该文件是否会在setuid进程的用户/组ID下运行,因为我调用了该进程?我知道这不是我最初提出的问题,但是如果有人能够至少指出我可以获得的任何好资源。

1 个答案:

答案 0 :(得分:1)

  

该文件是在setuid进程的用户/组ID下运行还是在我

下运行

有趣的是,在这种特定情况下,它会像你一样运行。

这是因为shebang是#!/bin/bashbash有一个安全功能,它会在启动时丢弃suid(基于UID!= EUID)。

如果您使用#!/bin/dash或任何其他可执行文件运行它,它将作为suid用户运行。