本篇文章主要记录了作者学习以下内容的笔记:
- 信息收集技术(Whois查询、DNS枚举、Google Hacking、Shodan)
- 密码破解技术(密码破解基础、John the Ripper工具使用)
免责声明
以下所有关于黑客技术、病毒攻击、拒绝服务或任何其他计算机系统攻击手段的讲义、资料和讨论内容,仅用于教育目的。这些内容不得用于对任何计算机系统发起攻击或造成损害,也不以任何方式鼓励任何人从事此类行为。
本文所涉及的所有技术讨论仅供学习和研究使用。作者不对任何人使用这些信息用于非法用途负责。阅读本文即表示您同意不会将文中讨论或披露的任何技术手段用于实施网络攻击等违法行为。
本文遵循学术研究和技术交流的目的,拒绝为任何恶意行为提供指导。如有违法使用,使用者需自行承担所有法律责任。
密码猜测(Password Guessing)和密码破解(Password Cracking)
| 密码猜测 | 密码破解 | |
|---|---|---|
| 操作方式 | 直接在线尝试登录系统 | 离线破解密码哈希值 |
| 速度 | 速度慢 - 受网络环境和系统响应限制 | 速度快 - 不受网络和系统限制 |
| 网络流量 | 会产生大量网络流量和系统日志 | 不产生可疑的网络流量 |
| 风险 | 风险高 - 可能触发账户锁定或拒绝服务 | 更安全 - 不会触发账户锁定 |
| 隐蔽性 | 容易被发现 - 管理员能从日志中发现异常登录行为 | 难以被发现 - 需要先获取密码哈希值 |
| 成功率 | 成功率低 | 破解成功率高 - 可以使用字典、彩虹表等多种方法 |
信息收集
信息收集分为两大类,分别是主动信息收集 (Active Reconnaissance)和被动信息收集 (Passive Reconnaissance)
基本信息收集方法对比
| 类型 | 被动信息收集 | 主动信息收集 |
|---|---|---|
| 交互方式 | 不直接接触目标 | 直接与目标交互 |
| 隐蔽性 | 高 | 低 |
| 风险级别 | 低 | 中-高 |
| 检测概率 | 几乎无法被检测 | 容易被检测, Network IDS (Intrusion and Detection System) 或服务器日志 |
| 信息深度 | 相对表层 | 较为深入 |
| 合规性 | 基本合规 | 需要授权 |
OSINT(开源情报)
OSINT是Open Source Intelligence(开源情报)的缩写,指的是通过公开可获取的信息源来收集和分析数据的方法。简单来说,就是利用各种公开渠道获取目标信息的技术。
主要信息来源包括:
- 搜索引擎
- Google、百度、DuckDuckGo等通用搜索引擎
- Shodan(专门搜索联网设备的搜索引擎)
- Have I Been Pwned(检查邮箱账号是否遭遇数据泄露)
- 社交媒体平台
- 领英(职业信息)
- 微博/Facebook(个人信息)
- Instagram(照片、位置信息)
- 专业网站
- 域名注册商(可查询网站所有者信息)
- GitHub(开发者代码库)
- Pastebin(文本分享平台)
Google Dorking
Google搜索的高级操作符,可以帮助更精确地定位信息。
| 操作符 | 说明 | 示例 |
|---|---|---|
" " (引号) | 用于精确匹配短语 | "password file" - 只搜索完全匹配"password file"的结果 |
OR | 用于搜索多个关键词之一(必须大写) | admin OR password - 搜索包含admin或password的页面 |
- (减号) | 用于排除某些关键词 | admin -login - 搜索包含admin但不包含login的页面 |
intitle: | 在页面标题中搜索 | intitle:admin - 搜索标题中包含"admin"的页面 |
inurl: | 在URL中搜索 | inurl:admin - 搜索网址中包含"admin"的页面 |
intext: | 在页面正文中搜索 | intext:password - 搜索正文中包含"password"的页面 |
site: | 限定在特定网站内搜索 | site:example.com password - 只在example.com域名中搜索 |
filetype: 或 ext: | 搜索特定类型的文件 | filetype:pdf password - 搜索包含"password"的PDF文件 |
数据泄露查询工具
Have I Been Pwned?
Have I Been Pwned?是一个检查个人数据是否在数据泄露事件中被泄露的网站。
主要功能:
- 检查邮箱是否出现在数据泄露中
- 查看具体泄露的网站和时间
- 提供API服务
- 支持域名批量查询
Shodan
Shodan是一个专门用于搜索互联网连接设备的搜索引擎。它通过主动扫描互联网设备并抓取banner信息来工作。
| 搜索操作符 | 说明 | 示例 |
|---|---|---|
country: | 按国家代码搜索 | country:HK - 搜索香港的设备 |
city: | 按城市搜索 | city:Beijing - 搜索北京的设备 |
title: | 搜索HTML标题内容 | title:"login page" - 搜索标题含login page的页面 |
html: | 搜索完整HTML内容 | html:"admin" - 搜索HTML中包含admin的页面 |
product: | 搜索产品名称 | product:nginx - 搜索nginx服务器 |
version: | 搜索产品版本 | version:1.14.1 - 搜索特定版本 |
hostname: | 搜索主机名或域名 | hostname:example.com - 搜索特定域名 |
net: | 搜索IP范围或子网 | net:192.168.1.0/24 - 搜索特定网段 |
os: | 搜索操作系统 | os:Windows - 搜索Windows系统 |
port: | 搜索特定端口 | port:80 - 搜索开放80端口的设备 |
whois
whois是用来查询互联网中域名的IP以及所有者等信息的传输协议。
| 概念 | 说明 | 示例 |
|---|---|---|
| WHOIS | 查询域名和IP所有权的工具 | whois example.com |
| 域名WHOIS | 查询域名注册信息 | whois google.com |
| IP WHOIS | 反向查询IP地址信息 | whois 8.8.8.8 |
主要查询信息包括:
- 域名注册商
- 名称服务器
- 注册日期
- 到期日期
- 注册人信息
- 管理员联系方式
- 技术联系人
DNS域名系统
| 概念 | 说明 | 示例 |
|---|---|---|
| DNS正向查询 | 域名转换为IP地址 | host example.com |
| DNS反向查询 | IP地址转换为域名 | host 8.8.8.8 |
| DNS区域传送 | 获取某个区域的所有域名记录 | dig axfr domain.com @ns1.domain.com |
host
# 查询域名的NS记录(域名服务器记录)
host -t ns example.com
# -t 指定记录类型
# ns 表示查询域名服务器记录
# 查询域名的MX记录(邮件服务器记录)
host -t mx example.com
# -t 指定记录类型
# mx 表示查询邮件服务器记录
Dig
# 查询NS记录
dig ns example.com
# ns 表示查询域名服务器记录
# 查询MX记录
dig mx example.com
# mx 表示查询邮件服务器记录
# 使用Google DNS进行查询,简化输出
dig @8.8.8.8 example.com +noall +answer +short
# @8.8.8.8 指定使用Google DNS服务器
# +noall 关闭所有输出
# +answer 显示答案部分
# +short 显示简化结果
常用工具介绍
CeWL
CeWL是一个专门用于生成密码字典的爬虫工具。它的基本功能包括:
- 爬取指定网站的内容
- 提取网页中的单词
- 生成自定义的密码字典
- 特别适用于定制化目标的密码破解
例: cewl -d 2 -m 5 -w docswords.txt https://example.com,
-d 2:爬取深度为2层-m 5:最小单词长度为5个字符-w docswords.txt:输出保存到docswords.txt文件https://example.com: 目标网址
THC-Hydra
THC-Hydra是一个非常强大的密码暴力破解工具,主要用于在线密码猜测攻击。其名字来源于希腊神话中的九头蛇,象征着它可以同时进行多重攻击。
主要特点:
- 支持多种协议:
- Web相关:HTTP(S),FTP,SSH
- 邮件相关:POP3,IMAP,SMTP
- 数据库:MySQL,MSSQL,Oracle
- 其他:RDP,VNC,Telnet等
- 多线程并行:
- 可以同时发起多个尝试
- 能够加快密码猜测速度
- 可以控制线程数量
THC-Hydra攻击案例
启动Metasploitable和Kali虚拟机分别作为防守方和攻击方。这是一个典型的密码猜测场景:
- 攻击方:使用Hydra尝试密码
- 防守方:可以通过日志和流量监控发现攻击
-
创建测试账号并搭建一个有漏洞的FTP服务
# 创建测试用户 sudo adduser test0 # 设置密码为123FTP(File Transfer Protocol,文件传输协议)是一个用于在计算机网络上传输文件的标准网络协议。
默认端口:21(控制)和20(数据) 明文传输 - 不加密 需要用户名和密码认证 -
准备工作
# 查看目标IP地址 ip addr由此可知,防守方ip地址为
192.168.232.129# 监控认证日志 tail -f /var/log/auth.log通过日志,我们可以查看实时查看登录尝试、监控暴力破解攻击、发现可疑的登录活动以及追踪认证失败原因。
-
使用xhydra进行密码猜测
切换到Kali端。配置Hydra攻击如下:
设置目标:Metasploitable2的IP地址 选择协议:FTP 设置用户名:test0 密码字典:/usr/share/john/password.lst写成命令行的形式
hydra -l {username} -P /usr/share/john/password.lst ftp://{ip address}攻击完成,可以看到解析出密码
123.在此过程中,可以通过
sudo tcpdump -nn -i eth0 dst port 21监控21端口流量。 -
通过日志监控整个攻击过程
防守端日志:
防守端日志关键信息:
-
群组创建 Feb 17 07:56:20 metasploitable groupadd[5547]: new group: name=test0, GID=1004 Feb 17 07:56:20 metasploitable useradd[5548]: new user: name=test0, UID=1004, GID=1004, home=/home/test0, shell=/bin/bash
-
攻击开始 Feb 17 08:09:32 metasploitable vsftpd: pam_unix (ftp:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=test0 rhost=192.168.232.128 显示了攻击特征:
- 协议:vsftpd (FTP服务)
- 目标账户:test0
- 攻击源IP:192.168.232.128
- 状态:authentication failure (认证失败)
Feb 17 08:09:38 metasploitable last message repeated 46 times- 显示同样的失败尝试重复了46次
攻击端日志:
-
-
删除用户
实验结束后,需要删除防守端用于测试的用户。删除指令:
sudo deluser test0 # 只删除用户,保留家目录
sudo deluser --remove-home test0 # 同时删除用户和其家目录
JOHN THE RIPPER – Linux系统密码破解
- Linux系统密码文件位置
/etc/passwd- 所有用户可读
- 包含用户基本信息:用户名、UID、GID、home目录、shell等
- 格式:
username:x:UID:GID:comment:home_directory:shell,其中x表示密码存在shadow文件中
/etc/shadow- 只有root可读
- 存储加密后的密码信息
- 包含:用户名、加密密码、密码修改时间、有效期等
- 格式:
username:encrypted_password:last_changed:min:max:warn:inactive:expire
- 为什么要分开存放?
- 安全性考虑:避免普通用户接触加密密码
- 防止密码哈希被收集用于破解
- 加密算法标识
-
$1$表示使用MD5加密 -
$5$表示使用SHA-256加密 -
$6$表示使用SHA-512加密例如,当我输入
sudo cat /etc/shadow后,显示的输出是kali:$y$j9T$mnL009D1ldxBLjxgEtTE/$...:::,这说明我的系统用的是Yescrypt加密算法。其中,kali是用户名,j9T是算法参数(成本因子),mnL009D1ldxBLjxgEtTE/是密码盐,紧随其后的才是实际的密码哈希值。密码盐的作用是防止彩虹表攻击,同时即使两个用户使用相同密码,由于盐不同,最终的哈希值也不同,从而增加破解难度。
- unshadow工具
- 用于合并passwd和shadow文件
- 命令
unshadow passwd shadow > unshadowed.txt会将两个文件合并成一个文件 - 因为
john等密码破解工具需要同时获取用户信息和密码哈希,因此合并后格式便于密码破解工具处理 - 分开存储是为了系统安全,合并是为了密码审计。这种操作应该只在安全测试环境使用
- John the Ripper (john)命令
john --wordlist=/usr/share/john/password.lst --rules unshadowed.txtwordlist=/usr/share/john/password.lst:指定使用的密码字典文件, 字典包含常用密码列表 -rules:启用密码变形规则, 会对字典中的每个词进行变形。例如:将'o'变成'0', 添加数字到末尾,大小写变换等。unshadowed.txt:之前用unshadow合并的文件
john --show unshadowed.txt显示已经破解的密码