浅谈暴力破解

0x01 原理

​ 暴力破解(brute force),又名暴力攻击、暴力猜解,从数学和逻辑学的角度,它属于穷举法在现实场景的运用。当密码未知或获得密码哈希时,攻击者会使用暴力破解来试图登录帐户,即通过利用大量猜测和穷举的方式来尝试获取用户口令的攻击方式。在ATT&CK中暴力破解有如下四种子技术。

  1. Password Guessing(密码猜测)

    事先不了解系统和环境,攻击者会猜测密码以尝试登录帐户。在不了解帐户密码的情况下,攻击者可能会在操作过程中通过使用常用密码字典来猜测登录密码,而无须事先了解系统或环境密码。

  2. Password Cracking(密码破解)

    当获得凭证材料(例如密码哈希)时,攻击者可能会解密密码来尝试恢复可用的凭据,例如纯文本密码。

  3. Password Spraying(密码喷洒)

    使用多个密码来暴力破解一个账号可能会导致该账号被锁定,攻击者可能会针对许多不同帐户使用单个或少量的常用密码列表,以尝试获取有效帐户凭据。

    密码喷洒常常针对如下服务:

    • SSH (22/TCP)

    • Telnet (23/TCP)

    • FTP (21/TCP)

    • NetBIOS/SMB /Samba (139/TCP & 445/TCP)

    • LDAP (389/TCP)

    • Kerberos (88/TCP)

    • RDP/终端服务 (3389/TCP)

    • HTTP/HTTP管理服务 (80/TCP & 443/TCP)

    • MSSQL (1433/TCP)

    • Oracle (1521/TCP)

    • MySQL (3306/TCP)

    • VNC (5900/TCP)

  4. Credential Stuffing(撞库)

    攻击者可以使用受害者历史上泄露的数据获得凭据,通过凭据重叠来访问目标帐户。

0x02 实验

1.密码猜测

Login.html

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Logintitle>
head>
<body>
    <h1>随便登录h1>
    <form action="checkLogin.php" method="post">
        Username: <input type="text" name="username"/>
        Password: <input type="password" name="password"/>
        <input type="submit" value="Submit">
    form>
body>
html>

checkLogin.php


$username=$_POST['username'];
$password=$_POST['password'];
if($username=="root" && $password=='root'){
    echo "Success!";
}else{
    echo "Fail!";
}
?>

以上代码为一个简单的表单提交到后台,判断账号,密码都为root则登陆成功。

浅谈暴力破解_第1张图片

接下来burpsuite抓包使用Intruder模块进行爆破,通过对比数据包的长度可以很好的判断是否爆破成功,因为爆破成功和失败的长度是不一样的。

在数据包中选定欲爆破的参数

浅谈暴力破解_第2张图片

设置爆破的字典

浅谈暴力破解_第3张图片

根据响应的数据包的长度可以判断出正确的账号、密码。

浅谈暴力破解_第4张图片

PS:进阶技巧

(1)默认凭证

在对某一服务进行暴力破解之前,我们首先应该尝试该服务的默认口令,这样也许可以节约大量的时间和工作量。通过搜索引擎等方式可以获取到不同服务的默认口令,以下是一些默认口令的合集。

  • http://www.vulnerabilityassessment.co.uk/passwordsC.htm‘
  • https://192-168-1-1ip.mobi/default-router-passwords-list/
  • https://datarecovery.com/rd/default-passwords/
  • https://bizuns.com/default-passwords-list
  • https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/default-passwords.csv
  • https://www.cirt.net/passwords
  • https://www.passwordsdatabase.com/

通过对这些默认口令的分析不难发现,很多都是以adminrootadministratorpassword等字样出现,而如果不更改掉默认口令,攻击者往往就能以此轻松突破。

(2)好用的字典

爆破的字典选什么是一个技巧,并非越全越好,这里整理了一些好用的字典仓库(感谢众大佬的分享),仅供参考。

  • https://github.com/Dormidera/WordList-Compendium
  • https://github.com/danielmiessler/SecLists
  • https://github.com/3had0w/Fuzzing-Dicts

(3)自定义字典

如果前期已经通过社工等方式搜集到目标有关信息,也许根据目标生成的专属字典能增加破解效率。

使用到的工具:pydictor—— 一个强大实用的黑客暴力破解字典建立工具

浅谈暴力破解_第5张图片

详细使用方法可以参考其用法示例

2.密码破解

在通过一定方式获得密码哈希后,进一步要做的就是将其破解了。

何为hash?Hash 一般翻译为“散列”,也可直接音译为“哈希”的。这个加密函数对一个任意长度的字符串数据进行一次加密函数运算,然后返回一个固定长度的字符串。Hash 主要用于信息安全领域中加密算法,渗透测试中获取目标系统的明文或 Hash 往往是整个渗透测试过程中重要的一环。

Window Hash

在 Windows 系统中本机用户的密码 Hash 是放在本地的 SAM(Security Account Manager) 文件里面,域内用户的密码 Hash是存在域控的 NTDS.DIT 文件里面。

分类

  1. LM

    LAN Manager(LM)哈希是 Windows 系统所用的第一种密码哈希算法,是一种较古老的 Hash,在 LAN Manager协议中使用,非常容易通过暴力破解获取明文凭据。它只有唯一一个版本且一直用到了 NT LAN Manager(NTLM)哈希的出现,在 Windows Vista/Windows 7/Windows Server 2008 以及后面的系统中,LM哈希算法是默认关闭的,LM 算法是在 DES 基础上实现的,不区分字母大小写。

  2. NTLM

    NT LAN Manager(NTLM)哈希是Windows系统认可的另一种算法,用于替代古老的 LM-Hash,一般指 Windows 系统下 Security Account Manager(SAM)中保存的用户密码 Hash,在 Windows Vista/Windows 7/Windows Server 2008 以及后面的系统中,NTLM 哈希算法是默认启用的。

获取

Hash的获取可以使用mimikatz工具

项目地址:https://github.com/gentilkiwi/mimikatz

下图为使用mimikatz获取win10用户的密码Hash

浅谈暴力破解_第6张图片

Hashcat 破解

在拿到 LM 或者 NTLM 的密文时,如果没有明文的时候,最直接的方法当然是直接将其解密啦,这里使用Hashcat来进行密码解密。

浅谈暴力破解_第7张图片

如上图我们通过msf获取到目标主机的hash

LM:44efce164ab921caaad3b435b51404ee

NTLM:32ed87bdb5fdc5e9cba88547376818d4

SHA1:6ed5833cf35286ebf8662b7b5949f0d742bbec3f

实际明文为:123456

Hashcat破解过程如下:

hashcat -a 0 -m 1000 --force 32ed87bdb5fdc5e9cba88547376818d4 password.txt

-a 0 字典破解

hashcat –-help 可以看到 LM 和 NTLM 对应的 hash 编号分别为30001000

浅谈暴力破解_第8张图片

在线Hash破解

https://www.cmd5.com/

浅谈暴力破解_第9张图片

https://www.objectif-securite.ch/ophcrack

浅谈暴力破解_第10张图片

Linux Hash

建立一个test用户进行测试,密码test

useradd -m test
passwd test

Linux 密码信息保存在两个文件中,分别为: /etc/passwd/etc/shadow

/etc/passwd

普通用户权限能够查看

保存用户信息,每一行代表一个用户,每一行通过冒号:分为七个部分

  1. 用户名
  2. 密码,x 表示密码保存在 /etc/shadow
  3. UID,0 代表 root
  4. GID,表示所在组
  5. 描述信息,依次为 Full Name、Room Number、Work Phone、Home Phone 和 Other
  6. 用户主目录
  7. 默认 shell 类型
# tail -n 1 /etc/passwd              
test:x:1001:1001::/home/test:/bin/sh

/etc/shadow

只有 root 用户权限能够查看

保存加密后的密码和用户的相关密码信息,每一行代表一个用户,每一行通过冒号:分为九个部分

  1. 用户名
  2. 加密后的密码
  3. 上次修改密码的时间 (从 1970.1.1 开始的总天数)
  4. 两次修改密码间隔的最少天数,如果为 0,则没有限制
  5. 两次修改密码间隔最多的天数, 表示该用户的密码会在多少天后过期,如果为 99999 则没有限制
  6. 提前多少天警告用户密码将过期
  7. 在密码过期之后多少天禁用此用户
  8. 用户过期日期 (从 1970.1.1 开始的总天数),如果为 0,则该用户永久可用
  9. 保留
# tail -n 1 /etc/shadow
test:$6$7uNh9hzdvpT3BRuB$ndF3AH.faJPvlgA.d57JOmFTLeQEuzgVFc.sYfI5VZDkOC6D78x9at.d8eTqRuTJsqjd6uboKmmYp75wbqE1e/:18825:0:99999:7:::

注意:

  • 密码字符串为*,表示系统用户不能被登入
  • 密码字符串为!,表示用户名被禁用,可以在机器上转到该用户,但无法远程登录
  • 密码字符串为空,则表示没有密码

密文由三部分组成:$id$salt$encrypted,id表示加密算法,salt 表示密码学中的 Salt, 系统随机生成 encrypted 表示密码的 hash

  • DES和明文开头无标记
  • id为1时,采用md5进行加密;
  • id为5时,采用SHA256进行加密;
  • id为6时,采用SHA512进行加密。

破解Hash

方式一:John the Ripper

这里使用kali自带的John工具进行破解

使用字典破解

john --wordlist=/usr/share/john/password.lst /etc/shadow

或直接暴力破解

john /etc/shadow

结果如下:

浅谈暴力破解_第11张图片

方式二:Hashcat

hashcat -m 1800 -o found1.txt /etc/shadow /usr/share/john/password.lst 

参数说明:

-m 1800:hash-type,1800对应SHA512

-o found1.txt:破解结果输出到found1.txt中

/etc/shadow:含要破解密文的文件

/usr/share/john/password.lst:字典文件

结果如图:

浅谈暴力破解_第12张图片

3.密码喷洒

Mysql爆破

使用工具–Kali-Hydra

hydra 192.168.100.250 -l wyw -P password.txt mysql -V
#hydra IP地址 -l 单个账户名 -P 字典路径 服务名 -V

浅谈暴力破解_第13张图片

使用工具–Kali-Metasploit

 ①:use auxiliary/scanner/mysql/mysql_login 
 ②:show options
 ③:set RHOSTS IP地址
 ④:set USERNAME 单个账户
 ⑤:set PASS_FILE 字典路径地址
 ⑥:set RPORT 端口号
 ⑦:run

浅谈暴力破解_第14张图片

遇到的坑:

  1. 3306端口需对外开放

  2. mysql用户允许远程连接数据库

    grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
    
  3. 若出现如下错误,需修改mysql字符集

image-20210715165113384

修改my.ini

character-set-server=utf8

类似的,FTP、SSH、Tomcat等也可以利用此工具爆破。

  • FTP

msf

use auxiliary/scanner/ftp/ftp_login

Hydra

hydra 192.168.146.141 -l admin -P /top1500.txt ftp -V
  • SSH

msf

use auxiliary/scanner/ssh/ssh_login

Hydra

hydra 192.168.146.141 -l root -P /top1500.txt ssh -V
  • Tomcat

msf

 use auxiliary/scanner/http/tomcat_mgr_login

0x03 其他场景

前面描述了针对登录用户和密码的暴力破解,暴力破解是否还可以用在其他场景呢?答案是肯定的,因为涉及人机交互的内容本质还是一个题目验证场景,在以下这些场景中,也有可能遭遇到暴力破解攻击。

图形验证码–同样的使用穷举方法,假设Web应用的登录验证码的范围是一个可衡量的值,攻击者可以使用工具将所有的验证码问题请求及结果保存为合集,并在后续的破解过程中调用这个结果合集;

短信/邮箱验证码–针对四到六位纯数字的短信或邮箱验证码,也可以用暴力破解的方法进行猜解攻击尝试;

关键参数–针对应用中的关键参数的,亦可以用穷举法进行遍历,当存在权限控制不当时,这种遍历方法还能批量获取敏感信息。如枚举订单号后并提交订单查询,在权限控制不当的Web应用中,这会导致批量的用户订单信息泄露。

0x04 防御方法

针对暴力破解攻击,应用的安全设计要多方考量,从每一个可能的受攻击面出发,结合逆向的逻辑思路,建立合理的防御机制。常见的防御措施如下。

1)用户名或密码输入错误时统一返回“登录错误,请重试”提示信息

2)在用户登录时增加验证码,防止通过程序自动枚举账户

3)验证码应具有足够的随机性和干扰性,考虑逻辑和交互式验证码

4)确保所有类型的验证码能够用后即失效,防范可被重用

5)在用户登录中增加对同一IP地址尝试次数的限制

6)系统自身安全性增强:强制要求用户注册时满足口令复杂度要求

7)定期对比数据库存储的密码密文值与top500弱密码的密文值

参考资料

[1] 暴力破解

[2] Windows 用户密码的加密方法与破解

[3] web渗透—暴力破解

[4] 【技术工场】浅谈暴力破解攻击

[5] 暴力破解方法汇总——远程服务爆破篇

[6] Linux 下的密码 Hash破解方法

你可能感兴趣的:(渗透测试,渗透测试)