前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从协议提取到多功能RDP识别脚本

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

作者头像
lonelyvaf
发布于 2018-06-07 06:50:36
发布于 2018-06-07 06:50:36
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

喜迎X大(涉及到这个数字后台就一直提醒可能违规,干脆)。然后,就是,我胡汉三又回来啦啦啦啦啦!!!身体养得差不多了,其实也没有什么大问题,谢谢大家关心~兄弟姐妹们,造起来啊~high起来啊~反正有大把时光~

谁再熬夜谁傻逼,以此为誓,违誓者发红包。

阅读此文大概需要8分钟,也可能80分钟

最近在公司和我们后端的兄弟聊了聊,他是FOFA 3.0的后端主要开发人员之一。把FOFA的协议识别与提取用Golang实现。 虽然没有他那么牛逼的编码技术,不过也对其架构稍稍了解。小小的学习了协议提取的知识。

下面介绍一些常用的提取方法,笔者所知主要有两种方法: 1、在使用一些客户端工具时候,Wireshark抓包提取发送和返回的数据包 2、直接发送一些指定的(特殊)字符串识别返回的banner头。

后一种方法发送什么字符串可以看看一些文档、手册或者用fuzz。

1F

RDP协议的提取

这里我以RDP协议的提取为例子。

第一步:打开wireshark,输入:ip.addr==ip_address 第二步:打开远程桌面连接

第三步:开始抓包,点击连接 我们看到抓到如下的数据包。

我们找到了发送data的这个数据包

右键追踪tcp流,可以看到如下为返回结果

我们把如下数据包的hex文本提取出来

我对windows 2k、2k3、2008、7、2012均进行测试

我们发送的数据包均为:

\x03\x00\x00\x13\x0e\xe0\x00\x00\x00\x00\x00\x01\x00\x08\x00\x03\x00\x00\x00

返回的数据包如下:

"2000": "0300000b06d00000123400" "2003": "030000130ed000001234000300080002000000" "2008": "030000130ed000001234000200080002000000" "win7OR2008R2": "030000130ed000001234000209080002000000" "2008R2DC": "030000130ed000001234000201080002000000" "2012R2OR8": "030000130ed00000123400020f080002000000"

我们看到了除了win2000外,其他的响应包的前10位均为030000130e,也就是前面的五个字节。 这边只提取这个五个作为判断。

2F

python脚本实现之最基础的socket连接判断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import socket


target="101.200.146.54"
port =3389
scan = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
scan.settimeout(5)
address = (target, port)
scan.connect(address)
scan.send('\x03\x00\x00\x13\x0e\xe0\x00\x00\x00\x00\x00\x01\x00\x08\x00\x03\x00\x00\x00')
banner = scan.recv(5)
if banner == '\x03\x00\x00\x13\x0e':
    print "%s RDP Port is %s!" % (target, port)

3F

加上多线程和指定端口范围

下面的脚本算是五脏比较全了,加了如下功能: 1、端口范围的指定初步实现 2、端口打乱(如果我们指定范围按部就班的去) 2、多线程,用信号量控制线程数 3、加锁控制错误信息的整齐打印 需要注意一点的是ips.txt这个ip地址文本虽然用xreadlines。但是由于不知道用户的输入是否有多余的不可见字符。理应在socket连接之前用strip()过滤"\r、\n"之类的字符。不然会出现一些异常,

比如:errno 11001 getaddrinfo failed

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/python
# coding=utf-8

import random
import threading
from socket import *
import socket
print_lock = threading.Lock()
filename="ips.txt"
port_list = []
ports="3380-3390"
n,m =ports.split("-")
for line in range(int(n), int(m)+1):
    port_list.append(line)
port_lists = random.sample(port_list, int(m)-int(n))

semaphore = threading.BoundedSemaphore(value=10)
def run(target):
    global semaphore
    suc = False
    for port in port_list:
        if suc:
            break
        scan = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        scan.settimeout(5)

        if port:
            address=(target,int(port))
            try:
                scan.connect(address)
                scan.send('\x03\x00\x00\x13\x0e\xe0\x00\x00\x00\x00\x00\x01\x00\x08\x00\x03\x00\x00\x00')
                banner = scan.recv(5)
                if banner == '\x03\x00\x00\x13\x0e':
                    suc = True
                    with print_lock:
                        print "%s RDP Port is %s!"%(target,port)
                else:
                    with print_lock:
                        print "RDP close!"
            except Exception as e:
                with print_lock:
                    print  str(e) + target.strip()+ " ,port:" + str(port)
            finally:
                pass
        scan.close()
    semaphore.release()
def main():
    with open(filename, "r") as fp:
        for ip in fp.xreadlines():
            semaphore.acquire()
            t = threading.Thread(target=run, args=(ip.strip(),))
            t.start()

if __name__ == "__main__":
    main()

4F

最终版本

1、在控制台的信息打印都加了锁,以保持整齐,这里提取出一个输出的函数打印错误信息。 如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def print_status(ip, message, msg_type='*'):
    global print_lock
    with print_lock:
        print "[%s] %s - %s" % (msg_type, ip, message)

2、用argparse模块处理输入的参数 3、自己封装了一个类进行指定ip段的生成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class gen_ip:
    def __init__(self,ip):
        self.ip = ip
    def gen_ip(self):
        start,end = [self.ip2num(x) for x in self.ip.split('-')]
        ip_list=  [self.num2ip(num) for num in  range(start,end+1) if num & 0xff]
        return ip_list
    def ip2num(self,ip):
        ip = [int(x) for x in ip.split('.')]
        return  ip[0]<<24 |ip[1]<<16 |ip[2]<<8 |ip[3]
    def num2ip(self,num):!
        return '%s.%s.%s.%s'%( (num & 0xff000000) >>24,
                                (num & 0x00ff0000) >>16,
                                (num & 0x0000ff00) >>8,
                                 num & 0x000000ff
                               )

这个生成一个1000w以内的B段差不多10秒内。

给出项目地址如下: https://github.com/lonelyvaf/rdp_find

后续可能会把这个封装为对象去写提取一些常用的协议吧,功能定位更多是内网的探测。

本来写了一个任务分发和结果集成管理,要用到kafka,先缓缓咯,有其他的事情。后续再一篇代码审计,送个0day给大家。

往期回顾

如何快速的搭建漏洞环境到复现到PoC

oreint db 远程代码执行漏洞

从iis认证方式的学习到一个路由器漏洞的调试

日志攻防初探之windows篇(iis日志介绍)

晨星先生

憋说话,要加速了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 晨星先生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python随笔(三)虚拟机运行原理 原
说到Python的运行机制,就不得不从.pyc文件和字节码说起 PyCodeObject对象的创建时机是模块加载的时候,即import。
Pulsar-V
2019/04/01
1.3K0
Python随笔(三)虚拟机运行原理
                                                                            原
phar相关安全知识总结
我是头回学习到phar RCE的相关知识,通过这次的SUCTF,通过复现大佬们所说的知识,发现了很多有意思的东西,过来记录一下,同时也总结了一些phar序列化的一些技巧,算是一次整理,大佬们不要见笑。
用户5878089
2019/09/17
5360
CVE-2017-11885 EXP
#!/usr/bin/env python # -*- coding: utf-8 -*- #Tested in Windows Server 2003 SP2 (ES) - Only works when RRAS service is enabled. #The exploited vulnerability is an arbitraty pointer deference affecting the dwVarID field of the MIB_OPAQUE_QUERY structure.
Jumbo
2018/07/26
9180
python网络-TFTP客户端开发(25)
TFTP(Trivial File Transfer Protocol,简单文件传输协议)
Se7eN_HOU
2019/09/11
2.4K0
python网络-TFTP客户端开发(25)
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
lonelyvaf
2018/06/07
1.9K0
各种转码(bytes、string、base64、numpy array、io、BufferedReader )
https://www.cnblogs.com/zhuminghui/p/11359858.html
全栈程序员站长
2022/09/14
7.2K0
Apache Log4j2 2.14.1 - 信息泄露CVE-2021-44228
供应​​商主页:https://logging.apache.org/log4j/2.x/
Khan安全团队
2021/12/22
5650
人生苦短,我用Python-手把手教你如何使用python写串口调试助手
  笔者这里使用的是QTCreator和Python来实现一个简单的串口上位机的开发的简单过程,使用到Python,之前记录的Qt 使用C++ 写上位机也记录一篇文章,大家感兴趣的话可以看看。从零开始编写一个上位机(串口助手)QT Creator + C++
用户8913398
2023/03/05
6.6K0
人生苦短,我用Python-手把手教你如何使用python写串口调试助手
python 免杀验证
使用Metasploit生成C语言风格的一些shellcode作为载荷,这里使用Windows bindshell,功能为选定一个TCP端口与cmd.exe进程绑定在一起,方便攻击者远程连接进行操控。
用户5760343
2019/07/31
8150
python 免杀验证
HackIM 2019-Mime checkr
原文地址:http://www.mohamed-chamli.me/blog/hackim%202019/Mimecheckr
安恒网络空间安全讲武堂
2019/09/29
7750
HackIM 2019-Mime checkr
字符串的这个东西-翻译表
不知道大家是否见过这个东西,反正我清楚记得我是见过的,可是为什么会写这个东西?有以下一个场景: 怎样将一个字符串中的中文字符统一转换成英文字符? 不知道大家会怎样去做?先列举一个例子: 'hello
py3study
2020/01/02
1.1K0
红队培训班作业 | 混淆&反沙盒机制&隐藏shellcode 过杀软静态检测
l 如下代码为实现payload经过fernet对称加密的shellcode生成器:
Ms08067安全实验室
2021/09/28
4990
Weblogic 懂?
#!/usr/bin/python import socket import os import sys import struct import time if len(sys.argv) < 2: print 'Usage: python %s <TARGET_HOST> <PORT>' % os.path.basename(sys.argv[0]) sys.exit() sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Khan安全团队
2021/05/08
1.5K0
Weblogic 懂?
HTTP/2 最新漏洞,直指 Kubernetes!
近日,Netflix、Google 及 CERT/CC 披露了 HTTP/2 相关的 8 个安全漏洞,就连用来打造 Kubernetes 的 Go 语言也受到其中两个漏洞的波及,导致 Kubernetes 所有版本都受到相关漏洞影响,可能造成服务阻断。不过好在现在漏洞已修复,而我们在这个过程中又可以学习到什么?
Java技术栈
2019/10/14
8180
HTTP/2 最新漏洞,直指 Kubernetes!
Python 实现SockStress全连接攻击
Sock Stress 全连接攻击属于TCP全连接攻击,因为需要建立一次完整的TCP三次握手,该攻击的关键点就在于,攻击主机将windows窗口缓冲设置为0,实现的拒绝服务。攻击者向目标发送一个很小的流量,但是会造成产生的攻击流量是一个巨大的,该攻击消耗的是目标系统的CPU/内存资源,使用低配版的电脑,依然可以让庞大的服务器拒绝服务,也称之为放大攻击。
王 瑞
2022/12/28
6030
Python 实现SockStress全连接攻击
Tensorflow的图像操作
图像数据解析 图像编码 import tensorflow as tf import base64 if __name__ == "__main__": path = "/Users/admin/Documents/111.jpeg" img = tf.io.read_file(path) print("图像字节编码:{}".format(img)) img1 = tf.io.gfile.GFile(path, 'rb') print("图像字节编码:{}".f
算法之名
2021/11/24
4260
Tensorflow的图像操作
用Python编写一个高效的端口扫描器
此端口扫描器的源码,文档及详细调用方法见Github PythonPortScanner by Yaokai。
py3study
2020/01/07
4.2K0
用Python编写一个高效的端口扫描器
从火绒特征码识别到免杀的思考...
我们今天从一个比较特别的方式去思考免杀,就是从杀毒软件的病毒库去思考怎么去做免杀。
Ms08067安全实验室
2022/05/27
1.8K0
从火绒特征码识别到免杀的思考...
构建ROP链实现远程栈溢出
通常情况下栈溢出可能造成的后果有两种,一类是本地提权另一类则是远程执行任意命令,通常C/C++并没有提供智能化检查用户输入是否合法的功能,同时程序编写人员在编写代码时也很难始终检查栈是否会发生溢出,这就给恶意代码的溢出提供了的条件,利用溢出,攻击者可以控制程序的执行流,从而控制程序的执行过程并实施恶意行为,而微软的DEP保护机制则可使缓冲区溢出失效,不过利用ROP反导技术依然是可被绕过的,接下来将具体分析如何利用ROP技术绕过DEP保护机制。
王 瑞
2022/12/28
8760
构建ROP链实现远程栈溢出
[starCTF / *CTF 2021] Pwn方向writeup
白给题,触发malloc_consolidate就可以leak+overlapping了
赤道企鹅
2022/08/01
5500
相关推荐
Python随笔(三)虚拟机运行原理 原
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验