日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在滲透測試中,有些工具的運行(例如高版本的Powershell)需要依賴Microsoft .NET Framework 4.0的環境。 而默認配置下,Win7不支持Microsoft .NET Framework 4.0。為了保證工具能夠在Win7下使用,這里就需要在命令行下實現安裝Microsoft .NET Framework 4.0。

經過一番搜索,我沒有找到介紹命令行下安裝Microsoft .NET Framework的資料。

于是我寫了這篇文章,介紹我的實現方法,開源C代碼,分享實現原理和腳本開發的細節。

簡介

本文將要介紹以下內容:

· Win7下安裝Microsoft .NET Framework 4.0的正常方法

· 命令行下的實現方法

· 實現原理

· 腳本開發的細節

Win7下安裝Microsoft .NET Framework 4.0的正常方法

Microsoft .NET Framework的安裝包分為兩種:

(1)Web Installer

下載地址:

https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=17851

Web Installer的文件很小,在安裝過程中需要Internet連接來下載其他所需的.NET Framework組件

(2)Standalone Installer

下載地址:

https://www.microsoft.com/en-US/Download/confirmation.aspx?id=17718

Standalone Installer的文件相對來說會很大,因為它包括了完整的組件,在安裝過程中不需要Internet連接。

這里以Standalone Installer為例,正常的流程如下:

1.下載Standalone Installer

獲得文件dotNetFx40_Full_x86_x64.exe。

2.運行dotNetFx40_Full_x86_x64.exe

彈出對話框,選擇同意協議后點擊Install按鈕。

如下圖:

內網滲透基礎——命令行下安裝Microsoft .NET Framework

 

3.等待安裝過程

如下圖:

內網滲透基礎——命令行下安裝Microsoft .NET Framework

 

4.安裝完成,彈出對話框

如下圖:

內網滲透基礎——命令行下安裝Microsoft .NET Framework

 

點擊Finish按鈕進入下一步。

5.再次彈出對話框,提示選擇是否重啟系統

如下圖:

內網滲透基礎——命令行下安裝Microsoft .NET Framework

 

在系統重啟后,完成所有安裝工作。

命令行下的實現方法

這里介紹我最開始的思路:

1.我們可以通過向安裝程序的面板發送按鍵消息來模擬用戶的點擊行為

2.為保證在命令行下安裝,需要對彈出的對話框發送隱藏窗口的消息

3.為保證按鍵準確,這里不應該采用計算坐標的方法模擬鼠標點擊,而是枚舉窗口獲得按鈕的句柄,向目標句柄發送鼠標點擊的消息

為了驗證我的思路,首先需要編寫程序查看是否能夠獲得每個安裝頁面的按鈕句柄。

我寫了如下C代碼:

#include <afx.h> #include <windows.h> BOOL CALLBACK EnumChildWindowProc(HWND Child_hWnd, LPARAM lParam) { WCHAR szTitle[1024]; if (Child_hWnd) { GetWindowText(Child_hWnd, szTitle, sizeof(szTitle)); printf("[*] Handle: %08Xn", Child_hWnd); printf("[*] Caption: %wsn", szTitle); return true; } return false; } int _tmain(int argc, _TCHAR *argv[]) { HWND hWnd3 = FindWindow(NULL, L"Microsoft .NET Framework 4 Setup"); if (hWnd3 == NULL) { printf("[!] I can't find the main window.n"); return 0; } EnumChildWindows(hWnd3, EnumChildWindowProc, 0); return 0; }

對于第一個安裝頁面,使用程序來枚舉所有子窗口,輸出句柄和標題,如下圖:

內網滲透基礎——命令行下安裝Microsoft .NET Framework

 

這里需要注意Install按鈕,默認為disable狀態,如果想要進入下一步,需要先將Install按鈕設置為enable狀態,再發送鼠標點擊的消息。

在代碼實現上加上一個if判斷來實現,關鍵代碼如下:

if (wcscmp(szTitle, L"&Install") == 0) { printf("[+] Catch it!n"); printf("[*] Handle: %08Xn", Child_hWnd); printf("[*] Caption: %wsn", szTitle); printf("[*] Enable the Install button.n"); EnableWindow(Child_hWnd, TRUE); printf("[*] Send the click command to &Install.n"); ::PostMessage(Child_hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(0,0)); ::PostMessage(Child_hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(0, 0)); }

完成這一步后我們進入下一步,等待安裝結束后進入第二個頁面,同樣枚舉一下所有子窗口,如下圖:

內網滲透基礎——命令行下安裝Microsoft .NET Framework

 


內網滲透基礎——命令行下安裝Microsoft .NET Framework

 

我們看到,之前頁面的子窗口還在,我們需要向Finish按鈕發送鼠標點擊消息,關鍵代碼如下:

if (wcscmp(szTitle, L"&Finish") == 0) { printf("[+] Catch it!n"); printf("[*] Handle: %08Xn", Child_hWnd); printf("[*] Caption: %wsn", szTitle); printf("[*] Send the click command to &Finish.n"); ::PostMessage(Child_hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(0, 0)); ::PostMessage(Child_hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(0, 0)); }

接下來進入最后一步,再一次枚舉所有子窗口,如下圖:

內網滲透基礎——命令行下安裝Microsoft .NET Framework

 

我們看到,頁面的子窗口被刷新,在程序實現上這里需要重新獲得主窗口的句柄,我們向Restart Later按鈕發送鼠標點擊消息,關鍵代碼如下:

if (wcscmp(szTitle, L"Restart &Later") == 0) { printf("[+] Catch it!n"); printf("[*] Handle: %08Xn", Child_hWnd); printf("[*] Caption: %wsn", szTitle); printf("[*] Send the click command to Restart &Later.n"); ::PostMessage(Child_hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(0, 0)); ::PostMessage(Child_hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(0, 0)); }

至此,關鍵的實現代碼已經完成。

而要完整的實現在命令行下安裝Microsoft .NET Framework,還需要考慮以下問題;

1.當啟動安裝程序dotNetFx40_Full_x86_x64.exe前,需要檢查安裝環境,如果已經存在另一個安裝進程,那么會彈框提示沖突

如下圖:

內網滲透基礎——命令行下安裝Microsoft .NET Framework

 

這里需要在啟動前做一個判斷:如果存在另一個安裝進程,就結束安裝操作。

2.當啟動安裝程序dotNetFx40_Full_x86_x64.exe時,會啟動子進程Setup.exe,這里沒法做到通過設置啟動參數隱藏啟動進程Setup.exe來隱藏窗口

這里需要加一個循環判斷,只要發現主窗口就對其隱藏。

為了避免CPU占用過多,在做while循環時,應該加一個Sleep函數。

3.啟動安裝程序后需要模擬鼠標點擊

需要注意的是,接下來的安裝過程中,子窗口Install(名稱為&Install)會一直存在,為了避免重復向Install按鈕發送點擊消息,在實現上我使用了第二個函數來匹配其他按鈕。

4.安裝完成后,彈出新的窗口提示安裝成功,捕獲子窗口,向其發送鼠標按鍵的命令

這里捕獲的子窗口名稱為&Finish。

5.接下來,彈框提示是否重新啟動系統時,需要通過FindWindow()重新獲得句柄

這里可以放在第二個函數的同一個循環中,當發現子窗口Restart &Later時,向其發送鼠標按鍵的命令。

需要注意彈出的窗口為新窗口,不能使用之前的窗口句柄,需要通過FindWindow()重新獲得句柄。

完整實現代碼已開源,地址如下:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/Install_.Net_Framework_from_the_command_line.cpp

代碼支持命令行下安裝Microsoft .NET Framework 4、Microsoft .NET Framework 4.5和Microsoft .NET Framework 4.5.1

小結

本文介紹了通過發送鼠標消息在命令行下安裝Microsoft .NET Framework的方法,開源C代碼,分享實現原理和腳本開發的細節。

原文鏈接:https://www.4hou.com/posts/pXgX

分享到:
標簽:內網 滲透
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定