LPE基础
国内资料太少只能摁磕英文,好在英语底子还在。
和symbolic link相关的技术在不久后windows会上通用补丁,基本可以无视了
大部分资料都是来自国外Google project zero的James Forshaw,包括工具。
Introduction.to.Logical.Privilege.Escalation.on.Windows
Path Canonicalization
这种看似只能load C:\Windows\ 目录下的dll,但是可以通过”..”绕过来回退到上级目录
Insecure Path Usage
这种就是加了check的情况
可以通过ads附加数据流
ads实例可以参考CVE-2020-12431
可以把它当作一个文件,为一个文件或者文件夹添加ads,然后loadlib直接load我们写入的这个ads即可
教材ppt写的很明确
TOCTOU
TOCTOU on Name
这个主要是利用了LoadLibrary函数的特性会添加扩展名
当然也可以通过条件竞争来打
还有一种TOCTOU也是最常见的就是利用oplock和symbolic link
Symbolic Link TOCTOU
可以看到check了扩展名
oplock主要是为了增加条件竞争的成功概率
具体方法是创建软连接然后设置oplock,oplock触发后移除软连接并创建相同文件夹然后拷贝我们的dll进去即可
DosDevices Redirect
在学习的时候也掌握了大部分漏洞挖掘技巧
寻找攻击面->写脚本搜索->写exp
HARD LINK
CVE-2018-8440
SchRpcSetSecurity函数在win10中会检测C:\Windows\Tasks目录下是否存在后缀为.job的文件,如果存在则会写入DACL(Discretionary Access Control List,自主访问控制列表)数据。如果将job文件硬链接到特定的dll那么特定的dll就会被写入DACL数据,本来普通用户对特定的dll只具有读权限,这样就具有了写权限,接下来向dll写入漏洞利用代码并启动相应的程序就可以提权了
CVE-2018-0983 原理与其类似
SANBOX
这边学习资料来自Nullcon
James Forshaw的俩个slides
The Windows Sandbox Paradox
这个是2015年的,当时win10还没出来着,但是原理还是很接近的,2019和这个差不多,重点讲了symbolic link但是要没了,为了方便直接放一起写了
Sandboxing Requirement
Easy to get in, hard to get out
Protects the user’s data from disclosure
Work within the limits of the OS
Sandboxed application is usable
Limited Performance Impact
基本上广义的sandbox就是指权限较低的,被限制了某些权限的进程,需要一些资源的时候就通过具有权限的broker process来获取,以前还以为是win10上那个像虚拟机的
完整性级别一般是low,但是win10有新的ie sanbox是appcontainer
上图是一般的access check,先是强制完整性校验,假如你完整性比访问程序低,你不能获取写权限
接着是owner check,这个是用来防止有人在acl中限制了owner,然后owner就不能访问自己的文件。
最后就是dacl check
但是遇到sandbox时就多加一轮
微软提供了函数来让你创建一个低权限的进程,创建时会发现crash,因为进程初始化会调用一些函数来load dll,而进程没有权限
接下来就是讲攻击面
讲到symbolic的不介绍了。。。毕竟快没了
路径规范化问题可以看前面有过介绍
ads也是
假如申请Sharing Sections没有命名,sanbox process可以获得写权限
(可以看到申请的是writable,DuplicateHandle给了sanbox process 一个RO的memory)
这个是在chrome里发现的问题
具体就是因为没有命名导致没有安全描述符可以重新调用DuplicateHandle来获得一个可写的内存
如上图所示