关于操作PPL进程引发的一些问题

news/2024/10/29 7:24:00/

背景

之前发布过一篇关于procexp的利用,但是最近有brother说,最新的版本不能利用了,然后就去下载了最新版本的。

 发现判断了是不是受保护进程,不是就拒绝。

 这里简单看一下这个函数,发现对比的是_PS_PROTECTION,其实就是Windows Vista之后引进的ppl保护机制,对应的msdn。

 PsIsProtectedProcess proc near          test    byte ptr [rcx+87Ah], 7mov     eax, 0setnbe  alretnPsIsProtectedProcess endptypedef enum _PS_PROTECTED_TYPE {PsProtectedTypeNone = 0,PsProtectedTypeProtectedLight = 1,PsProtectedTypeProtected = 2
} PS_PROTECTED_TYPE, *PPS_PROTECTED_TYPE;

好了,现在想办法怎么让过。

1、找能够清零PsIsProtectedProcess_180005238全局变量的漏洞;

2、找能利用的ppl进程;

上面两个都找了,第一种找了几个驱动,没找到能够控制传入参数赋值为0的,第二个创建的ppl(CREATE_PROTECTED_PROCESS)的父进程的句柄也是没有修改的权限的。

利用

由于之前分析过某个驱动,于是找到了某个不愿意透露姓名的驱动,能够打开进程(xxx-base),但是没有复制进程句柄和写内存的接口(只有读)。

 然后顺利打开system,和其他进程并且是操作进程的所有权限,起初是想以system句柄创建一个ppl进程的傀儡进程,但是呢,父进程只有受限制的查询权限(可以再次内核打开这不是问题),最主要的是没有主线程的权限,灰色代表的是挂起。

ULONG createProc(ULONG dupHandle)
{ULONG pid = NULL;STARTUPINFOEX si;PROCESS_INFORMATION pi;RtlSecureZeroMemory(&pi, sizeof(pi));RtlSecureZeroMemory(&si, sizeof(si));SIZE_T size = 0x30;si.StartupInfo.cb = sizeof(STARTUPINFOEX);si.lpAttributeList = (LPPROC_THREAD_ATTRIBUTE_LIST)malloc(0x30);if (si.lpAttributeList) {if (InitializeProcThreadAttributeList(si.lpAttributeList, 1, 0, &size)) {if (UpdateProcThreadAttribute(si.lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, &dupHandle, sizeof(HANDLE), 0, 0)) {if (CreateProcess("C:\\Windows\\System32\\svchost.exe",NULL,NULL,NULL,FALSE,CREATE_PROTECTED_PROCESS| CREATE_SUSPENDED | EXTENDED_STARTUPINFO_PRESENT,NULL,NULL,&si,&pi)){pid = pi.dwProcessId;//CloseHandle(pi.hThread);//CloseHandle(pi.hProcess);PROCESS_INFORMATION ProcessInfomation = { 0 };CONTEXT Context = { 0 };Context.ContextFlags = CONTEXT_ALL;if (!GetThreadContext(pi.hThread, &Context)){printf("GetThreadContext fail LastError:%d\n", GetLastError());}else{printf("Context.Eax 0x%x", Context.Eax);}}else {printf("create failed GetLastError %d\n", GetLastError());}}else {printf("UpdateProcThreadAttribute failed\n");}}}if (si.lpAttributeList)DeleteProcThreadAttributeList(si.lpAttributeList); //dumb empty routinefree(si.lpAttributeList);return 	pid;
}

后来测试ZwCreateThreadEx也会失败,毕竟创建线程会走回调,失败也很正常0xc0000022(STATUS_ACCESS_DENIED),但是VirtualAllocEx和VirtualProtectEx可以正常使用,只需要劫持NtContinue就可以了(这个函数调用和频繁,劫持写个shellcode注入dll应该不难吧。我没写---有懒人)。

真正的问题

看下当前受保护的进程,我选择MsMpEng.exe,打开之后,申请内存发现失败了。

 接着对比了smss和MsMpEng的acg保护,发现有点不一样,左smss。

 MsMpEng没有动态代码保护,但多了dll和extension pointer保护,于是写点代码把这两个保护给自己加上

	PROCESS_MITIGATION_IMAGE_LOAD_POLICY policy;ZeroMemory(&policy, sizeof(policy));policy.NoRemoteImages = 1;SetProcessMitigationPolicy(ProcessImageLoadPolicy, &policy, sizeof(policy))PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY policy2;ZeroMemory(&policy, sizeof(policy2));policy2.DisableExtensionPoints = 1;SetProcessMitigationPolicy(ProcessExtensionPointDisablePolicy, &policy2, sizeof(policy2))

 开测,一样成功申请到了内存。

那只有动态调试一下了,对指定进程的NtAllocateVirtualMemory下断电,发现在MiAllocateVirtualMemoryPrepare返回了STATUS_ACCESS_DENIED,进去之后在看看ObpReferenceObjectByHandleWithTag返回了STATUS_ACCESS_DENIED,此时感觉到莫名其妙,ObpReferenceObjectByHandleWithTag怎么会拒绝呢,于是打印了下对应的句柄

 屮,权限不足,原来最开始打开的权限就是受限制的,因为打开system和smss(ppl进程)成功就没有注意看句柄权限了,这里的MsMpEng权限还是受限制的(应该是在ob回调中限制了打开windows防火墙进程的权限)。

 啰嗦一下如果要劫持ppl进程的NtContinue,还是需要注意一下acg保护。


http://www.ppmy.cn/news/2605.html

相关文章

[Go] go基础4

1. 并发编程 1.1 并发和并行 并发: 多个线程在同个核心的CPU上运行.并发的本质是串行. 并行: 多个线程在多个核心的CPU上运行. 1.2 协程和线程 协程: 独立的栈空间,共享堆空间,调度由用户控制,本质上有点类似用户及线程,这些用户及线程的调度也是自己实现的. 线程: 一个线…

CRC 循环冗余检验【计网必考】

CRC 循环冗余检验作为一个重点,也是数据链路层必考的一个考点,所以我把差错检测单独拿出来分析一起看一下。总结不易,一个简单的攒,Thanks♪(・ω・)ノ 目录 一、介绍及工作原理 二、校验计算过程…

浅浅的分析Spring底层事务原理

Spring事务底层原理一、EnableTransactionManagement工作原理二、Spring事务基本执行原理三、Spring事务的过程四、Spring事务传播机制五、Spring事务传播机制分类(1)案例分析、情况1(2)案例分析、情况2(3)…

c++11中的declval和decltype

一、declval的介绍 std::declval定义在头文件中&#xff1a; template<class T> typename std::add_rvalue_reference<T>::type declval() noexcept;看定义它应该是返回一个右值引用(在T 是&#xff08;可有 cv 限定的&#xff09; void &#xff0c;此情况下返回…

Maya多边形物体批量材质传递工具v1.0发布及教程

一、插件介绍&#xff1a; 在大量场景制作时&#xff0c;当前期模型和材质没有同时完成&#xff0c;而用白模进行场景搭建后&#xff0c;能否后期&#xff0c;快速根据相同模型结构&#xff0c;快速识别物体并批量赋材质吗&#xff1f;答案是现在可以了。下面介绍的就是解决此…

ISO9001有什么好处

1、帮助大中小企业间公平竞争 有些中小企业不善于在国际市场中推销自己&#xff0c;当面对艰难竞争时&#xff0c;标准证书可以为其说话&#xff0c;给企业带来信誉。 2、帮助企业打开出口市场 从事标准化工作取得的收益比很多开展小型业务人员原本认为的要大。标准既重要且有趣…

springboot解决jsp页面和control互相跳转

Jsp页面和control交互是前后端交互最常见的模式。 1、首先配置Jsp。 配置Jsp 第一步保证自己的项目是web。打开目录设置。目录设置是idea中最常打开的窗口。 选择模块&#xff0c;配置web选择webapp路径。 然后就可以新建jsp 2、另外control建立及其简单。 新建软件包&am…

来用Service worker吧

之前说了笔者写了一个微前端框架。在微前端中子应用切换前要先获取到子应用的资源&#xff08;比如js、css&#xff09;和 html 片段进行加载。那么这里就涉及到一个“老生常谈”的话题&#xff1a;资源缓存。 为了缓存子应用的 js、css资源&#xff0c;笔者分两步进行&#x…