idiotc4t's blog
  • 关于这个博客
  • 武器设计
    • 我也不知道能不能写
    • C2手稿
      • Heap加密
      • 数据打包DataPacker
      • 真·手稿
      • 实现UML图
    • 先占个位置
  • 武器化
    • COM组件相关的武器化开发技术
    • 攻击demo的bof改造
    • Go项目反射改造
    • VulnBins的利用 (vuln driver)
  • 红队研究
    • NtQueryInformationProcess逆向
    • NetUserAdd逆向
  • 应急响应
    • WannaMine4.0专杀的一些技巧
  • 防御逃避
    • ReflectiveDLLInjection变形应用
    • Execute-Assembly实现
    • ShadowMove复现与思考
    • 载入第二个Ntdll绕Hook
    • 编译时混淆字符串&函数调用
    • 基于线程结束的EventLog绕过
    • 动态获取系统调用(syscall)号
    • 基于内存补丁的AMSI绕过
    • 基于API Hook和DLL注入的AMSI绕过
    • 基于内存补丁ETW的绕过
    • 基于断链的DLL隐藏
    • 基于HEX字符串执行的AV绕过
    • CobaltStrike Argue命令实现
    • 简单的分离免杀
    • 伪装PPID规避检测
    • 伪装命令行规避检测
    • 通过重写ring3 API函数实现免杀
    • 动态调用无导入表编译
    • 基于Registry的虚拟机检测
    • 利用杀毒软件删除任意文件
    • 反转字符串绕杀软
    • 重新加载.text节拖钩
    • x64转换层&跨位数进程注入
  • 代码与进程注入
    • Divide and Conquer
    • Clipboard Data Deliver
    • .NET Reflective Injection
    • APC Thread Hijack
    • CreateRemoteThread
    • APC Injection
    • Mapping Injection
    • Bypass Session 0 Injection
    • WhiteFile Offset Table Generate Shellcode
    • Early Bird
    • Early Bird & CreateRemoteThread
    • TLS Code Execute
    • SEH Code Execute
    • APC & NtTestAlert Code Execute
    • NtCreateSection & NtMapViewOfSection Code Execute
    • Process Hollowing
    • SetContext Hijack Thread
    • DLL Hollowing
  • 权限提升
    • 基于注册表劫持BypassUAC
    • 基于dll劫持BypassUac
    • 通过com组件BypassUAC
    • 通过复制Token提权到SYSTEM
    • 通过code&dll注入提权到SYSTEM
    • 通过伪装PPID提权到SYSTEM
    • 通过系统服务提权到SYSTEM
  • 权限维持
    • 主机特征绑定木马
    • 寻找有价值的文件
    • 获取机器安装的软件
    • 通过API添加Windows用户
    • Detours InLine Hook
    • DLL劫持
    • RID劫持
    • 自启动服务
    • 编写简单远控
    • 注册表自启动项
由 GitBook 提供支持
在本页
  • dll劫持
  • 利用流程
  • dll劫持bypassuac实验
  • LINKS

这有帮助吗?

  1. 权限提升

基于dll劫持BypassUac

上一页基于注册表劫持BypassUAC下一页通过com组件BypassUAC

最后更新于5年前

这有帮助吗?

dll劫持

由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。

参考->

利用流程

  1. 寻找一个带有autoElevate属性又具有dll劫持缺陷的程序

  2. 确定可劫持dll

  3. 写入恶意dll

dll劫持bypassuac实验

我们知道在进程创建的时候会复制一份登录用户的主令牌,而令牌内包含的特权又标识着当前进程的权限,部分拥有微软签名又具有autoElevate属性的程序会静默提升权限,本质上是把一个受限的令牌替换成一个高完整性的令牌,同时我们又知道在程序载入dll后在某些情况下程序会自动执行dllmain,如果我们能劫持一个dll,那我们编写的dll也会以拥有高完整性令牌的权限执行。

如何寻找带有autoElevate参考->

  • 寻找一个带有autoElevate属性又具有dll劫持缺陷的程序

过滤条件:

运行自动提权文件我们发现,在程序当前目录并不存在预期dll,虽然处于system32目录下我们无法直接写入dll,但是操作系统提供的一些功能是可以让我们以受限用户权限越权写入的,如wusa能够将cab文件释放至管理员权限的文件夹,在之后的windows10中虽然取消了该方法,但是同样有等效的替代方案IFileOperation越权复制文件。

在这里笔者就直接把dll放入system32\sysprep\。(好吧其实是我懒)。

成功bypassuac,当然如果要武器化,那还需要对dll进行一些优化。

LINKS

DLL劫持
基于注册表劫持BypassUAC
LogoGitHub - hfiref0x/UACME: Defeating Windows User Account ControlGitHub