1、这是一个啥漏洞?


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

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


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

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

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

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

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


先来看看巨硬官网咋说

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

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

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

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



也不行啊,怀疑这个系统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 ‘perf’ Utility 本地提权漏洞

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

  3. Linux Kernel ‘kvm_set_memory_region()’函数本地提权漏洞

    漏洞名称: 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.04本地提权漏洞复现

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

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

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

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

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

随机推荐

  1. C语言中字符输入问题

    先上例题,一道太水太水的题, http://acm.hdu.edu.cn/showproblem.php?pid=1170 让做一个简单的计算器.然而入坑了. #include<stdio.h& ...

  2. 转 js Infinite Scrolling Demo

    原文:http://www.sitepoint.com/jquery-infinite-scrolling-demos/ Infinite Scrolling Demo 5 Usage – HTML ...

  3. 条件式变分自编码机(Conditional Variational Autoencoders)

    Conditional Variational Autoencoders 条件式变换自编码机 摘要: Conditional Variational Autoencoders --- 条件式变换自编码 ...

  4. Java程序猿怎样高速理解Kubernetes

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/82892167 https: ...

  5. 使用scp命令在多个Linux系统间进行文件复制

    一,什么是scp scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.scp命令可以在linux服务器之间复制文件和目录.scp使用ssh安全协议传输数据,具有和ssh一样的验证机制,从 ...

  6. requirejs amd module load example

    person.js /** * This example make use of requireJS to provide a clean and simple way to split JavaSc ...

  7. centos exfat格式U盘不支持问题

    centos exfat格式U盘不支持问题 1. 下载fuse-exfat-1.3.0-1.el7.x86_64.rpm 2. 终端安装 rpm  -ivh fuse-exfat-1.3.0-1.el ...

  8. VS Code 插件

    https://blog.fundebug.com/2018/07/24/vs-extensions/

  9. Device does not seem to be present [常见错误解决]

    一.故障现象: [root@c1node01 ~]# service network restart Shutting down loopback insterface:                ...

  10. 卷积转换为矩阵运算中填充数的计算-GEMM

    背景:最近在写一个基于opencl的正向神经网络框架,项目地址 https://github.com/aktiger/YoloOCLInference ,我从这里https://github.com/ ...