Hydra源码分析学习

Hydra源码学习

由于工作需要,阅读了hydra的源码,现整理一下,方便后期翻阅学习

  • Hydra的简介及用法
    关于hydra的简介及用法,网上有很多的资料,本次便不在赘述

  • Hydra中需要知道的几个点

  • 1、 密码、用户名存储格式
    Hydra的使用可以直接读取用户名表和密码表,读出数据后,每个地段中间使用’\0’进行切割,故使用printf和string.h的函数在此地不可用。
    例如:
    User表是

root
asdf
123asd

则在内存中的存储字段为

 Root\0asdf\0123asd

密码表同理。因为键盘上凡是能出现的字母和符号均有可能是密码的一部分。故使用\0进行切割,是种聪明的做法。

  • *2、 服务之间的通信机制
    对某个服务进行密码破解时,是使用fork进程,并且创建了两个互相通信的套接字,
    这里写图片描述
    Socketpair函数是创建一对相互连接的套接字,用于本机内的进程通信。
    在子进行中开启密码破解服务,父进程中进行数据的接收处理。

  • 3、 用户名、密码的传递
    上面说了父子进程的作用,在子进程中获取用户名和密码也是通过套接字进行数据的获取。
    由于不只是一个进程,会存在最多32个父子程同时处理,父子进程在用户名密码这块的处理使用的是一个数组
    这里写图片描述
    即从套接字中获取一对用户名和密码存储在pair数组中。
    格式为\0隔开。即root\0123456.
    在截取时,使用while循环,遇到\0结束

  • 4、 父进程的数据接收处理
    父进程使用select进行数据的接收处理,虽然select效率不如epoll高,但是考虑到最多也就32个进程。使用select万全能够胜任
    这里写图片描述
    从子进程收到的数据,之后再分别进行处理

  • 5、 服务的密码破解
    这部分在子进程中进行,逻辑很简单。首先对服务的ip和port进行tcp连接,有-s参数的,会使用ssl进行连接,该处有两个作用。1、是为了检测该服务是否存在或者是否正在运行中,2、针对于部分服务需要使用该套接字进行数据会话。

对于postgres和mysql这类有现成api的服务。直接使用api进行连接。成功时代表用户名密码正确,失败代表不正确。

对于telnet、ftp这类的服务。使用的是数据交换的方式,将用户名密码封装为特定格式数据通过之前的套接字进行发送,然后接收返回信息。根据返回信息进行结果的判断。

http://blog.csdn.net/libinbin_1014/article/details/52640466

猜你喜欢

转载自blog.csdn.net/libinbin_1014/article/details/52640466
今日推荐