Windows原理深入学习系列-特权
这是[信安成长计划]的第 21 篇文章
0x00 目录
0x01 介绍
0x02 结构分析
0x03 进程注入测试
0x04 参考文章
0x01 介绍
在 Token 当中还存在一个特别重要的内容——Privileges,它也是权限检查中的一个,当用户去执行一些特权操作的时候,会检查这个位置,看是否有执行的权限。
通过滥用一些特权指令,可以达到权限提升等目的,最常见的一个特权就是 SeDebugPrivilege,除此之外,还有很多的特权
文章图片
这些权限都可以通过 AdjustTokenPrivileges 来提升权限,代码可以参考微软给的例子
https://docs.microsoft.com/en-us/windows/win32/secauthz/enabling-and-disabling-privileges-in-c--
可以在命令行中查看当前所拥有的特权
文章图片
其中 SeChangeNotifyPrivilege 是默认会启用的一个特权,即使是 Low 完整性等级的也会有这个特权
文章图片
0x02 结构分析
可以在 Windbg 当中查看到一下,就用刚刚启动的 cmd-low.exe 来进行
查看它的 TOKEN 结构
文章图片
可以看到在 0x40 的位置就是 Privileges,继续看它的结构
文章图片
这三个值的每一位都代表着一个权限,我们重点要看的是 Present 和 Enabled,Present 决定了哪些位是当前可以用,Enabled 则决定了是否启用
可以看到当前是有五个权限位的,在根据上面的 Enabled 可以知道,只有一个权限位是打开的
文章图片
那这每一位到底代表着什么特权,我没有在微软的文档中找到描述,但是在 Windbg 中找到了另外的方案
我们使用 !token 命令让 Windbg 自己解析一下,可以看到有五个权限位,并且只有一个是启用的,数位数也刚好与上面所解析到的一致
文章图片
既然通过这样的方法可以知道位置和对应的权限,那么就可以通过全部启用,然后再让 Windbg 来进行解析,就可以得到所有的权限位了
文章图片
然后就可以看到所有的权限位和对应的权限了
文章图片
在查资料的时候,还发现了一个情况,在 AdjustTokenPrivileges 的时候,会进行额外的检查,所能启用的权限与进程的完整性挂钩了
文章图片
文章我贴到最后的参考链接当中
0x03 进程注入测试
在正常情况下,我们当前作为低完整性等级是不能够注入高完整性等级的进程的,在之前的文章中也已经测试过了
文章图片
在 OpenProcess 的时候就直接出问题了,这是符合我们的预期的
文章图片
但是在 OpenProcess 当中还有这样的一句话,如果给了 SeDebugPrivilege 权限,那么就会直接授予
文章图片
这里为了方便起见,直接使用 Windbg 来进行修改
文章图片
可以看到确实启用了
文章图片
然后再进行注入,可以发现成功了
文章图片
如果将其注入到 winlogon 进程当中,再创建一个 cmd,因为继承关系,我们也就拥有了 system 权限
文章图片
0x04 参考文章
【Windows原理深入学习系列-特权】1.https://docs.microsoft.com/en-us/windows/win32/secbp/changing-privileges-in-a-token
2.https://docs.microsoft.com/en-us/windows/win32/secauthz/privilege-constants
3.https://docs.microsoft.com/en-us/windows/win32/secauthz/enabling-and-disabling-privileges-in-c--
4.https://docs.microsoft.com/en-us/windows/win32/secauthz/privileges
5.https://book.hacktricks.xyz/windows/windows-local-privilege-escalation/privilege-escalation-abusing-tokens
6.https://github.com/gtworek/Priv2Admin
7.http://showlinkroom.me/2020/05/02/Windows-Via-C-C-note-4-2/
8.https://paper.seebug.org/1743/
9.https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess
推荐阅读
- 浏览器工作原理和V8引擎
- petite-vue源码剖析-事件绑定`v-on`的工作原理
- 学习笔记|TCP原理和三次握手和四次挥手过程
- JavaWeb|TCP原理(三次握手四次挥手)
- ★过关斩将|自考《数据库系统原理》(9)之数据库技术的发展
- spring声明式事务@Transactional底层工作原理
- 分布式架构Redis中有哪些数据结构及底层实现原理
- 重温数据结构经典(HashMap原理)
- Vue3|Vue3 Keep-Alive组件原理分析
- 【7000字】一晚上爆肝浏览器从输入到渲染完毕原理