关注

揭秘Telnet暴力破解工具:原理、实现与核心技术解析(C/C++代码实现)

在网络运维与网络安全领域,Telnet协议作为一款经典的远程登录协议,曾广泛应用于设备远程管理,但因其明文传输的致命缺陷,如今成为了网络安全的薄弱环节。而Telnet暴力破解工具,正是依托这一协议的漏洞实现功能的特殊程序,接下来我们将从含义、原理、设计思路到相关知识点,全面拆解这款工具。

一、 什么是Telnet暴力破解工具(核心含义)

首先要明确两个前提:一是Telnet协议的特性——它在传输账号、密码及后续指令时均不进行加密处理,所有数据以明文形式在网络中传输,且很多老旧设备、嵌入式设备仍默认开启Telnet服务并使用简单默认密码;二是暴力破解的核心逻辑——枚举法,即批量尝试所有可能的验证组合,直到匹配成功。

基于这两个前提,Telnet暴力破解工具本质上是一款自动化程序:它预先存储大量常用的Telnet账号密码组合,通过并发连接技术批量对接目标Telnet服务,自动尝试账号密码登录,最终筛选出可成功登录的目标设备及对应凭证,同时具备超时管理、蜜罐识别、结果持久化等辅助功能。

需要特别强调的是,这款工具具有双重属性:合法用途是运维人员批量检测自身设备的Telnet弱密码漏洞,及时加固防护;非法用途是未经授权攻击他人设备,窃取控制权或植入恶意程序,这违反《网络安全法》等相关法律法规,需坚决抵制。

二、 核心代码实现原理

结合提供的代码,我们可以将工具的实现原理拆解为7个核心模块,每个模块都对应着工具的关键功能:

...
typedef struct 
{
    char *username, *password;
    int username_len, password_len;
} Combo;

extern int cindex;
extern Combo *combos;

void combo_add(char *, char *);
void combos_init(void);
...
void start_connection(char *, Brute *);
void check_connection(int, int);
void disconnect(Brute *);
void *watch_time();
int check_honeypot(Brute *);
typedef struct 
{
    enum
    {
        BR_IACS,
        BR_USERNAME,
        BR_PASSWORD,
        BR_SEND_ENABLE,
        BR_SEND_LSHELL,
        BR_SEND_SYSTEM,
        BR_SEND_SH,
        BR_SEND_BUSYBOX,
        BR_WAITING_TOKEN_RESP
    } stage;

    Combo *auth;

    int fd, rdbuf_pos, last_recv;
    char rdbuf[RDBUF_SIZE], address[16];
    uint8_t tries;
} Brute;

Brute *bruter;

void control_epoll(int, int, uint32_t);
...
typedef struct 
{
    int queued;
    char address[16];
} Queue;

Queue *queue;

void *handle_queued();
void bruter_queue_ip(char *);
...
int check_password_resp(Brute *);
int check_login_resp(Brute *);
...

int main(int argc, char **argv)
{
...
    if(argc != 2) 
    {
        printf("Error Invalid Amount of Arguements\nExample: %s 1\n", argv[0]);
        exit(0);
    }

    char rdbuf[16];
    int threads = atoi(argv[1]);
    pthread_t rec[threads], thread_writer[3];

    tport = htons(23);
    epfd = epoll_create1(0);
    bruter = calloc(MAX_CONS, sizeof(Brute));
    queue = calloc(999999, sizeof(Queue));

    combos_init();

    pthread_mutex_init(&mutex, NULL);
    pthread_create(&thread_writer[0], NULL, &writer_init, NULL);
    pthread_create(&thread_writer[1], NULL, &watch_time, NULL);
    pthread_create(&thread_writer[2], NULL, &handle_queued, NULL); // handle_queued()

    pthread_create(&rec[0], NULL, &epoll_thread, NULL);

    while(1)
    {
        memset(rdbuf, 0, 16);
        if(fgets(rdbuf, 16, stdin) == NULL)
            break;
        remove_newline(rdbuf);

        if(strlen(rdbuf))
        {
            if(processing < ACTUAL_MAX_CONS)
                start_connection(rdbuf, NULL);
            else
                bruter_queue_ip(rdbuf);

            ATOMIC_INC(&processed);
        }
    }

    for(int i = 1; i < threads; i++)
        pthread_create(&rec[i], NULL, &epoll_thread, NULL);

    printf("Finished Reading\n");

    while(1)
        sleep(1);
    return 0;
}

If you need the complete source code, please add the WeChat number (c17865354792)

测试方式1:简单单IP测试(优先验证工具能否正常运行)

这种方式适合先验证工具是否可用,无需依赖zmap,直接手动输入目标IP(必须是你自己拥有权限的设备,比如本地虚拟机、自己的嵌入式设备,非法测试他人设备违法)。

步骤:
  1. 进入工具目录(已在目录下可跳过)
    cd ./telnet-bruter/
    
  2. 运行工具,指定线程数(<threads>替换为具体数字,如4、8、16,建议先选小线程数测试,比如4)
    ./telnet-bruter 4
    
  3. 工具启动后,会进入实时统计界面(每秒打印处理数、失败数等信息),此时手动输入你自己的目标IP(比如本地开启Telnet服务的设备IP:192.168.1.100),输入后按回车即可
    # 示例输入(替换为你的合法IP)
    192.168.1.100
    
  4. 工具会自动发起连接,尝试预设的默认账号密码组合,你可以实时在终端(stdout)看到运行状态
  5. 查看结果:
    • 实时结果:终端会打印「Found Deivce」(破解成功)或「Honeypot Found」(识别到蜜罐)
    • 持久化结果:运行后会在当前目录生成两个文件
    • bruted.txt:存储破解成功的IP、端口、账号密码(格式:IP:23 用户名:密码)
    • honeypots.txt:存储识别到的蜜罐设备信息
  6. 停止工具:按 Ctrl + C 即可终止运行

###测试方式2:批量IP测试(对应你提供的zmap命令)
这种方式是批量扫描开放23端口(Telnet默认端口)的IP,并自动进行暴力破解,依赖zmap(高速端口扫描工具)。

步骤:
  1. 先安装zmap
    • Ubuntu/Debian系统
      sudo apt update && sudo apt install zmap -y
      
    • CentOS/RHEL系统
      sudo yum install zmap -y
      
  2. 执行你提供的批量扫描命令(替换<threads>为具体线程数,如8)
    zmap -p 23 | ./telnet-bruter 8
    
  3. 命令解释(帮你理解背后逻辑):
    • zmap -p 23:zmap会高速扫描网络中开放23号端口(Telnet端口)的IP地址
    • |:管道符,将zmap扫描到的开放23端口的IP,直接传递给后面的telnet-bruter工具
    • ./telnet-bruter 8:工具以8个线程,批量处理zmap传递过来的IP,自动进行暴力破解
  4. 运行与结果查看:
    • 工具会后台自动处理批量IP,终端实时打印统计信息
    • 结果同样会写入bruted.txthoneypots.txt文件,可在工具运行中或停止后查看
  5. 停止工具:按 Ctrl + C 即可终止zmap和telnet-bruter的运行

1. 预设弱密码组合库:暴力破解的“弹药库”

暴力破解的基础是有足够多的账号密码组合,代码中的combos_init()函数就是这个“弹药库”的初始化入口,它通过combo_add()函数预设了几十种常用弱密码(如root/root、admin/admin、root/123456等)。

这些组合会被存储在Combo结构体数组中,结构体不仅记录了用户名和密码的明文,还记录了两者的长度(username_lenpassword_len),方便后续网络传输时精准控制数据长度,避免冗余传输。这个模块的设计逻辑很简单:利用大多数用户/运维人员不修改默认密码的惯性,提高破解成功率。

2. 多线程并发:提升破解效率的“发动机”

工具采用POSIX线程(pthread)实现多任务并行,不同线程各司其职,避免单一任务阻塞影响整体流程,这是提升破解效率的关键:

  • writer_init线程:负责实时打印运行统计信息(已处理IP数、并发连接数、失败数、成功数等),方便使用者掌握工具运行状态;
  • watch_time线程:负责超时连接检测,避免无效连接占用资源;
  • handle_queued线程:负责待连接IP队列的处理,实现“先排队、后处理”;
  • epoll_thread线程:核心网络事件处理线程,负责对接Telnet服务、发送账号密码及接收响应。

多线程的分工设计,让工具在处理海量IP时,既能保证高并发,又能维持稳定运行。

3. epoll高性能I/O:支撑海量并发的“核心骨架”

代码中使用了Linux下的epoll机制(epoll_create1epoll_waitcontrol_epoll函数),这是实现海量并发连接的核心技术。

相比传统的select/poll机制,epoll采用事件驱动模式,无需每次遍历所有连接,只需处理有事件触发(如可读、可写)的连接,CPU资源占用极低,能轻松支撑数万个并发Telnet连接(代码中MAX_CONS设为99999,实际并发上限ACTUAL_MAX_CONS设为30000)。简单来说,epoll让一个线程就能“看管”成千上万个Telnet连接,这是工具高性能的核心保障。

4. 原子操作:保证并发安全的“防护锁”

代码中定义了ATOMIC_ADDATOMIC_INC等宏(基于GCC内置__sync_fetch_and_add函数),这是原子操作的实现。

为什么需要原子操作?因为多线程会同时修改同一个全局变量(如processedfailedfound等统计变量,processing并发连接数变量),如果不用原子操作,会出现“竞态条件”(比如两个线程同时给failed加1,最终结果只加了1,导致统计数据错误)。原子操作的优势是无需频繁加锁(比互斥锁效率高),能保证变量修改的“不可分割性”,确保多线程环境下数据的准确性。

5. 超时管理:释放无效资源的“清洁工”

watch_time线程每隔1秒遍历所有已建立的连接,对比当前时间和连接的最后一次接收数据时间(last_recv),如果时间差超过预设超时时间(TIMEOUT=30秒),就会调用disconnect函数关闭该连接,并将failed计数加1。

这个模块的作用是及时清理无效连接,避免这些连接占用文件描述符和网络资源,保证工具长时间运行不会因为资源耗尽而崩溃。

6. 登录验证与蜜罐识别:判断结果的“裁判”

工具通过两个核心函数实现登录结果判断,还内置了蜜罐识别功能,避免攻击到陷阱设备:

  • check_login_resp函数:通过查找服务端响应数据中的关键词(如“sername”“ogin”“assword”,对应“Username”“Login”“Password”),判断是否需要发送用户名或密码,实现登录流程的自动化切换;
  • check_password_resp函数:一是查找“ncorrect”“ailed”等错误提示,判定登录失败;二是查找“:”“>”“$”“#”等命令行提示符,判定登录成功(这些符号代表已获取设备控制台权限);
  • check_honeypot函数:通过查找响应数据中的“richard”关键字,识别蜜罐设备,避免工具的攻击行为被蜜罐捕获和溯源。

7. 队列缓冲与结果持久化:保证稳定性与可追溯性

  • 队列缓冲:当并发连接数达到上限时,bruter_queue_ip函数会将目标IP存入队列,等待后续并发数有空余时再处理,避免IP丢失,实现“缓冲”效果;
  • 结果持久化:登录成功后,write_to_file函数会将目标IP、端口、账号密码写入bruted.txt文件;识别到蜜罐后,会写入honeypots.txt文件,方便使用者后续查看和使用结果。

三、 设计思路与流程架构

这款工具的整体设计理念是:以高性能并发为核心,兼顾稳定性、易用性和可追溯性,所有模块都围绕这个理念展开,其整体流程架构可通过以下步骤清晰呈现:

1. 简易文字流程图

初始化阶段 → 输入与排队阶段 → 并发连接与暴力破解阶段 → 统计与持久化阶段 → 循环运行阶段

2. 各阶段详细拆解

(1) 初始化阶段:做好前期准备
  • 加载“弹药库”:调用combos_init()初始化账号密码组合库;
  • 初始化核心组件:创建epoll实例、互斥锁、Brute结构体数组(存储连接信息)、IP队列(存储待连接IP);
  • 启动工作线程:创建统计线程、超时检测线程、队列处理线程、epoll网络线程,所有线程进入循环等待状态,随时准备工作。
(2) 输入与排队阶段:接收目标并分流
  • 读取目标IP:从标准输入读取目标IP,调用remove_newline函数去除换行符,避免格式错误;
  • 并发数判断:
    • 若当前并发连接数(processing)小于上限(ACTUAL_MAX_CONS):直接调用start_connection发起Telnet连接;
    • 若已达上限:调用bruter_queue_ip将IP存入队列,等待后续处理;
  • 统计更新:递增processed变量,记录已处理的IP总数。
(3) 并发连接与暴力破解阶段:核心执行流程
  • 队列消费:handle_queued线程循环检测,当并发数有空余时,从队列取出IP发起连接;
  • epoll事件处理:epoll_thread线程监听网络事件,按阶段执行操作:
  1. 连接建立(EPOLLOUT事件):进入Telnet协议协商阶段(BR_IACS),处理IAC协议交互,完成连接初始化;
  2. 接收响应(EPOLLIN事件):按破解阶段依次执行操作:
    • 用户名阶段:检测到登录提示,发送预设用户名,切换到密码阶段;
    • 密码阶段:检测到密码提示,发送对应密码,切换到命令发送阶段;
    • 命令阶段:依次发送enablelinuxshell等命令,尝试获取系统控制权;
    • 结果判断:判定登录失败/成功/蜜罐,更新对应统计变量,关闭连接并释放资源;
  • 超时清理:watch_time线程循环检测,及时关闭超时无效连接。
(4) 统计与持久化阶段:输出与保存结果
  • 实时统计:writer_init线程每秒打印一次运行状态,方便使用者监控;
  • 结果保存:登录成功或识别蜜罐后,将结果写入对应文件,实现持久化存储,方便后续查看。
(5) 循环运行阶段:持续工作

工具会一直循环读取输入IP、处理队列、维持并发连接,直到使用者手动停止程序,保证对海量目标IP的持续处理能力。

四、 相关领域核心知识点总结

这款工具涉及软件开发和网络安全两大领域的多个核心知识点,这些知识点不仅是工具实现的基础,也是相关领域的重点内容:

1. 软件开发领域核心知识点

  • POSIX多线程编程:掌握线程创建、互斥锁使用、任务解耦,是实现高并发程序的基础;
  • Linux高性能I/O(epoll):I/O多路复用的核心技术,适用于网络扫描、即时通讯、服务器等海量并发场景;
  • 原子操作:解决多线程竞态问题的高效方案,相比互斥锁,在简单计数场景下效率更高;
  • 生产者-消费者模型:通过队列实现任务缓冲,解决生产速度与消费速度不匹配的问题,提升程序稳定性;
  • 动态内存管理:使用callocreallocfree函数管理动态内存,保证内存有序分配与释放。

2. 网络安全领域核心知识点

  • Telnet协议漏洞:明文传输是其最大安全隐患,现已被SSH(加密传输)替代,运维中应尽量禁用Telnet服务;
  • 暴力破解原理:基于枚举法的攻击手段,不仅适用于Telnet,还适用于SSH、FTP、网页登录等各类验证场景;
  • 弱密码防护:默认密码、简单密码是暴力破解的主要突破口,防护核心是使用复杂密码、定期修改密码、禁用默认账号;
  • 蜜罐技术:一种网络安全防御手段,通过模拟脆弱设备诱捕攻击者,记录攻击行为,为安全防护提供参考;
  • 网络攻击与合规:未经授权使用暴力破解工具攻击他人设备属于违法行为,需坚守网络安全合规底线。

五、 总结

Telnet暴力破解工具是“技术特性”与“人为漏洞”结合的产物:它依托Telnet协议的明文传输漏洞,利用多线程、epoll等高性能技术,实现了对弱密码设备的批量破解。从技术角度看,它的设计思路清晰、模块分工明确,是学习高并发网络编程的典型参考案例;从安全角度看,它提醒我们:网络安全的核心不仅是技术防护,更在于人为的安全意识——修改默认密码、禁用不安全协议、使用复杂密码,才能从根源上抵御这类暴力破解攻击。

同时,我们必须明确:技术本身无善恶,关键在于使用者的立场。将这款工具用于自身设备的安全检测,是提升运维安全的有效手段;若用于非法攻击,则会触犯法律,承担相应的刑事责任。

Welcome to follow WeChat official account【程序猿编码

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/chen1415886044/article/details/156432298

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--