阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux服务器“rm -rf”之后

99次阅读
没有评论

共计 6351 个字符,预计需要花费 16 分钟才能阅读完成。

Linux 服务器“rm -rf”之后

自娱自乐,我决定启动一台 Linux 服务器,然后以 root 用户执行“rm –rf /”命令,然后观察下哪些文件或者指令会幸存下来。结果是什么也没少!因此你必须增加 —no-preserce-root 再试一遍:

  1. # rm -rf –no-preserve-root /

当你按下“Enter”时,一些重要的工具,比如

  • /bin/ls
  • /bin/cat
  • /bin/chmod
  • /usr/bin/file

将会应声消失!但是你当前的 SSH 连接以及 bash 终端都还在,这表明所有 bash 相关的内建指令都没有受影响,比如 echo。

成为 Bash 达人

  1. root@rmrf:/# ls
  2. bash:/bin/ls:No such file or directory

执行以上命令,发现已没有 ls 可用,但是 echo 和 fileglobs 还在。利用这些“幸存者”们,我们可以做点什么呢?

  1. root@rmrf:/# echo *
  2. dev proc run sys
  3. # echo /dev/pts/*
  4. /dev/pts/0/dev/pts/3/dev/pts/ptmx

注意!/dev,/proc,/run,/sys 还在,我们一定要保存好它们。如果有了 ls 指令,那么对目录下内容的读取操作将会更加简单。

  1. root@rmrf:/# for file in /dev/pts/*; do echo $file; done
  2. /dev/pts/0
  3. /dev/pts/3
  4. /dev/pts/ptmx

许多 Reddit 用户指出,printf 仍是可用的。CAMH- 说:printf 会将参数依次格式化到输出字符串中去。

  1. root@rmrf:/# ls() { printf ‘%s\n’ ${1:+${1%/}/}*;}

既然在 bash 下可以定义函数,那么我们可以自建一个 ls 工具,虽然功能还不是很完善。

  1. root@rmrf:/# ls() { printf ‘%s\n’ ${1:+${1%/}/}*;}
  2. bash: syntax error near unexpected token `(‘

不对啊,这种操作应该完全合法才对,难道 ls 已经被映射,或者它是其他命令的别名?

  1. root@rmrf:/# type ls
  2. ls is aliased to `ls –color=auto’

原来如此,我们上面的指令被扩展成了 ls–color=auto () { printf ‘%s\n’ ${1:+${1%/}/}*; }。那么,我们可以先使用 unalias 指令,去掉 ls 与 ls—color 的关联。

  1. root@rmrf:/# unalias ls
  2. root@rmrf:/# ls() { printf ‘%s\n’ ${1:+${1%/}/}*;}
  3. root@rmrf:/# ls
  4. /dev
  5. /proc
  6. /run
  7. /sys
  8. root@rmrf:/# ls /dev
  9. /dev/pts

把函数存储到 utils.sh 文件

  1. root@rmrf:/# echo ‘ls() { printf ‘%s\n’ ${1:+${1%/}/}*;}‘ >> utils.sh
  2. root@rmrf:/# source utils.sh

cat 命令怎么样实现呢?借助 read!read 是幸存者之一,使用 read 结合管道和重定向,一个基本的 cat 就基本成型了!

  1. root@rmrf:/#(while read line;do echo “$line”;done)< utils.sh
  2. ls(){ printf ‘%s\n’ ${1:+${1%/}/}*;}

结合上述通过“幸存者”逐渐恢复一些指令的方法,以及 echo 可以写入任意多字节的特性,我们可以重新构建出 linux 的工具系统,并可以通过 curl 或者 wget 直接获得我们想要的二进制文件。首先,参照 echoed by others,获取 busybox。Busybox 是嵌入式 Linux 的瑞士军刀,内嵌 wget,dd,tar 等许多工具。Eusebeîa 详细介绍了如何获得一个 busybox 的 escaped 版本,我在这里就不多做赘述了。

Ubuntu 13.04 安装 LAMP\Vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

CentOS 5.9 下编译安装 LAMP(Apache 2.2.44+MySQL 5.6.10+PHP 5.4.12) http://www.linuxidc.com/Linux/2013-03/80333p3.htm

RedHat 5.4 下 Web 服务器架构之源码构建 LAMP 环境及应用 PHPWind http://www.linuxidc.com/Linux/2012-10/72484p2.htm

LAMP 源码环境搭建 WEB 服务器 Linux+Apache+MySQL+PHP http://www.linuxidc.com/Linux/2013-05/84882.htm

但是,还有一个问题。

即使我们 echo 了整个二进制文件需要的所有字节,这些二进制文件仍无法执行。没法启动 busybox!针对这个问题,早期的解决方法是找到一些可执行的程序,然后用 echo 覆盖它们。我们对 /usr 和 /bin 下的文件进行了诸如此类的改造,但这确实稍显复杂。

可以利用 shell 通配符和 bash 筛选出带有可执行位组的文件,记住要把目录排除在外。

  1. executable (){if[[(!d $1 )&&x $1 ]];then echo “$1”;fi}

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-06/103239p2.htm

找到了可执行文件!

  1. root@rmrf:/# for file in /*;do executable $file;done
  2. root@rmrf:/# for file in /*/*; do executable $file; done
  3. root@rmrf:/# for file in /*/*/*; do executable $file; done
  4. /proc/1107/exe
  5. /proc/1136/exe
  6. /proc/1149/exe
  7. /proc/1179/exe
  8. /proc/1215/exe
  9. /proc/1217/exe
  10. /proc/1220/exe
  11. /proc/1221/exe
  12. /proc/1223/exe
  13. /proc/1248/exe
  14. /proc/1277/exe
  15. /proc/1468/exe
  16. /proc/1478/exe
  17. /proc/1625/exe
  18. /proc/1644/exe
  19. /proc/1/exe
  20. /proc/374/exe
  21. /proc/378/exe
  22. /proc/471/exe
  23. /proc/616/exe
  24. /proc/657/exe
  25. /proc/self/exe

太好了!但是别急,这些只是软链接到可执行文件的链接文件,原文件在磁盘上已经不存在了。那么现在我们要重新改写 executable(),排除这些软链接。

  1. root@rmrf:/# executable (){if[[(!d $1 )&&(!h $1 )&&x $1 ]];then echo “$1”;fi}
  2. root@rmrf:/# for file in /*/*/*; do executable $file; done
  3. root@rmrf:/# for file in /*/*/*/*; do executable $file; done
  4. root@rmrf:/# for file in /*/*/*/*/*;do executable $file;done
  5. root@rmrf:/# for file in /*/*/*/*/*/*; do executable $file; done

噩耗,什么输出也没有。或许可以利用内核层面的东西,毕竟,我们可以使用 Magic Sysrq 组合键重启 busybox。

  1. root@rmrf:/# echo 1 > /proc/sys/kernel/sysrq
  2. root@rmrf:/# echo “b” > /proc/sysrqtrigger

UPDATE: Reddi 用户 throw_away5046 提出了一种解决方法:a full solution to this。

获取一个可信任的、适用于本机架构的 box

  1. $ mkdir $(xxd p l 16/dev/urandom)
  2. $ cd $_
  3. $ aptget download busyboxstatic
  4. $ dpkg x *.deb .
  5. $ alias encode=‘{tr -d \\n | sed “s#\\(..\\)#\\\\x\\1#g”; echo; }’
  6. $ alias upload=‘{xxd -p | encode | nc -q0 -lp 5050;}’
  7. $ upload < bin/busybox

执行 rm –rf 之后的机器

  1. # cd /
  2. # alias decode=’while read -ru9 line; do printf “$line”; done’
  3. # alias download='(exec 9<>/dev/tcp/{IP OF NON HOSED BOX}/5050; decode )’
  4. # download > busybox

创建一个可以改变 busybox 访问权限的对象

  1. $ cat > setx.c <<EOF
  2. externint chmod(constchar*pathname,unsignedint mode);
  3. int entry(void){
  4. return!! chmod(“busybox”,0700);
  5. }
  6. char*desc[]={0};
  7. struct quick_hack {
  8. char*name;int(*fn)(void);int on;
  9. char**long_doc,*short_doc,*other;
  10. } setx_struct ={“setx”, entry,1, desc,“chmod 0700 busybox”,0};
  11. EOF
  12. $ gcc WallWextrapedantic nostdlib Osfpic shared setx.c o setx
  13. $ upload < setx

以内建工具的方式使能 setx,使 busybox 可执行

  1. # (download > setx; enable -f ./setx setx; setx;)
  2. # /busybox mkdir .bin
  3. # /busybox –install -s .bin
  4. # PATH=/.bin

操作如下:

Linux 服务器“rm -rf”之后

Linux 服务器“rm -rf”之后

自娱自乐,我决定启动一台 Linux 服务器,然后以 root 用户执行“rm –rf /”命令,然后观察下哪些文件或者指令会幸存下来。结果是什么也没少!因此你必须增加 —no-preserce-root 再试一遍:

  1. # rm -rf –no-preserve-root /

当你按下“Enter”时,一些重要的工具,比如

  • /bin/ls
  • /bin/cat
  • /bin/chmod
  • /usr/bin/file

将会应声消失!但是你当前的 SSH 连接以及 bash 终端都还在,这表明所有 bash 相关的内建指令都没有受影响,比如 echo。

成为 Bash 达人

  1. root@rmrf:/# ls
  2. bash:/bin/ls:No such file or directory

执行以上命令,发现已没有 ls 可用,但是 echo 和 fileglobs 还在。利用这些“幸存者”们,我们可以做点什么呢?

  1. root@rmrf:/# echo *
  2. dev proc run sys
  3. # echo /dev/pts/*
  4. /dev/pts/0/dev/pts/3/dev/pts/ptmx

注意!/dev,/proc,/run,/sys 还在,我们一定要保存好它们。如果有了 ls 指令,那么对目录下内容的读取操作将会更加简单。

  1. root@rmrf:/# for file in /dev/pts/*; do echo $file; done
  2. /dev/pts/0
  3. /dev/pts/3
  4. /dev/pts/ptmx

许多 Reddit 用户指出,printf 仍是可用的。CAMH- 说:printf 会将参数依次格式化到输出字符串中去。

  1. root@rmrf:/# ls() { printf ‘%s\n’ ${1:+${1%/}/}*;}

既然在 bash 下可以定义函数,那么我们可以自建一个 ls 工具,虽然功能还不是很完善。

  1. root@rmrf:/# ls() { printf ‘%s\n’ ${1:+${1%/}/}*;}
  2. bash: syntax error near unexpected token `(‘

不对啊,这种操作应该完全合法才对,难道 ls 已经被映射,或者它是其他命令的别名?

  1. root@rmrf:/# type ls
  2. ls is aliased to `ls –color=auto’

原来如此,我们上面的指令被扩展成了 ls–color=auto () { printf ‘%s\n’ ${1:+${1%/}/}*; }。那么,我们可以先使用 unalias 指令,去掉 ls 与 ls—color 的关联。

  1. root@rmrf:/# unalias ls
  2. root@rmrf:/# ls() { printf ‘%s\n’ ${1:+${1%/}/}*;}
  3. root@rmrf:/# ls
  4. /dev
  5. /proc
  6. /run
  7. /sys
  8. root@rmrf:/# ls /dev
  9. /dev/pts

把函数存储到 utils.sh 文件

  1. root@rmrf:/# echo ‘ls() { printf ‘%s\n’ ${1:+${1%/}/}*;}‘ >> utils.sh
  2. root@rmrf:/# source utils.sh

cat 命令怎么样实现呢?借助 read!read 是幸存者之一,使用 read 结合管道和重定向,一个基本的 cat 就基本成型了!

  1. root@rmrf:/#(while read line;do echo “$line”;done)< utils.sh
  2. ls(){ printf ‘%s\n’ ${1:+${1%/}/}*;}

结合上述通过“幸存者”逐渐恢复一些指令的方法,以及 echo 可以写入任意多字节的特性,我们可以重新构建出 linux 的工具系统,并可以通过 curl 或者 wget 直接获得我们想要的二进制文件。首先,参照 echoed by others,获取 busybox。Busybox 是嵌入式 Linux 的瑞士军刀,内嵌 wget,dd,tar 等许多工具。Eusebeîa 详细介绍了如何获得一个 busybox 的 escaped 版本,我在这里就不多做赘述了。

Ubuntu 13.04 安装 LAMP\Vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

CentOS 5.9 下编译安装 LAMP(Apache 2.2.44+MySQL 5.6.10+PHP 5.4.12) http://www.linuxidc.com/Linux/2013-03/80333p3.htm

RedHat 5.4 下 Web 服务器架构之源码构建 LAMP 环境及应用 PHPWind http://www.linuxidc.com/Linux/2012-10/72484p2.htm

LAMP 源码环境搭建 WEB 服务器 Linux+Apache+MySQL+PHP http://www.linuxidc.com/Linux/2013-05/84882.htm

但是,还有一个问题。

即使我们 echo 了整个二进制文件需要的所有字节,这些二进制文件仍无法执行。没法启动 busybox!针对这个问题,早期的解决方法是找到一些可执行的程序,然后用 echo 覆盖它们。我们对 /usr 和 /bin 下的文件进行了诸如此类的改造,但这确实稍显复杂。

可以利用 shell 通配符和 bash 筛选出带有可执行位组的文件,记住要把目录排除在外。

  1. executable (){if[[(!d $1 )&&x $1 ]];then echo “$1”;fi}

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-06/103239p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计6351字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中