因此,我正在通过Ubuntu虚拟机中的安全实验室工作,并且遇到了问题。这些说明有时可能有点模糊或不清楚。截至目前,我编写了一个运行ls的小型C程序。Bash和根权限问题
#include <stdio.h>
int main()
{
system("lsBAK -la");
return 0;
}
然后,我在名称lsBAK下创建了/ bin/ls的备份并删除了原始文件。我用ls的名字链接了我编译的程序,所以当我输入ls时,这个程序会运行。它最终允许我在文件夹上运行ls,因为它具有root访问权限,所以我不应该有权运行它。最终促使我这样做的问题写成如下:“你可以让这个Set-UID程序(由root拥有)运行你的代码而不是/ bin/ls吗?如果可以的话,你的代码是否以root权限运行?描述并解释你的观察。“
这样很好。现在我应该用bin/sh或/ bin/bash来做同样的事情。
的说明逐字地说:“现在,改变/ bin/sh的,使其指向回来为/ bin/bash中,并重复上述攻击”
我已经尝试了很多的变化对相同的程序。我似乎没有得到的是如何运行bash。如果我在终端输入sh,我立即进入该外壳。如果我输入bash,即使sh是指向bash的链接,也不会有任何反应。它似乎可能实际上是打开一个shell,但它看起来完全一样,而当我运行sh时,我得到一个明显不同的shell来玩,显示sh-4.3#而不是通常的root @ ....有可能sh运行给我一个与运行bash不同的结果,当sh只是一个bash的链接?我错过了什么?
我的意思是,当我重新SH,我只需运行:LN -s庆典SH
我已经试过之类的东西./bash,庆典等什么我现在有一个是大部分相同程序在那里我做下面的系统调用:
system("bash");
我删除SH并创建了一个链接到我的新节目,shUID,名称SH下。所以,我想应该发生的是,当我运行sh时,它运行我的程序shUID,它执行系统调用。每当我运行sh时,终端都会锁定,直到我点击ctrl + C。
因此,我显然在寻找我在这里失踪的任何东西。我假设我做了以前的问题,涉及ls,但我似乎无法弄清楚这里发生了什么。帮助表示赞赏。编辑:我现在已经在实验室中移动了,并且发现system()实际上调用了/ bin/sh,所以我的问题在这里似乎是,如果我要替换它并依靠系统调用,这里有一个问题。我目前不确定如何处理这些信息,但它给了我一些指导。我仍然很感激帮助,但我很快就会与这个新的信息一起玩。
如果您正在运行'bash',然后运行'bash'再次,它*看起来是相同的,因为两个实例使用相同的初始化来配置,例如提示。运行'echo $$',然后运行'bash',再次运行'echo $$':你应该看到不同的输出,因为'bash'的前一个和当前实例是独立的进程。 – chepner