THM学习笔记——网络黑客简介(1)

子域名枚举

子域名枚举是查找域的有效子域名的过程。

这样做是为了扩大我们的攻击面,发现更多潜在的漏洞。

我们将探讨三种不同的子域名枚举方法:暴力破解、OSINT(开源情报)和虚拟主机。

SSL/TLS证书

当由CA(证书颁发机构)为域创建SSL/TLS(安全套接层/传输层安全性)证书时,CA参与了所谓的“证书透明度(CT)日志”。这些是公开可访问的日志,记录了为域名创建的每个SSL/TLS证书。证书透明度日志的目的是阻止恶意和意外制作的证书被使用。我们可以利用这项服务来发现属于域的子域名,像 https://crt.shEntrust Certificate Search - Entrust, Inc. 这样的网站提供了一个可搜索的证书数据库,显示当前和历史结果。

搜索引擎

搜索引擎包含数万亿链接到超过十亿网站的链接,这可以是查找新子域名的绝佳资源。在像Google这样的网站上使用高级搜索方法,比如site:过滤器,可以缩小搜索结果。例如,“-site:www.domain.com site:*.domain.com”只会包含指向域名domain.com的结果,但排除了任何指向www.domain.com的链接;因此,它只显示属于domain.com的子域名。

DNS暴力破解

DNS(域名系统)暴力破解是尝试从预定义的常用子域名列表中尝试数十、数百、数千甚至数百万个不同可能的子域名的方法。由于这种方法需要大量请求,我们使用一个名为dnsrecon的工具来执行此操作。

使用Sublist3r自动化

为了加速OSINT子域名发现的过程,我们可以利用像 Sublist3r 这样的工具自动化上述方法。

虚拟主机

一些子域名并不总是托管在公共可访问的DNS结果中,例如Web应用程序的开发版本或管理门户。相反,DNS记录可能存储在私有DNS服务器上,或者记录在开发者的机器上的/etc/hosts文件(对于Windows用户,是c:\windows\system32\drivers\etc\hosts文件),该文件将域名映射到IP地址。

由于Web服务器可以从一个服务器上托管多个网站,当客户端请求网站时,服务器知道客户端从Host头中想要哪个网站。我们可以利用这个主机头,通过更改它并监视响应,以查看是否发现了新的网站。

与DNS暴力破解类似,我们可以通过使用常用子域名的单词列表来自动化此过程。

身份验证绕过

用户名枚举

网站错误消息是构建我们的有效用户名列表的重要资源。

如果尝试输入用户名 admin 并在其他表单字段中填入虚假信息,您会看到我们得到错误 帐户使用此用户名已存在。我们可以利用此错误消息的存在来生成一个系统中已注册的有效用户名列表,使用下面的ffuf工具。ffuf工具使用一个常用用户名列表来检查是否有匹配。

user@tryhackme**$** ffuf -w /usr/share/wordlists/SecLists/Usernames/Names/names.txt -X POST -d "username=FUZZ&email=x&password=x&cpassword=x" -H "Content-Type: application/x-www-form-urlencoded" -u http://MACHINE_IP/customers/signup -mr "username already exists"

在上面的例子中,-w 参数选择计算机上包含我们将要检查的用户名列表的文件位置。-X 参数指定请求方法,这将默认为GET请求,但在我们的示例中是POST请求。-d 参数指定我们将要发送的数据。在我们的示例中,我们有用户名、电子邮件、密码和确认密码字段。我们将用户名的值设置为 FUZZ。在ffuf工具中,FUZZ关键字表示我们的单词列表内容将被插入请求中的位置。-H 参数用于向请求添加额外的头。在这种情况下,我们设置Content-Type以便Web服务器知道我们正在发送表单数据。-u 参数指定我们正在发出请求的URL,最后,-mr 参数是页面上我们要查找的文本,以验证我们是否找到了有效的用户名。

暴力破解

暴力破解攻击是一种自动化的过程,尝试一组常用密码,要么针对单个用户名,要么像在我们的情况下,针对用户名列表。

user@tryhackme**$** ffuf -w valid_usernames.txt:W1,/usr/share/wordlists/SecLists/Passwords/Common-Credentials/10-million-password-list-top-100.txt:W2 -X POST -d "username=W1&password=W2" -H "Content-Type: application/x-www-form-urlencoded" -u http://MACHINE_IP/customers/login -fc 200

这个ffuf命令与任务2中的前一个命令有点不同。之前我们使用了 FUZZ 关键字来选择数据从单词列表中将被插入请求的位置,但因为我们使用多个单词列表,我们必须指定我们自己的FUZZ关键字。在这个例子中,我们为我们的有效用户名列表选择了 W1,为我们将尝试的密码列表选择了 W2。多个单词列表再次由 -w 参数指定,但用逗号分隔。为了进行正面匹配,我们使用 -fc 参数检查HTTP状态代码是否为200以外的代码。

逻辑缺陷

什么是逻辑缺陷?

有时身份验证过程包含逻辑缺陷。逻辑缺陷是指应用程序的典型逻辑路径被黑客绕过、规避或操纵的情况。逻辑缺陷可能存在于网站的任何区域。

逻辑缺陷示例

下面的模拟代码示例检查客户端正在访问的路径是否以/admin开头,如果是,然后进一步检查客户端是否实际上是管理员。如果页面不以/admin开头,则向客户端显示页面。

if( url.substr(0,6) === '/admin') { # Code to check user is an admin } else { # View Page }

因为上面的PHP代码示例使用了三个等号(===),它正在寻找字符串的精确匹配,包括相同的大小写字母。该代码存在逻辑缺陷,因为未经身份验证的用户请求 /adMin 将不会检查其权限并显示页面,完全绕过了身份验证检查。

Cookie篡改

检查并编辑Web服务器在您的在线会话期间设置的Cookie可能会产生多种结果,如未经身份验证的访问、访问其他用户的帐户或提升的权限。

明文

某些Cookie的内容可以是明文的,很明显它们的作用是什么。例如,如果这些是成功登录后设置的Cookie:

Set-Cookie: logged_in=true; Max-Age=3600; Path=/

Set-Cookie: admin=false; Max-Age=3600; Path=/

我们看到一个Cookie(logged_in),似乎控制用户当前是否已登录,另一个(admin),控制访客是否具有管理员权限。根据这个逻辑,如果我们改变Cookie的内容并发出请求,我们将能够改变我们的权限。

哈希

有时Cookie值可能看起来像一长串随机字符;这些被称为哈希,是原始文本的不可逆表示。以下是一些您可能会遇到的示例:

原始字符串哈希方法输出
1md5c4ca4238a0b923820dcc509a6f75849b
1sha-2566b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b
1sha-5124dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a
1sha1356a192b7913b04c54574d18c28d46e6395428ab

从上表可以看出,相同输入字符串的哈希输出可能会根据使用的哈希方法而显著不同。尽管哈希是不可逆的,但每次都会生成相同的输出,这对我们很有帮助,因为服务如https://crackstation.net/会保留数十亿哈希及其原始字符串的数据库。

编码

编码与哈希类似,因为它创建了一个看似随机的文本字符串,但实际上编码是可逆的。因此,人们可能会问,编码的意义何在?编码允许我们将二进制数据转换为易于阅读的文本,可以轻松安全地传输到仅支持纯文本ASCII字符的介质上。

常见的编码类型有base32,它将二进制数据转换为A-Z和2-7的字符,以及base64,它使用a-z、A-Z、0-9、+、/和等号进行填充。

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值