有人可以用 gcc-mips 为我编译一个程序吗?

逆向工程 编译器 米普
2021-06-18 01:08:07

我即将在运行busybox的DVR设备上获得root权限。我找到了用户登录名/密码之一,并且能够通过 telnet 登录,但仅此而已。我有一个连接的驱动器,它会自动安装,我可以将它插入我的 PC 以添加/减去文件。我复制了 bash 和 busybox 二进制文件(包括其他一些),并给了它们u+s,希望 setuid root 会给我一些 root 权限。不幸的是,这不起作用。运行bash( -rwsr-xr-x),id仍然只显示为用户。出于某种原因,它似乎不尊重 bash 或 busybox(或其他一些)的 setuid 位给我 root 权限。

所以,我有了一个想法,这让我想到了我的问题:也许我可以编译一个小的 C 程序,例如:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
   setuid( 0 );
   system( "/tmp/rootscript.sh" );

   return 0;
}

这也许可以让我以 root 身份运行脚本。不幸的是,在尝试gcc-mips在各种系统上编译各种版本的几天后,我一直无法这样做。这让我问,如果有人已经构建了这些工具,是否会介意为我编译上面的代码。我意识到这是一个奇怪的要求,但我想是这样的。

一些可能有用的信息:

bash-3.00$ cat cpuinfo 
system type             : Viper
processor               : 0
cpu model               : MIPS 74Kc V4.12  FPU V0.0
BogoMIPS                : 324.40
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 32
extra interrupt vector  : yes
hardware watchpoint     : yes, count: 4, address/irw mask: [0x0000, 0x0000, 0x0000, 0x0000]
ASEs implemented        : mips16 dsp
shadow register sets    : 2
core                    : 0
VCED exceptions         : not available
VCEI exceptions         : not available

file /tmp/bash 
/tmp/bash: setuid ELF 32-bit LSB  executable, MIPS, MIPS32 rel2 version 1, dynamically linked (uses shared libs), for GNU/Linux 2.6.12, not stripped

任何人的任何想法或建议?希望这足以作为“逆向工程”帖子!

2个回答

恐怕你的帖子不会算作逆向工程:-(

无论如何,不​​要指望这会奏效;除非 uid 首先是 0,否则您的 setuid(0) 将无法工作,在这种情况下,您无需额外的 setuid() 即可获得 root 访问权限。

检查驱动器上的安装选项 - 是否设置了 nosuid 选项?

你能改变那个设置吗(提示:mount -o remount)?

您确实使用 ext[234] 文件系统格式化了驱动器,不是吗?如果是 [V]fat fs,则不支持 unix 属性。

究竟id说了什么?有关于euid的吗?

# cp /usr/bin/id /usr/bin/suid
# chmod u+s /usr/bin/suid
# ls -l /usr/bin/suid
-rwsr-xr-x 1 root root 25152 Jul 16 08:42 /usr/bin/suid

$ /usr/bin/id
uid=1000(gbl) gid=100(users) groups=100(users)
$ /usr/bin/suid
uid=1000(gbl) gid=100(users) euid=0(root) groups=100(users)

你看,id 的特殊 suid 版本设置了你的有效 uid,而不是真正的 uid;但如果它们不同,id 应该报告它。如果不是,则问题可能出在您的安装选项上;如果确实如此,那么您的 C 程序很可能实际上可以工作,但在这种情况下,它甚至不应该是必需的。

如果您想要一个创建 mips 二进制文件的编译器,您可能还会发现Mips-Toolchains页面很有帮助。

谢谢你们的想法。这是我想出来的,以防将来有人需要这个。我最终没有编译我自己的程序(如上所述),但我接近了。我下载了一个大型虚拟机文件,该文件已经编译了工具(但我的程序调用 setuid 时出错)。所以我走了另一条路:我从中获取预编译的 mipshttps://packages.debian.org/sid/super二进制文件setuid并将二进制文件复制到带有 u+s 设置的盒子上,root 作为所有者。

$ id
uid=1001(ftpuser) gid=1001(ftpuser) groups=1001(ftpuser)
$ ./setuid 0 id
uid=0(root) gid=1001(ftpuser) groups=1001(ftpuser)
$ ./setuid 0 bash
bash-3.00# id
uid=0(root) gid=1001(ftpuser) groups=1001(ftpuser)

正如他们在电视上所说的那样......宾果,邦戈,邦戈。