loo*_*bee 53 filesystems bash cat root-filesystem system-recovery
root@system:~# less myfile
-bash: /bin/less: Input/output error
Run Code Online (Sandbox Code Playgroud)
根文件系统已死。但我的猫还活着(在我的记忆中):
root@system:~# cat > /tmp/somefile
C^d
root@system:~#
Run Code Online (Sandbox Code Playgroud)
虽然他有点孤独,但他所有的朋友都走了:
root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error
Run Code Online (Sandbox Code Playgroud)
该系统仍在运行,并实现其目的。我知道,我知道,对此唯一明智的反应是关闭系统并更换根驱动器。不幸的是,这不是一个选择,因为它会花费大量的时间和金钱。此外,它会杀死我的猫,这会让我感到难过。
我想从捐赠者那里带他平时的朋友。我不敢尝试 scp 它们,以防 ssh 尝试加载它并切断线路(无论如何二进制文件已经消失了)。这听起来像是我猫表弟的工作:
root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found
Run Code Online (Sandbox Code Playgroud)
可惜他早已不在了。
现在,我可以尝试欺骗我的猫执行一个仪式来复活他:
cat > netcat < /dev/tcp/localhost/9999
Run Code Online (Sandbox Code Playgroud)
那种工作。他几乎还活着:
root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied
Run Code Online (Sandbox Code Playgroud)
他只需要一点点生命的火花。那个+x
我现在无法背诵的小魔法咒语。
你能帮我把我猫的朋友带回来吗?
Mic*_*mer 36
有几种可能性,所有这些都取决于您现在情况的确切参数。我将在以下适用的示例中假设 Linux,但在大多数情况下,其他平台上也存在类似的功能。
您也许可以让动态加载程序为您运行可执行文件。假设cat
是动态链接的,您平台的等价物/lib/ld-linux.so.2
也可能在内存中,因此可用于运行二进制文件:
$ /lib64/ld-linux-x86-64.so.2 ./chmod
chmod: missing operand
Run Code Online (Sandbox Code Playgroud)
您可能有多个(可能是 32 位和 64 位),并且可能有多个可用副本或需要解析的符号链接。其中之一可能有效。
如果您有一个挂载的 vfat 或 NTFS 文件系统,或者其他将所有文件视为 777 的文件系统,您可以在那里创建您的可执行文件。
$ cat > /mnt/windows/chmod < /dev/tcp/localhost/9999
Run Code Online (Sandbox Code Playgroud)如果有一个您不关心其内容的挂载分区,在仍然大部分工作的驱动器上,您可以用包含您想要的可执行文件的相同文件系统类型的新映像替换内容 -cat
在人们通常使用的角色dd
,您可以通过网络提供图像。
$ cat > /dev/sdb1 < ...
Run Code Online (Sandbox Code Playgroud)
这个是合理的,但有很多地方不能工作,这取决于该分区的内存中到底有什么。
如果有任何有任何可写文件系统执行权限访问的文件,你可以cat >
把它与您所选择的二进制的内容替换。
$ cat > ~/test.py < ...
Run Code Online (Sandbox Code Playgroud)ctypes.sh
,它为 Bash 提供了一个外部函数接口,然后dlcall chmod ./netcat 511
.您可以引入foo.so
您构建的动态库文件,然后cat
通过 代表您加载它LD_PRELOAD
,从而允许您执行任意代码。
$ LD_PRELOAD=./hack.so cat /dev/null
Run Code Online (Sandbox Code Playgroud)
例如,如果您拦截open
:
$ /lib64/ld-linux-x86-64.so.2 ./chmod
chmod: missing operand
Run Code Online (Sandbox Code Playgroud)
然后你可以在那里做任何你需要做的事情。
我的建议是引入一个静态链接的busybox
可执行文件作为第一项(或者实际上是唯一的项),这样您就可以获得所有可用的命令,而无需重用任何让您筋疲力尽的技巧。