专栏首页晨星先生的自留地python寻找3389端口(2)

python寻找3389端口(2)

直接上脚本吧,多线程,加了队列,然后尝试用不同的banner头去连接1-65535端口,如果开放,总有一个是的,当从注册表无法读取RDP端口的时候。

#!/usr/bin/python
# coding: utf-8

import socket
import binascii
import sys
import threading
from Queue import Queue


def verify(sock, port):
        while 1:
                buff = sock.recv(2048)
                if not buff:
                        break
                b = bytearray(buff)
                print "[+] %s" % binascii.hexlify(b)
                detect_os(binascii.hexlify(b), port)
                # if len(binascii.hexlify(b)) == 38:
                #         print "[+] RDP Port is %s" % port
                #         sys.exit(0)


def detect_os(res, port):
        d = {
                "2000": "0300000b06d00000123400",
                "2003": "030000130ed000001234000300080002000000",
                "2008": "030000130ed000001234000200080002000000",
                "win7OR2008R2": "030000130ed000001234000209080002000000",
                "2008R2DC": "030000130ed000001234000201080002000000",
                "2012R2OR8": "030000130ed00000123400020f080002000000"
        }
        for key, value in d.iteritems():
                if value == res:
                        print "[+] Os May be: %s" % key
                        print "[+] RDP Port is %s" % port
                        sys.exit(0)
def send_payload(sock):
        sock.send("\x03\x00\x00\x13\x0e\xe0\x00\x00\x00\x00\x00\x01\x00\x08\x00\x03\x00\x00\x00")


def worker():
        while not q.empty():
                port = q.get()
                try:
                        scan(port)
                finally:
                        q.task_done()


def scan(port):
        try:
                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                s.settimeout(2)
                sys.stdout.write('[+] Check Port %s \r' % port)
                sys.stdout.flush()
                if s.connect_ex((ip, port)) == 0:
                        print "[+] Connect Success %s" % port
                        send_payload(s)
                        verify(s, port)
        except Exception, e:
                # raise e
                pass
        s.close()

if __name__ == '__main__':
        if len(sys.argv) != 2:
                print "Usage: %s IP" % sys.argv[0]
                sys.exit(0)
        ip = sys.argv[1]
        q = Queue()
        map(q.put, xrange(1, 65535))
        threads = [threading.Thread(target=worker) for i in xrange(50)]
        map(lambda x: x.start(), threads)
        q.join()

本文分享自微信公众号 - 晨星先生(MoXuanIT),作者:vaf

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-04-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 从协议提取到多功能RDP识别脚本

    lonelyvaf
  • niushop任意文件上传1

    lonelyvaf
  • python实现一个简单的3389读取工具(1)

    lonelyvaf
  • 【21天完虐Master】AlphaGo Zero横空出世,DeepMind Nature论文解密不使用人类知识掌握围棋

    【新智元导读】新智元AI World 2017世界人工智能大会倒计时进入20天,DeepMind 如约公布了他们最新版AlphaGo论文,也是他们最新的Natu...

    新智元
  • 无需人类知识,DeepMind新一代围棋程序AlphaGo Zero再次登上Nature

    选自DeepMind 机器之心编译 在今年五月击败柯洁之后,AlphaGo 并没有停止自己的发展。昨天,DeepMind 在《自然》杂志上发表了一篇论文,正式推...

    机器之心
  • 硬核NeruIPS 2018最佳论文,一个神经了的常微分方程

    在最近结束的 NeruIPS 2018 中,来自多伦多大学的陈天琦等研究者成为最佳论文的获得者。他们提出了一种名为神经常微分方程的模型,这是新一类的深度神经网络...

    机器之心
  • python的选择结构

    python的逻辑运算符:and(逻辑与),or(逻辑或),not(逻辑非). 和其它语言与[&&],或[||],非[!]不一样,感觉有些怪。 >>> not...

    东风冷雪
  • python sys.stdout

    下面介绍几个我们经常不经意就会用到的sys包的命令 stdout/stderr/stdin

    kirin
  • Python中struct.pack()和struct.unpack()用法

    python中的struct主要是用来处理C结构数据的,读入时先转换为Python的字符串类型,然后再转换为Python的结构化类型,比如元组(tuple)啥的...

    周小董
  • 围棋人机大战一周年:被AlphaGo改变的世界

    舒石、若朴 发自 凹非寺 量子位·QbitAI 报道 去年今日,三连败的李世乭扳回一局。 然而这一针兴奋剂很快失效,随后李世乭再折一阵,最终以1:4输给Alph...

    量子位

扫码关注云+社区

领取腾讯云代金券