CODESYS V3遠端堆溢位漏洞復現(環境配置+復現過程)

恰醋發表於2020-08-28

本文首發於我的個人部落格

這是我在實驗室學習滲透測試的第六個漏洞復現,耗費時間有些長,至今不知道哪裡出了問題,又是怎樣稀裡糊塗沒有的(也可能很早就成功了,但是我沒有注意到,一直糾結於網頁打不開的問題)。不管怎麼說,最後還是做出來了,以此文記錄。

漏洞介紹

2020年3月25日CODESYS釋出CODESYS V3未經身份驗證的遠端堆溢位漏洞,攻擊者利用精心設計的請求可能會導致基於堆的緩衝區溢位。該漏洞存在於CmpWebServerHandlerV3.dll(檔案版本3.5.15.20)庫中,源於該dll庫未能正確驗證由使用者提交的發往Web Server URL端點的資料。此漏洞會造成Web 伺服器崩潰、拒絕服務或者可能被用於遠端程式碼執行。

漏洞原理可參考本文

實驗環境

靶機:Windows 10 x64

攻擊機:Kali Linux

實驗過程

1. 安裝CODESYS V3.5

安裝地址:https://store.codesys.com/ftp_download/3S/CODESYS/300000/3.5.15.20/CODESYS%203.5.15.20.exe。因為有牆,會很慢,自己嘗試特殊方式吧,注意,一定要安裝32位的。該漏洞在3.5.15.40版本之前都存在。

2. 環境配置

新建一個工程,名字為test。


進入“此電腦-->管理-->服務和應用程式-->服務”,啟動圖中的服務。

在

雙擊左側欄中的Device配置閘道器。在主介面的“掃描網路”一欄中點選右側的計算機名後,回車,系統將自動掃描並啟用節點。

右鍵左側的Application,在“新增物件”一欄中找到“檢視管理器”,啟用WsuSymbols,然後開啟。



開啟後,可以對各引數進行配置。

繼續進行檢視新增(名字預設即可)。

點選右下角的“視覺化工具箱”,可以在此處選擇各種圖示、元件,進行各種引數的配置。這裡隨便選一個即可。

在主選單欄中選擇“編譯-->重新編譯”,對所有的程式碼進行編譯,沒有報錯即可。然後找到上面中間位置的“Application [Device: PLC邏輯]”,點選右側相鄰的按鍵(或者直接快捷鍵Alt+F8)。下載。然後到了這個介面。

點選“啟動”(快捷鍵F5)。執行成功後,就可以看到組態的介面了。

開啟命令列,輸入netstat -ano,可以看到TCP Port 8080埠已經成功開啟(為漏洞利用對應的業務埠)。

環境配置至此已結束,下面已經可以開始漏洞復現了。

3. 漏洞復現

開啟攻擊機(最開始我想在本機win10上試一下,但是一直打不開網頁,後來換了kali才可以),開啟192.168.227.133:8080/webvisu.htm(即靶機IP:8080/webvisu.htm),在我這裡無法正常訪問,但不影響後續過程。

然後,下載POC程式碼,放在合適的位置。

在執行程式碼前,先回到Windows端重啟CODESYS服務,使CmpWebServerHandlerV3元件處於狀態“0”,然後再執行POC指令碼。格式為:

python PocName.py 靶機IP 埠號(預設為8080)

執行後,返回200,然後會報錯,這是正常現象。若出現一堆A,說明攻擊失敗,需要檢視前序步驟有無錯誤。

回到靶機檢視服務,儘管“狀態”一列顯示為“正在執行”,但右鍵後發現服務已經關閉,說明攻擊成功。服務在重啟後可以正常訪問。

參考文章

[1] https://mp.weixin.qq.com/s/B3t7S3rud3ngkCWaygXt5w

[2] https://www.freebuf.com/company-information/234023.html

最後,再心疼一下我可憐的記憶體...等我有錢了一定要換!!!

相關文章