我正在学习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下运行,因为我调用了该进程?我知道这不是我最初提出的问题,但是如果有人能够至少指出我可以获得的任何好资源。
答案 0 :(得分:1)
该文件是在setuid进程的用户/组ID下运行还是在我
下运行
有趣的是,在这种特定情况下,它会像你一样运行。
这是因为shebang是#!/bin/bash
而bash
有一个安全功能,它会在启动时丢弃suid(基于UID!= EUID)。
如果您使用#!/bin/dash
或任何其他可执行文件运行它,它将作为suid用户运行。