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

news2025/1/16 9:04:22

背景

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

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

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

 PsIsProtectedProcess proc near          
                 test    byte ptr [rcx+87Ah], 7
                 mov     eax, 0
                 setnbe  al
                 retn
 PsIsProtectedProcess endp

typedef 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 routine
	free(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.coloradmin.cn/o/72204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows cmd指令记录、监听进程是否存在、exe注册到服务中开机后台运行

cmd指令记录 mstsc:远程桌面 regedit:打开注册表 control userpasswords2:去掉开机登录界面 shell:startup:进入登录界面后自启程序 services.msc:启动、终止并设置服务管理界面 shutdown -r -t 0:-r…

一步一步学Iceberg-对比Flink+Kafka和Flink+Iceberg的差异

一 FlinkKafka做实时数仓的弊端 我们以前(包括现在)还有用FlinkKafka做实时数仓,以及日志传输。Kafka本身的存储成本很高,并且数据保留时间有时效性,一旦消费积压,数据达到过期事件后,就会导致…

[附源码]JAVA毕业设计文件发布系统(系统+LW)

[附源码]JAVA毕业设计文件发布系统(系统LW) 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: …

Talk预告 | 剑桥大学在读博士生苏熠暄:对比搜索(Contrastive Search)—当前最优的文本生成算法

本期为TechBeat人工智能社区第461期线上Talk! 北京时间12月8日(周四)20:00,剑桥大学在读博士生——苏熠暄的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “对比搜索(Contrastive Search)—当前最优的…

【Keras计算机视觉】Faster R-CNN神经网络实现目标检测实战(附源码和数据集 超详细)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、目标检测的概念 目标检测是计算机视觉和数字图像处理的一个热门方向,广泛应用于机器人导航、智能视频监控、工业检测、航空航天等诸多领域,通过计算机视觉减少对人力资本的消耗,具有重要的现…

抗疫专题网页设计 致敬最美逆行者网页制作 疫情感动人物静态HTML网页

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

开发必装最实用工具软件与网站

声明:有些不管你是不是程序员都可以装的软件,我都备注了 我是一名java开发工程师嘛,就给大家分享一下实用的软件 这里我就不介绍idea、postman 如果只是代码编辑,可以看推荐一下我使用的开发工具_我认不到你的博客-CSDN博客 存放…

【软件测试】资深测试告诉你做好测试需求分析是有多么重要......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试需求到底是什么…

iwebsec靶场 文件上传漏洞通关笔记2-第02关 文件名过滤绕过

目录 第02关 文件名过滤绕过 1.打开靶场 2.源码分析 3.上传info.pHp 4.获取上传脚本地址 5.访问上传脚本 第02关 文件名过滤绕过 1.打开靶场 iwebsec 靶场漏洞库iwebsechttp://iwebsec.com:81/upload/02.php 随手上传脚本info.php,如下所示提示不能上传php文…

日志:logback、枚举

logback下载步骤: logback官网https://logback.qos.ch/index.html教程http://t.csdn.cn/xSK0I 点击SLF4J API进去,注意看右上角的标题是有变化的,是什么目录下就会显示什么目录,点击下载 然后一样点击右下角的Maven 下载这三个&a…

12月8日:thinkphp中的杂项

缓存 缓存概念及类型:什么是缓存 - 与非网 缓存(cache)一般存放在runtime目录下,页面请求一次将请求内容进行缓存,下一次再次访问,会直接访问到缓存内容,不会再次请求服务器,减少服务器压力 场景&#xff…

C++ Primer Plus第五版笔记(p151-200)

64 空语句存在危害 p155 65 复合语句是指用花括号括起来的,也被叫做块 一个块就是一个作用域 66 空块的概念p155 67 else只和最近的没配对的if 进行配对 (悬垂else) 68 case标签必须是一个整形常量表达式 69 default也是一种特殊的case标签 …

【github项目更新以及相关常用操作】

文章目录(一)更新github项目以及更新项目里某个特定文件(二)报错(三)github更改默认分支(一)更新github项目以及更新项目里某个特定文件 更新github项目: 1、首先确保你有github账号并且执行过上传操作(有项目,项目里有文件 2、点击想更新的…

Oracle PrimaveraUnifier 数据定义(Data Definitions),S1

目录 Basic Cost Code Data Picker 数据类型 数据长度 输入方式 Oracle Primavera Unifier数据定义描述了如何将数据输入到Unifier中并存储。数据定义是构建数据元素(表单字段)的基础。有三种类型的数据定义: BasicCost CodeData PickerBasic…

ABP框架数据库改为MySQL

项目中如果需要其他方式数据库的支持,那么需要先删除之前的支持程序集,再引入相应的支持程序集。 1、 移除默认SQL Server相关包 在EntityFrameworkCore项目下移除包Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Design 2…

如何精准分析特定用户的应用性能问题?这两个功能您一定要了解

应用发布后,尤其在发布初期,我们要格外关注应用的性能稳定性,如ANR、画面卡顿、加载慢等问题,如果不能及时被监测及解决,将会给用户带来非常糟糕的体验,导致低评、差评,甚至造成部分意向用户直接…

.net开发安卓入门 - Hello world!

.net开发安卓入门 - Hello world!前言新建项目启动调试调试效果添加Hello World效果安卓样式常见属性介绍第一类:属性值为true或false第二类:属性值必须为id的引用名第三类:属性值为具体的像素值,如30dip,40px第四类:布…

Python如何解析json数据

json 库可以自字符串或文件中解析JSON。 该库解析JSON后将其转为Python字典或者列表。它也可以转换Python字典或列表为JSON字符串。 解析JSON 创建下面包含JSON数据的字符串 json_string ‘{“first_name”: “Guido”, “last_name”:“Rossum”}’ 它可以被这样解析&#…

官方!杭州市第三批重点建设人工智能应用场景发布,创邻科技Galaxybase入选

近日,杭州市经济和信息化局公开发布《2022年杭州市第三批重点建设的人工智能应用场景清单》,对智慧城市、智慧交通、智慧教育、智慧金融等9个细分领域的申报项目进行遴选,最后以浙江大学、杭州城市大脑、顺丰速运为代表的46个人工智能场景脱颖…

net项目使用花生壳,Cpolar进行内网穿透

使用花生壳或Cpolar进行内网穿透一、注册授权一个花生壳账号二、添加花生壳配置三、修改项目配置信息四、以管理员身份打开vs五、Cpolar内网穿透一、注册授权一个花生壳账号 二、添加花生壳配置 打开花生壳客户端,找到内网穿透,找到添加符号&#xff0…