口令安全
(一)服务口令爆破:
1.爆破 linux 主机的 ssh 密码
使用 nmap 爆破:命令如下:nmap -p 22 --script=ssh-brute --script-args userdb=用户字典,passdb=密码字典 目标机ip。
登录到 kali 操作机后按下 Ctrl+Alt+t 快捷键,打开一个终端,然后输入命令 nmap -sS 192.168.12.130 查询目标机器开放的端口情况。
目标机器开放了 21 和 22 端口,接下来会针对这两个端口开放的服务进行爆破,首先使用 nmap 对 22 端口的22 服务进行爆破,在 kali 的 root 目录中放置了 user.txt 和 pass.txt 两个文件,user.txt 中存储了 root 和 admin 两个用户名,pass.txt 中存储了 10 个的密码
继续在终端中输入命令 nmap -p 22 --script=ssh-brute --script-args userdb=/root/user.txt,passdb=/root/pass.txt 192.168.12.130。
待命令结束后可以看到找到了正确的用户和密码。
接下来使用 hydra 工具来爆破 ssh 服务,爆破任何目标服务之前都要确定目标是否开启了这项服务,先来看一下 hydra 的帮助信息,使用 hydra -h 命令:
在帮助信息的底部有几个命令例子:
简单介绍一下其中几个参数,-l 后加单用户名,-L 后加用户名字典,-p 加单密码,-P 后加密码字典,-M 后加目标机器文件,协议有两种形式,一种是 ftp://192.168.0.1 这种形式,另一种是先写 IP,然后写协议:192.168.0.1 ftp。
这里爆破 ssh,密码肯定是使用字典了,但是用户名这里有两个选择,每台 linux 机器都有 root 用户,可以单一爆破 root 用户,但有些机器 root 用户默认不给 ssh 权限,这样爆破时用户名也需要使用字典文件。
这里先爆破 root 用户,密码字典使用/root/pass.txt 文件,命令为:hydra -l root -P /root/pass.txt 192.168.12.130 ssh
很快密码就被破解出来,使用 ssh 验证一下是否正确,命令为 ssh root@192.168.12.130:
连接成功后输入 exit 退出即可。
2.爆破 linux 主机的 ftp 密码
爆破 ftp 和 ssh 是一样的,但是 ftp 的用户名我们是不知道的,这个用户名可以在收集信息阶段收集,也可以直接使用常用用户名字典,爆破的命令为:hydra -L /root/user.txt -P /root/pass.txt ftp://192.168.12.130
因为用户名也使用了字典文件,那么爆破时发送的请求就会成奇数增长,爆破时间自然会增加,因为 ftp 的用户名存在于用户名字典的前面,所以很快就得到了答案
还可以使用 metasploit 中的 ftp_login 模块对 ftp 进行爆破,在终端中输入 msfconole 打开 msf 终端。
使用 search 搜索 ftp_login 模块。
只搜索到一个模块,使用 use 命令来使用这个模块,然后输入 options 命令查看此模块需要设置的参数。
在参数中的 Required 列中描述为 yes 的选项是必填项,设置需要爆破的 ip 地址 rhosts,然后设置用户名字典user_file 和密码字典 pass_file。
然后输入命令 exploit 进行爆破,最后得到了正确的用户和密码。
使用 ftp 192.168.12.130 命令尝试登录 ftp。
3.通过 hydra 爆破 Windows 的 3389 端口
3389 是 Windwos 远程桌面的默认端口,很多使用 Windows 的管理员都喜欢开启此服务进行远程工作,但是这也为渗透者提供了入口点。
因为登录远程桌面需要计算机的账号和密码,那么如果渗透者登录了远程桌面,那么就可以查看计算机中的信息了,现在很多管理员也知道这点的弊端,但有时又不得不这样做,所以为了增强一点点安全性,管理员会将 3389端口改变为其他端口,那么渗透者手工尝试登录 3389 时会以为对方机器没有开启此端口而放弃。
其实上面做法只能欺骗一些新入门的选手,因为经验丰富的渗透人员如果使用专业扫描工具还是能够扫描到远程桌面的端口,然后使用-s 参数加上真正的端口号就可以了。
我们这里并没有更改端口,还是默认的 3389,此处还要注意一点,因为 hydra 使用时需要输入爆破的协议名,3389 的协议名为 rdp(Remote Desktop Protocol)。
在 kali 终端中输入 nmap -sS 192.168.12.144 查看目标 Windows 机器的端口开放情况。
目标机器的 3389 端口开放,如果在不知道对方计算机其他的用户名,建议先使用用户名 Administrator 进行爆破,命令为:hydra -l administrator -P /root/pass.txt rdp://192.168.12.144
在 linux 中也可以登录 Windows 的远程桌面,kali 自带了 rdesktop 工具,此工具就可以连接 Windows 的远程桌面,命令为 rdesktop 192.168.12.144,因为没有指定登录的用户名,所以默认打开后是如下页面,需要手动点击其中的其他用户。
然后输入用户名密码:administrator/com.1234,使用爆破出来的密码登录:
点击登录按钮后可以登录到远程 Windows 操作系统。
在 windows 中也可以使用 hydra 工具,如果你的攻击机是 Windows 系统,也可以下载 hydra 的 Windows 版本。
另外在 kali 中也提供了一个基于 GUI 的 hydra,名称为 xhydra,在终端中输入 xhydra 接口打开 hydra 的界面程序,界面如下:
其中每个选项都对应命令行版本的 hydra 中一个参数,每个选项一变动,软件下面的命令就会跟着变,能够起到很好的学习作用,还是推荐搭建多使用命令行下的各软件,因为有很多环境中都不允许使用界面程序。
(二)Burpintruder暴力攻击web口令
BurpSuite 介绍
Proxy(代理),代理功能能够截获并修改请求。为了拦截请求,并对其进行操作,浏览器发送的数据先通过 BurpSuite 软件,然后再提交给目标网站。在浏览器上设置代理服务器地址和端口号。BurpSuite 默认的代理地址为 127.0.0.1,端口号为 8080。打开浏览器页面,单击右上角红色方框-〉Preferences。
单击 General 往下拉在 Network Proxy 处点击 settings。
在打开的界面选择 Manual proxy configuration->HTTP Proxy,输入 127.0.0.1 和 port 8080,然后点击右下角的 ok 按钮进行保存。
在 kali 操作系统中按下 Ctrl+Alt+T 快捷键打开终端。
在命令终端中输入命令 burpsuite,启动 burpsuite 软件。
点击 burpsuite 工具的 proxy 标签下的 Options,显示了软件的默认代理设置。
打开 BurpSuite,标签 Proxy->intercept,进行 Intercept(截断),需要确保 intercept is on,BurpSuite 开始截断网页和服务器之间的数据包了,只有单击了 Forward 按钮,数据包才能转发。
如果 intercept is off,表示网页和服务器交互的数据包通过 BurpSuite,但 BurpSuite 软件不截取数据包。
在开始后面的操作之前,先按照上图中的设置,将 intercept 设置为 off。
Intruder(入侵)
Burpsuite Intruder 可以用于利用漏洞模糊测试、暴力猜解等。在这种情况下使用 BurpSuite Intruder 对 http://192.168.1.3 中的 dvwa 中的暴力破解实验,进行暴力猜解攻击。在浏览器中输入 http://192.168.1.3/dvwa/login.php,此为后台登录界面。用户名为 admin,密码为 password。单击 Login 按钮。
点击 DVWA Security 选择难度为 low,并点击提交,然后点击 Brute Force。
点击 Brute Force 后在 Username 输入 admin,password 输入 123456,点击 Login,在点击前确保需要确保 burpsuite 中的 intercept is on。
单击 Proxy->Intercept,软件截取到包含用户名和密码的数据包。
右键菜单选择 send to intruder,把数据包发送到 Intruder 界面。
单击 intruder->positions 标签
单击 clear$按钮,然后选中 password 字段的数字值 123456,然后单击 add$按钮,这样就会将 password 的值设置为需要爆破的变量。
单击 Payloads 标签,在 payload options(simple list)单击 add 按钮,添加破解的密码参数
在 Options 标签,选中红色方框标注的地方。
单击菜单栏中,的 Intruder 标签页选择 start attack。
在弹出的对话框中,看到返回数据长度与其他不同的数据,表示密码破解成功,因为在登录此 web 的时候也是使用的 admin/password 进行的登录,所以可以知道爆破成功的数据是正确的。
本实验爆破密码使用的是自己添加是少量密码值,在真正使用此方法的时候,可以添加密码条目更多的密码字典文件等弱口令文件,这样可以增加爆破成功的概率。
(三)利用Python爆破FTP口令
编写 ftp 服务的扫描脚本需要用到 python 的 ftplib 模块。ftplib 是 python 的内置的一个标准模块,它提供了极强大的对 FTP 服务器的操作,通过它可以连接并操作 FTP 服务端。
整个实验分为三个独立部分,分别为:编写简单的匿名 FTP 扫描脚本、编写暴力破解 FTP 用户口令的脚本和编写列出 FTP 服务器服务文件的脚本。
当使用 python 语言开发 FTP 程序时,需要将相应的 Python 模块 ftplib 导入项目程序中。 编写简单的匿名 FTP 扫描脚本的目的是实例化一个 FTP 连接,然后进行匿名登录,若捕获到异常,则说明不允许 FTP 匿名登录。
可以利用 Python 库中的 Ftplib 库编写一个小脚本确定服务器是否允许匿名登录。anonLogin()函数接收的参数是一个主机名,返回一个布尔值描述该主机是否提供匿名 FTP 登录。在运行时,该函数会尝试建立一个匿名 FTP 连接,如果成功则返回 True,如果建立过程中抛出异常则返回 False,代码如下:
将上述代码保存到 kali 操作系统的/root/python/ftp 目录下,名称为 ftp01.py,在桌面上右键选择 Open Terminal Here,可以直接打开终端,而且路径也被定为到了桌面上。
输入命令 python3 ftp01.py 运行脚本,可见目标主机使用的便是匿名用户登录。
编写暴力破解 FTP 用户口令的脚本的目的是先准备好密码字典文件 password.txt,并放 在 Python 脚本所在目录备用,然后实例化一个 FTP 并用用户名和密码登录,遍历 password. txt 文件进行暴力破解然后返回用户名和密码。
虽然匿名访问是进入 FTP 服务器的方式之一,但是攻击者也能利用其它的用户名与密码字典来暴力破解到有效的账户进行访问。将上一步中的 anonLogin()函数扩展成一个名为 bruteLogin()的函数,该函数接收的参数是主机名和含有用户名密码的文件,如果测试到可用的用户名密码便将其返回用户密码文件中用户名与密码用“:”隔开。用户密码文件的格式如 下:
如果爆破成功则返回一个用户名和密码的 tuple,如果失败则跳过异常继续下一行,如果所有行都已遍历完而仍旧没有成功登录,则返回一个值为 None、None 的 tuple,修改后的代码如下:
将上述代码保存到桌面,名称为 ftp02.py,需要在桌面创建一个 passwrod.txt 文件,其中写入一些条目,如上面展示的用户密码形式内容,然后在桌面启动终端并输入命令 python3 ftp02.py 运行脚本,运行脚本后成功爆破出了 FTP 口令。
在获得 FTP 服务器口令之后,下一步可以列出 FTP 目录中的所有文件,并将目录名转换为小写。但其中可能有些不需要的,所以这里定义只显示 ftp 目录文件中以.php,.htm,.asp 为后缀的文件,因为前面的脚本中已经将正确的密码爆破出来,所以这里就先使用正确的密码进行登录,代码如下:
将上面代码保存在桌面上,文件名为 ftp03.py,然后在桌面启动终端输入 python3 ftp03. py 运行脚本文件,结果如下:
最后,结合三个脚本实现 FTP 匿名登录,FTP 暴力破解以及 FTP 指定后缀文件搜索,从而达到 FTP 口令扫描与文件搜索的目的。
现在,将前三个脚本进行整合并进行一定程度上的优化,main 函数中增加了 optparse 模块的使用,此模块在前面的实验中已经讲解过,此处不做赘述。
在 main 函数中会先调用 anonLogin 函数进行匿名登录,如果登录成功就直接调用 returnDefault 函数进行目标文件的搜索,如果匿名登录没有成功的话就调用 bruteLogin 函数进行用户名和密码的暴力破解,破解成功后再调用 returnDefault 函数进行目标文件的搜索。完整的代码在kali 系统中的/root/python/ftp/ftp04.py 文件中,打开终端,切换目录到/root/python/ftp/,然后输入命令 python3 ftp04.py 运行脚本。
脚本提示了使用方法,构造命令为:python3 ftp04.py -H 192.168.12.142 -f password.txt,最终运行结果。