smbmap报[*] Detected 0 hosts serving SMB

执行smbmap

smbmap -H {target_ip}

显示

[*] Detected 0 hosts serving SMB
[*] Closed 0 connections

vps连目标机时正常,vps距离目标时延较低

抓包显示三次握手依次为syn,syn+ack,第三个包直接rst,即本机主动rst

怀疑是timeout设置问题

查看帮助man smbmap

发现可以设置--timeout, 默认0.5s

于是设置为10

smbmap -H {target_ip} --timeout 10

但还是老样子

于是查看smbmap.py

关于该timeout参数的代码如下:

    if args.scan_timeout:
        if args.scan_timeout > 0 and args.scan_timeout < 10:
            PORT_SCAN_TIMEOUT = args.scan_timeout

关于执行连接的代码如下:

def find_open_ports(address):
    result = 1
    address = address.strip()
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(PORT_SCAN_TIMEOUT)
        result = sock.connect_ex((address, 445))
        if result == 0:
            sock.close()
            return address
        else:
            return False
    except Exception as e:
        return False

 

终于发现问题了

PORT_SCAN_TIMEOUT默认值0.5

问题一,PORT_SCAN_TIMEOUT在设置该值的函数中没有声明global,导致该设置是无效的,find_open_ports在调用PORT_SCAN_TIMEOUT恒为0.5

问题二,scan_timeout只接受0 ~ 10之间的值,超出这个范围就是0.5,但是帮助里没给提示

上面问题,导致时延大于500MS的环境,就会扫描失败,看提示还看不出来,设置timeout也不管用

 

解决方法:

在设置PORT_SCAN_TIMEOUT的代码前加global,并且--timeout只能用0~10之间的数

    global PORT_SCAN_TIMEOUT
    if args.scan_timeout:
        if args.scan_timeout > 0 and args.scan_timeout < 10:
            PORT_SCAN_TIMEOUT = args.scan_timeout

  

还有个问题,Authenticating认证时如果因为超时报Connection error on {target_ip}

是因为认证连接时的代码也有设置timeout,这个timeout默认3秒,执行脚本时不提供修改该值的参数,只能直接修改代码

def login(host):
    smbconn = None
    try:
        if host['port'] == 445:
            smbconn = SMBConnection(host['ip'], host['ip'], sess_port=host['port'], timeout=3)
        else:
            smbconn = SMBConnection('*SMBSERVER', host['host'], sess_port=host['port'], timeout=3)

直接改为timeout=10即可

 

posted @ 2024-08-10 19:05  GUXH  阅读(10)  评论(0编辑  收藏  举报