您的位置:首页 > 运维架构 > Linux

Hydra源码分析学习

2016-09-23 17:16 1551 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息