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
相关文章推荐
- 内核源码学习:LILO的运行分析
- 麻雀虽小,五脏俱全:分析CVS活动情况的小工具(有源码供学习)
- ExtJs源码分析与学习—ExtJs元素Element(三)
- Linux设备驱动程序第三版学习(2)-字符设备驱动程序源码分析(续)
- WinCE6.0学习之EBoot源码分析----startup.s(五)
- Linux 学习数据专题【管理、编程、源码分析】——Linux相关图书选购指南
- Python源码分析--学习笔记一
- WinCE6.0学习之EBoot源码分析----startup.s(二)
- Linux设备驱动程序第三版学习(2)-字符设备驱动程序源码分析(续)
- FreeBSD源码学习(2):echo命令源码分析
- DEDE源码分析与学习--index.php文件解读
- DEDE源码分析与学习之二: member文件结构说明
- firefox源码分析 (还是不建议用余学习C++)
- Linux设备驱动程序第三版学习(1)-字符设备驱动程序源码分析
- 麻雀虽小,五脏俱全:分析CVS活动情况的小工具(有源码供学习)
- Combres库 学习小结以及部分源码分析
- DEDE源码分析与学习之三: member/archives_add_action.php文件解读
- ExtJs源码分析与学习—ExtJs核心代码(一)
- WinCE6.0学习之EBoot源码分析----startup.s(三)
- CowNew开源学习文档-hibernate 的HQL源码分析1