如何获得贝壳?

信息安全 攻击 linux 操作系统 开发
2021-08-14 20:59:49

我正在做一个练习 (exploit-exercises.com),它要求我访问以另一个用户身份运行的 shell。

我的问题是:我可以创建保证由其他用户运行的应用程序。我如何使用它在他们的权限/帐户下获得 shell 访问权限?

仅仅能够像它们一样运行命令对我来说用处不大,而实际上能够它们一样放入 shell 对我来说更有用,因为有一个应用程序可以验证我是否成功地正确破坏了帐户,所以我'想以交互方式运行它。

我想到的第一件事是生成一个 netcat 守护程序并通过它运行我的命令,但是这个受感染的 VM 上似乎不存在 -e 选项。

想法/想法?我在这里绞尽脑汁已经有一段时间了——我知道这很简单!

编辑:我不是在为我坚持的练习寻找答案/剧透,但我觉得我对系统安全的基本理解存在差距。我想如果我不知道如何利用这个漏洞,我会丢失一些信息。我想要的是基本信息,而不是我所面临的实际问题的答案。

3个回答

如果您可以创建一个以受害者用户身份运行的进程,那么您已经在他们的权限下拥有 shell 访问权限。受害者能做的任何事情,你的程序都能做。所以你已经赢了,只是你还没有意识到!

(一个简单的例子:你为什么需要一个shell?如果你想对受害者的特权做点什么,为什么不把你想做的动作硬编码到你的程序中呢?)

如果你真的想设置一个交互式 shell,那也是可行的。我可以告诉你几种方法,但你说你不想剧透,所以让我试着给你一些提示,而不是直截了当地回答。

  1. 您提到运行 netcat 将是实现目标的一种方法,但是安装在他们系统上的 netcat 版本已过时。如果 Alice 想安装一个程序供她自己使用,她可以吗?如果您可以访问 Alice 的帐户并且可以做 Alice 可以做的任何事情,这会给您任何想法吗?

  2. netcat 是如何在内部实现的?它是如何工作的?你能自己做这样的事情吗?

  3. 假设您入侵了 Alice 的帐户。Alice 可以通过哪些方式登录她的帐户?当然,她可以使用她的登录密码登录,但还有什么?

  4. 如果 Alice 愿意,有什么办法可以让她的一位朋友能够登录她的帐户?她有什么方法可以做到这一点?如果您有能力做 Alice 可以做的任何事情,这是否会给您一些想法,让您可以做些什么来访问她的帐户?

  5. 如果您ls -a从某个用户的主目录运行,您会看到什么?那些疯狂的文件有什么用?这给你任何想法吗?

希望这足以让你思考!

以用户身份获取 shell 的一种方法是找到以该用户身份运行的setuid 可执行文件理想情况下,这个可执行文件是一个 shell,例如 /bin/bash,在这种情况下,您将被放到一个以该用户身份运行的 shell 中。如果不是这种情况,您总是可以在运行时使用缓冲区溢出破坏可执行文件的内存。拥有一个全局可写的 setuid 可执行文件永远不会发生在真实文件中,但这是一些不切实际的战争游戏,所以你永远不会知道。

另一种选择是写入/home/USER/.bashrc文件,该文件可以是全局可写的,或者如果您可以以该用户身份执行命令,则可以对其进行修改。该脚本将由该用户每次登录时执行。如果此用户是 sudo'er,那么您可以修改 .bashrc 文件以控制$PATH环境变量并诱使用户执行虚假的 sudo 代理可执行文件以获得root权限。

我见过的最简单的方法是构建一个简单的可执行文件,它在网络端口上侦听,并在 connect 上分叉副本/bin/bash,将网络套接字分配为 shell 的 stdin/stdout 进出(参见man dup2)。然后,当您连接时,您会看到一个 bash shell。总共大约有 10 到 20 行代码。

这是 netcat 选项背后的基本功能-e,通常在编译时禁用,因此它不能[那么容易]用于帮助安全漏洞。

不过,根据我的经验,大多数黑客更喜欢用 perl 创建自己的自定义“shell”,它具有专门的命令集、身份验证和大量糟糕的英语。此外,连接到私有 IRC 服务器并以这种方式监听命令非常流行,原因我认为我不必解释。