FreeBuf|任意文件移动导致的Windows提权攻击分析( 四 )
从任意文件写入到权限升级 。 在特权进程的上下文中 , 通过任意写入文件来获得代码执行的两种常用技术是:
- DLL劫持:在一个特权进程将加载它的位置创建一个DLL(在应用程序的目录中 , 在
System32
、Windows
或SYSTEM
的%PATH%
上的其他目录中) 。 它需要一个方法来(重新)启动那个特权进程来加载这个DLL 。 - 覆盖:替换现有的二进制文件/脚本/配置文件/等 , 会给我们代码执行的权限 。 除了需要(重新)启动进程外 , 还需要文件写入操作来允许覆盖现有的文件(另外目标文件不应该被锁定) , 并且通常对特定的服务/应用程序要求的非常具体 。
本文插图
至少有两种不太知名的技术 。
C:\Windows/System32/Wow64Log.dll
在32位特权进程中加载64位DLL 。 这个DLL在默认情况下并不存在(Windows10 消费者版本上) , 它在所有32位进程中加载 。 然而 , 这个DLL不能直接通过Kernel32导入 , 所以如果想导入它必须只使用NTDLL APIs , 当然这只有在你有一个32位进程要注入的时候才有效(同样也是一种启动它的方法) 。 AFAIK这个技巧是由George Nicolaou发现的(我可以找到的第一个参考资料)和由Walied Assar记录的 。 使用 “Diagnostics Hub Standard Collector Service”:这项技术是由 - 你猜对了 - James Forshaw发现的 , 在GPZ的一篇博客文章中详细解释 , 并在example exploit中公布了作为案例研究的bug 。 这篇文章非常值得一读 , 其要点是:DiagHub服务(以 “SYSTEM “的形式运行)可以从 “System32 “加载任何扩展名的文件作为DLL 。 因此 , 如果你能在System32
中创建一个带有有效载荷的文件test.log
(当然文件内容必须是DLL) , 只需使用该技术在特权服务中加载该DLL 。 然而 , 这种技术正在在即将到来的Windows 10版本中得到缓解 。本文插图
控制内容这些技术需要对创建的文件内容进行控制:如果你可以劫持创建一个文件到任意位置 , 但无法控制该文件中的内容 , 那么它的作用就非常有限 。 在我们的例子bug中 , 我们有一个很好的ACL , 由特权程序对生成的文件进行设置 , 但如果我们没有这个奢侈条件呢?
我们可以尝试针对其他操作 。 在我们的日志记录例子中 , 假设日志记录功能在日志达到一定大小的时候对文件进行移动 , 一个特权进程可能会移动或重命名日志文件(例如从
abc.log
到abc.old.log
) 。 那么我们就可以利用符号链接来滥用这个操作 。 在重命名/移动操作中 , 用指向我们的有效载荷(sh.dll
)的伪链接替换源文件 。将目标文件替换为我们要创建或替换的文件的伪链接(这里是
target.dll
) 所以 , 当重命名操作发生时的布局是这样的 。
本文插图
当特权进程试图将移动或重命名为
abc.old.log
时 , 它实际上会将用户拥有的文件sh.dll
移动/重命名为target.dll
, 将我们的有效载荷放在我们想要他在的位置 。 可以控制的特权文件移动/重命名/复制的情况如下: 一个受控的移动或重命名给我们提供了任意的文件写的能力
如果能够控制复制的源地址和目的地址也是一样的
复制操作 , 我们控制源头 , 而不是目的地 , 给了我们一个任意的文件读取(如果目的地的位置是用户可读的)
推荐阅读
- 电脑使用技巧|Excel数据处理与分析应用课程:NO2文件管理与打印设置
- 虚拟现实|虚拟任意门?苹果Apple Glass将能跳转至其它位置视图
- 任天堂|FCC文件显示任天堂打造新款Switch游戏机
- 华为手机|华为手机里隐藏着一个扫描仪,以后扫描文件再也不用去打印店了
- 雷科技|小米版“多屏协同”来了!支持拖拽文件等操作,尝鲜方式看这里
- 电脑使用技巧|dos命令assoc图文教程,显示修改文件扩展名关联
- 苹果|科技早报|加拿大否决孟晚舟公开机密文件的请求蚂蚁集团或10月在沪港两地IPO
- 和讯网|孟晚舟请求公开更多机密文件被否 究竟怎么回事?背后的原因曝光
- 财经新闻|“与案件无关”?加拿大法庭否决孟晚舟关于公开更多机密文件的请求,孟晚舟将于9月下旬重返法庭
- 机密文件|孟晚舟请求公开更多机密文件被否 究竟怎么回事?背后的原因曝光