導語:本文介紹了如何在受限制的shell中執行任意命令,實現交互。其相應的利用場景是說當我們通過一些手段拿到當前Linux機器的shell時,由於當前shell的限制,很多命令不能執行,導致后續的滲透無法進行,在這篇文章中,就介紹了一些常見的繞過方法,同時在文章末尾提供了一個線上的練習環境。
0x01 前言
今早在刷twitter的時候看到了一篇文章(
https://www.exploit-db.com/docs/english/44592-linux-restricted-shell-bypass-guide.pdf?rss),介紹了如何在受限制的shell中執行任意命令,實現交互。其相應的利用場景是說當我們通過一些手段拿到當前Linux機器的shell時,由於當前shell的限制,很多命令不能執行,導致后續的滲透無法進行,在這篇文章中,就介紹了一些常見的繞過方法,同時在文章末尾提供了一個線上的練習環境。
我就該文章提到的相應技術細節進行復現,同時附帶上一些自己的思考,於是便有了本文。如有謬誤,還望各位師傅斧正
0x02 技術背景及簡介
在文章開始,首先來介紹一下什么是受限制的shell。簡單理解,受限制的shell是說限制了一個shell的部分命令,像cd、ls、echo,或者是限制了一些環境變量,諸如SHELL、PATH、USER。有些情況下,受限制的shell也會限制包含/的命令,或者限制一些輸出符,像>、>>等。常見的受限制shell有:rbash、rksh、rsh。
不過話又說回來了,為什么有的人會創建這種受限制的shell呢?什么樣的業務場景需要這種受限制的shell。
通常來講,構建一個受限制的shell通常處於以下目的:
1、提高操作系統的安全性
2、阻止攻擊者,防止其進行后續的滲透
3、有時,系統管理員也會創建受限制的shell防止自己輸入一些危險命令,影響業務
4、制作CTF題目(Root-me、hackthebox、vulnhub)
0x03 枚舉Linux環境
枚舉是找到突破方法的重要組成部分。我們需要枚舉Linux環境來檢測為了繞過rbash我們可以做哪些事。
在正式進行繞過測試之前,我們需要進行以下操作:
1、首先,我們必須檢查可用命令,像cd、ls、echo等
2、接下來我們要檢查常見的操作符,像>、>>、<、|
3、然后對可用的編程語言進行檢查,如perl、ruby、python等
4、通過sudo -l命令檢查我們可以使用root權限運行哪些命令
5、使用SUID perm檢查文件或命令。
6、使用echo $SHELL命令檢查當前使用的是什么shell(90%得到的結果是rbash)
7、使用env或者printenv命令檢查環境變量
通過以上操作,我們已收集到一些游泳的信息,接下來嘗試一下通用的利用方法。
0x04 通用利用技巧
1、如果"/"命令可用的話,運行/bin/sh或者/bin/bash
2、運行cp命令,將/bin/sh或者/bin/bash復制到當前目錄
3、在ftp中運行!/bin/sh或者!/bin/bash,如下圖所示
4、在gdb中運行!/bin/sh或者!/bin/bash
5、在more、man、less中運行!/bin/sh或者!/bin/bash
6、在vim中運行!/bin/sh或者!/bin/bash
7、在rvim中執行:python import os; os.system("/bin/bash )
8、scp -S /path/yourscript x y:
9、awk 'BEGIN {system("/bin/sh or /bin/bash")}'
10、find / -name test -exec /bin/sh or /bin/bash \;
其中第6、7、8幾種方法暫未在本地復現。