新Windows本地提权漏洞学习(CVE-2019-0841)

时间:2023-01-22 09:43:16

1、这是一个啥漏洞?


睁眼一看,妈呀本地提权,快加入本地提权漏洞利用包里,速度加入。github连接我就不发了。担心被认为是传播黑客工具,咱们在这里单纯学习一下漏洞的原理和部分源代码。

2、文件读写权限转命令执行权限!


为啥能提权,基本原理先说一下,这个漏洞可以让你拥有“文件读写权限转命令执行权限”的典型案例,利用一个低权限获取高权限文件的读写权限,即可利用恶意代码注入,劫持dll等方式赋予自己高权限或者劫持高权限,从而获得命令执行的权限。举个例子:有一个system的py脚本会定期运行,你没有这个脚本的完全控制权限,但是有读写权限,你可以在里面增加一部分代码,比如下面,那么你在执行的时候,你自己的xxx账号就变成了管理员权限了。

os.system("net localgroup Administrators xxx /add")

真正的效果如图(在其他电脑上截的图)

新Windows本地提权漏洞学习(CVE-2019-0841)

那么问题来了,这个漏洞是如和让你拥有这类文件的权限的呢,我们先来补一补Windows系统的基础知识。

3、硬链接与文件安全描述符


先来看看巨硬官网咋说

新Windows本地提权漏洞学习(CVE-2019-0841)

简单来说就是硬链接指向的还是原来的文件的文件描述符,所以安全描述符应该是在不同的硬链接、软链接、原文件之间共享的。所以这就是为啥修改硬链接的权限导致原文件的权限也会被修改,因为都是一个安全描述符啊。

我们尝试使用使用mklink来建立硬链接

mklink /h C:\1 C:\Windows\System32\drivers\etc\hosts

新Windows本地提权漏洞学习(CVE-2019-0841)

那么问题来了,我们需要在这个低权限账户下创建硬链接啊,不然怎么办,提权走这条路,卧槽,老子能提权还做这个干啥。这个事本身不就是提权嘛。查一波文档,mklink使用的系统API是CreateHardLink

新Windows本地提权漏洞学习(CVE-2019-0841)

也不行啊,怀疑这个系统API中有权限检查,我们来看一下PoC中的代码,找到CreateHardLink

bool CreateHardlink(_TCHAR* src, _TCHAR* dst) {
if (CreateNativeHardlink(src, dst))
{
//printf("[+] Done!\n");
return true; }
else
{
printf("Error creating hardlink: %ls\n", GetErrorMessage().c_str());
return false;
}
}

嗯 ,这里使用了自定义函数CreateNativeHardLink

bool CreateNativeHardlink(LPCWSTR linkname, LPCWSTR targetname)
{
std::wstring full_linkname = BuildFullPath(linkname, true);
size_t len = full_linkname.size() * sizeof(WCHAR); typed_buffer_ptr<FILE_LINK_INFORMATION> link_info(sizeof(FILE_LINK_INFORMATION) + len - sizeof(WCHAR)); memcpy(&link_info->FileName[0], full_linkname.c_str(), len);
link_info->ReplaceIfExists = TRUE;
link_info->FileNameLength = len; std::wstring full_targetname = BuildFullPath(targetname, true); HANDLE hFile = OpenFileNative(full_targetname.c_str(), nullptr, MAXIMUM_ALLOWED, FILE_SHARE_READ, 0);
if (hFile)
{
DEFINE_NTDLL(ZwSetInformationFile);
IO_STATUS_BLOCK io_status = { 0 }; NTSTATUS status = fZwSetInformationFile(hFile, &io_status, link_info, link_info.size(), FileLinkInformation);
CloseHandle(hFile);
if (NT_SUCCESS(status))
{
return true;
}
SetNtLastError(status);
} return false;
}

看起来就是创建了一个硬链接,没有别的,这个过程没有看到身份认证和鉴权的操作,我理解应该是这里通过自己实现创建硬链接的函数来规避了权限检查啊,但是这个方面没有资料支撑,还需要进一步研究。

新Windows本地提权漏洞学习(CVE-2019-0841)的更多相关文章

  1. msf利用- windows内核提权漏洞

    windows内核提权漏洞 环境: Kali Linux(攻击机) 192.168.190.141 Windows2003SP2(靶机) 192.168.190.147 0x01寻找可利用的exp 实 ...

  2. Linux Kernel &OpenCurlyQuote;perf’ Utility 本地提权漏洞

    漏洞名称: Linux Kernel ‘perf’ Utility 本地提权漏洞 CNNVD编号: CNNVD-201309-050 发布时间: 2013-09-09 更新时间: 2013-09-09 ...

  3. Linux Kernel &OpenCurlyQuote;kvm&lowbar;set&lowbar;memory&lowbar;region&lpar;&rpar;’函数本地提权漏洞

    漏洞名称: Linux Kernel ‘kvm_set_memory_region()’函数本地提权漏洞 CNNVD编号: CNNVD-201306-343 发布时间: 2013-06-20 更新时间 ...

  4. 基于RedHat发行的Apache Tomcat本地提权漏洞

    描述 Tomcat最近总想搞一些大新闻,一个月都没到,Tomcat又爆出漏洞.2016年10月11日,网上爆出Tomcat本地提权漏洞,漏洞编号为CVE-2016-5425.此次受到影响的主要是基于R ...

  5. 【原创】深入分析Ubuntu本地提权漏洞CVE-2017-16995

    *本文首发阿里云先知安全技术社区,原文链接https://xz.aliyun.com/t/2212 前言: 2018年3月中旬,Twitter 用户 @Vitaly Nikolenko 发布消息,称 ...

  6. CVE-2016-1240 Tomcat 服务本地提权漏洞

    catalogue . 漏洞背景 . 影响范围 . 漏洞原理 . 漏洞PoC . 修复方案 1. 漏洞背景 Tomcat是个运行在Apache上的应用服务器,支持运行Servlet/JSP应用程序的容 ...

  7. CVE-2017-16995 Ubuntu16&period;04本地提权漏洞复现

    0x01 前言 该漏洞由Google project zero发现.据悉,该漏洞存在于带有 eBPF bpf(2)系统(CONFIG_BPF_SYSCALL)编译支持的Linux内核中,是一个内存任意 ...

  8. Ubuntu16&period;04 本地提权漏洞复测过程

    一.漏洞概述 Ubuntu 16.04 版本且unprivileged_bpf_disable 权限没有关闭的情况下就会存在 提权漏洞查看方式:1,cat /proc/version 查看系统版本 2 ...

  9. windows本地提权——2003笔记

    windows主机 用户有三种:Users,Administrator,System 本地拥有administrator权限用户提权到system用户 win2003: at命令 系统调度任务的指令, ...

随机推荐

  1. thrift ssl 证书整理

    一.生成证书,所需机器数必须 >= 2(一台生成服务端证书,一台生成客户端证书),以下服务器以A表示服务端.B表示客户端来举例,thrift版本为0.7.01.自签名的证书的生成和测试 1)生成 ...

  2. git pull提示当前不在某个分支上

    $ git pull You are not currently on a branch, so I cannot use any 'branch.<branchname>.merge' ...

  3. 【BZOJ1008】【HNOI2008】越狱(数学排列组合题)

    1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3140  Solved: 1317[Submit][Status] ...

  4. thinkphp where&lpar;&rpar;条件查询

    今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...

  5. MySQL配置文件路径及&OpenCurlyQuote;The total number of locks exceeds the lock table size’问题

    在删除mysql中的数据时,遇到报错: ERROR 1206 (HY000): The total number of locks exceeds the lock table size 查了查,发现 ...

  6. editor&period;md实现Markdown编辑器

    editor.md实现Markdown编辑器 Markdown和Editor.md简介 Markdwon编辑器在技术工作者圈子中已经越来越流行,简单的语法,统一的格式,强大的扩展功能,最重要的是:你可 ...

  7. Jquery中toggleClass的两种用法

    css样式: <style type="text/css"> .bgc{ background-color:#F00; color: #FFF} </style& ...

  8. C&plus;&plus; const关键字用法详解

    1const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目. 事实上这个概念谁都有只是三种声明方式非常相似很容易记混. Bjarne在他的T ...

  9. Nodejs进阶:crypto模块中你需要掌握的安全基础

    本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址. 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速度增长.同时,各类网络安全问题层出不穷.在信 ...

  10. xtrabackup工具备份与恢复

    1.xtrabackup简介 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品.它能对 ...