TryHackMe 第6天 | Web Fundamentals (一)

这一部分我们要简要介绍以下 Web Hacking 的基本内容,预计分三次博客。

在访问 Web 应用时,浏览器提供了若干个工具来帮助我们发现一些潜在问题和有用的信息。

比如可以查看网站源代码。查看源代码可以 右键 网页,然后选择 查看网站源代码:

或者可以在 URL 前加上 view-source: 也能查看源代码:

除了能查看源代码,浏览器一般都有开发者工具,快捷键是 F12。在开发者工具中,最常用的就是 Inspector、Debugger 和 Network 模块了。

Inspector
​​

Debugger

Network

这些是浏览器中比较基本和常见的工具,接下来将从常见的 Web 漏洞上进行讲解。

Content discovery

在 Web 应用中的内容包括文件、视频、备份、网站、图片等等。但是并不是所有的内容都会展示在用户面前,或者说被允许公开访问,比如供内部员工使用的页面、网站配置文件、网站备份文件等。

有三种方式可以实现 内容发现:手动、自动、OSINT (Open-source intelligence,开源情报)。

手动

手动实现 内容发现 有5个方式:

  • Robots.txt
  • 图标
  • Sitemap.xml
  • HTTP 头
  • 网站框架
Robots.txt

Robots.txt 是一份文档,它告诉搜索引擎哪些网页是否能显示在搜索引擎结果中,或者说禁止特定搜索引擎抓取网站。该文件为渗透测试人员提供了一份很好的清单,因为它列出了网站所有者不希望渗透测试人员发现的网站。

Favicon

Favicon 是浏览器地址栏或标签页中显示的一个小图标,用于打造网站品牌。

有时候开发人员在使用框架搭建网站时,框架的 favicon 会被遗留下来。如果开发人员忘记替换这些图标,则会为渗透测试人员提供网站框架的线索。

OWASP 提供了一个常用框架图标的数据库: OWASP favicon database - OWASP

可以通过如下命令获取图标的 md5 值:curl {图标URL地址} | md5sum

将图标的 md5值 交给 OWASP 数据库中搜索,即可得到结果

Sitemap.xml

和 robots.txt 文件限制搜索引擎可以查看的内容不同,sitemap.xml 提供了网站所有者希望在搜索引擎上列出的每个文件的列表。这些文件有时会包含网站中比较难浏览到的区域,甚至会列出当前网站不再使用但仍然在幕后工作的一些旧网页。

HTTP 头

当我们向 Web 服务器发出请求时,服务器会返回各种 HTTP 头。HTTP 头有时会包含一些有用的信息,如 Web 服务器软件和可能使用的编程语言。

比如下图就可以看出 Web 服务器软件为 Nginx,使用了 PHP 语言。

user@machine$ curl http://MACHINE_IP -v # curl -v 表示启用了 verbose 模式,它将输出 HTTP 头
*   Trying MACHINE_IP:80...
* TCP_NODELAY set
* Connected to MACHINE_IP (MACHINE_IP) port 80
> GET / HTTP/1.1
> Host: MACHINE_IP
> User-Agent: curl/7.68.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Server: nginx/1.18.0 (Ubuntu)
< X-Powered-By: PHP/7.4.3
< Date: Mon, 19 Jul 2021 14:39:09 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
网站框架

一旦获取了网站框架的线索,就可以找到该框架的网站,在这个网站中,我们可以了解到更多关于框架的信息和其他信息,从而可能发现更多内容。

OSINT (开源情报)

开源情报 指一些可以帮助发现目标网站信息的外部资源。常见的 开源情报 有如下几种:

  • Google hacking / Dorking
  • Wappalyzer
  • Wayback machine
  • Github
  • S3 buckets
Google hacking / Dorking

Google hacking / Dorking 利用了 Google 的高级搜索引擎功能,用户可以借助该功能筛选出特定结果。

FilterExample描述
sitesite:tryhackme.com只返回指定网站地址的结果
inrulinurl:admin返回 URL 中包含指定单词的结果
filetypefiletype:pdf返回特定文件扩展名的结果
intitleintitle:admin返回网站标题中包含指定单词的结果

Wappalyzer

Wappalyzer 是一款在线工具和浏览器扩展,它可以帮助识别网站使用的技术,比如 框架、CMS、编程语言等。

Wayback machine

Wayback machine (Wayback Machine (archive.org)) 是一个可以追溯到上世纪 90 年代末的网站历史档案。用户可以搜索一个域名,它就会显示这个域名上的历史页面。通过该档案有助于发现当前网站上仍然在运行的旧网页。

Github

Git 是一个版本控制系统,可以跟踪项目中文件的更改,使团队工作更加容易。当团队中成员完成修改之后,成员们会以消息的形式将这些修改提交,推送到一个中心位置(即版本库),其他成员就可以到版本库里把这些修改拉到自己的本地机器上。

Github 是互联网上的托管版 Git,仓库可以设置为公开或私有。我们可以使用 Github 的搜索功能查找公司名称或网站名称,尝试找到属于目标的资源库,比如源代码、密码或其他尚未发现的内容。

S3 Buckets

S3 Buckets 是亚马逊 AWS 提供的一种存储服务,允许人们将文件甚至静态网站内容存在云中,国内的 阿里云、腾讯云也提供了类似服务,它可以提供 HTTP/HTTPS 访问。文件所有者可以设置访问权限,使文件公开、私有甚至可写。假如访问权限设置不正确,可能会使本不应向公众开放的文件被允许访问。

S3 Buckets 的格式是 http(s)://{name}.s3.amazonaws.com ,其中 name 由所有者决定,比如 http(s)://tryhackme-assets.s3.amazonaws.com。

发现 S3 Buckets 的方法有很多,比如通过网站源代码,通过Github存储库中查找 URL,甚至通过自动化工具来查找。S3 Buckets 往往有常见命名,比如 {name}-assets、 {name}-www、 {name}-public、 {name}-private 等,我们可以从这些常见命名入手,进行自动化查找。

自动

这就需要借助工具来实现自动发掘,这种工具通过对网站发送成百上千甚至上百万的请求来检查网站上是否存在某些文件或目录,使我们可以访问到以前不知道的资源。在这个过程中,我们需要用到一个叫 词表 (wordlist) 的东西。

词表 如同字典,它是包含了一长串常用单词的文本文件。工具使用词表中的单词来逐个检索,进而找到资源。所以,自动化工具的效率取决于词表的质量。

自动化工具有很多,用于 信息收集 的自动化工具一般为 ffuf、dirb 和 gobuster。

Subdomain enumeration

子域名枚举可以帮助扩大攻击面,尝试发现到更多的潜在攻击点。子域名枚举可以通过:暴力、OSINT 和 虚拟主机 来获得。

OSINT

SSL/TLS 证书

当 CA 为域名颁发 SSL/TLS 证书时,CA 会将其写入 Certificate Transparency (CT,证书透明度) 日志,这些日志可公开访问为域名创建的每个 SSL/TLS 证书。CT 日志的目的是防止恶意和意外制作的证书被使用,我们也可以借助该日志发现属于某个域名的子域名。

crt.sh | Certificate Search  和 Entrust Certificate Search - Entrust, Inc. 提供了可搜索的证书数据库。

搜索引擎

前面提到过 Google hacking 语法,该语法不仅可以进行 内容发现,还能进行子域名枚举。

在 hacking 语法中,site: 过滤词用于过滤出指定域名的网站,我们可以使用该过滤词构造出如下搜索请求:site:*.tryhackme.com -site:www.tryhackme.com 。这个请求表示,过滤出域名为 tryhackme.com 的网站,但排除 www.tryhackme.com 这个首页网站。经过这番查询,返回的就是可搜索到的子域名网站了。

Sublist3r

这个严格意义上不能算是 OSINT,更像是自动化工具。Sublist3r 这一工具可以用于加快 OSINT 的利用流程,自动执行使用 OSINT 探索子域名的过程。

暴力

暴力搜索 子域名 除了使用自动化工具遍历 URL,还可以遍历 DNS。因为大部分企业不会监控 DNS 服务器,所以我们可以从 DNS 服务器返回的记录中获取更多信息。

比如 dnsrecon 工具就可以通过爆破 DNS 服务器获取到网站子域名:

虚拟主机

由于 Web 服务器可以在一台服务器上托管多个网站,因此当客户端请求访问一个网站时,服务器会通过 HTTP 头中的 Host 字段知晓客户端想要访问哪个网站。基于此,我们可以通过更改 Host 字段并监控响应来确认是否发现了新的子域名。

一个个手动尝试肯定很耗时,因此我们也需要借助自动化工具来完成这一过程。

在 ffuf 工具中,我们就可以实现这样的遍历:

其中,-w 指定了要使用的词表,-H 表示添加/编辑了 Host 字段,-u 指定了目标URL。开始后,会将词表中遍历的内容放到 FUZZ 中进行处理。

使用上述命令会输出大量结果,有些结果可能不是我们想要的,因此需要做一点过滤。

我们可以通过 -fs 来过滤指定页面大小值的页面,这样结果就少了很多。

Authentication bypass

Authentication bypass 是比较严重的漏洞了,它往往会导致用户个人数据泄露。这里的 bypass 包括但不限于 绕过、破坏或混淆网站身份验证。

暴力

当我们碰到一个身份验证界面,比如登录时,我们需要先知道用户名,再去使用密码登录。因此首先获取一个有效的用户名列表是十分有用的。

有一些网站在注册用户时,面对重复的用户名会进行提示,可以根据这个提示来获取当前已有用户名。

我们可以使用自动化工具来完成这一任务,此处我们继续使用 ffuf:

其中除了之前讲到的参数,-X 表示请求方法,像登录注册这种表单提交一般都是用 POST 方法的;-d 指定了我们要发送的数据;-mr 用于过滤,其保留了出现要查找的文本的页面。

通过上面的命令,可以得到一个用户名列表,假设我们将其保存为 valid_username.txt。那么接下来就是对这些用户名进行密码爆破。

注意到 -d 中要传输的数据,因为之前我们只有一个爆破点,因此用一个 FUZZ 即可指明爆破位置。而现在我们不仅要使用 用户名,还要爆破 密码,所以给它们各自一个代号,此处分别为 w1 和 w2。同样的,在 -w 指示使用的词表时,已经为词表对应了代号。-fc 用于过滤 HTTP 状态码不是 200 的页面。

最终得到用户名和其对应密码,这样就是一次身份验证的绕过。

逻辑缺陷

有些身份验证可能会包含逻辑缺陷。逻辑缺陷是指应用程序的逻辑路径被绕过、规避或操纵。

下面是一个逻辑缺陷的示例。

现在有一个页面用于重置密码,要想成功重置密码,首先需要知道要被重置密码的账户对应的邮箱地址。如果输入的电子邮件地址无效,则会收到一个错误信息。

假如我们只有用户名,无法成功爆破密码,就可以从重置密码入手。但是这看起来似乎无从下手,因为就算知道了邮箱地址,我们也不知道邮箱密码。

如上图所示,尽管我们知道有一个用户名为 robert,也知道重置密码的邮件已经发出,但无法知道邮箱密码的话也无法重置成功。

但此时我们注意到 URL,邮箱地址是跟随 URL 发送过去的,也就是说它使用 GET 请求方法发送,而用户名是通过 POST 方式传输过去的。

用 curl 命令复现前面的步骤,则获得下述命令:

其中,-H 表示指定 HTTP 头中的 Content-Type 字段,此处设置成 application/x-www-form-urlencoded 以使 Web 服务器正确理解我们发起的请求;-d 指定了要发送的数据,该数据会以 POST 的请求方式发送过去。

在后端收到请求时,会读取请求中的参数。在这个页面中,其使用了 PHP 的 $_REQUEST 函数来接收参数。 $_REQUEST 函数可以接收请求中的 GET 和 POST 参数,但如果 GET 和 POST 参数的名字一样,则优先选择 POST 参数。基于这个特性,我们修改 curl 命令:

不同之处在于,我们在 -d 传输的数据中添加了一个 email 参数,将该参数的地址设置为攻击者的邮箱地址。这样,当后端接收到请求后,发现 email 参数在 GET 和 POST 请求中都存在,那么就会选取 POST 参数,即攻击者的邮箱地址,那么重置密码的邮件也就发送给了攻击者。

可以看到响应中返回了这一串字,说明邮件已经发送到攻击者邮箱中。

Cookie tampering

之前提到过,HTTP 是无状态的,需要 Cookie 来使 Web 服务器识别用户身份和状态。

但是 Cookie 可以通过 HTTP 头篡改,因此假如我们窃取到某个用户 A 的 Cookie,就可以直接使用该 Cookie 登录上页面,欺骗 Web 服务器自己是用户 A。

或者,有些 Cookie 表示的是一种状态,假设有个页面有这样一个 Cookie:

Cookie: logged_in = false; admin = false

那么我们就可以将其中的 logged_in 和 admin 全部设置为 true,这样我们就能欺骗 Web 服务器我们已经以 admin 身份登录到当前页面上了。

大部分时候,Cookie 可能会被编码,常见的编码有 MD5、SHA-256、SHA-512、SHA1 等。此时要篡改的话,需要将篡改内容经过一次编码后再传给 Web 服务器。

还是上面的 Cookie,假如它经过了 Base64 编码,那我们需要传递给 Web 服务器下述字符串:bG9nZ2VkX2luPXRydWU7YWRtaW49dHJ1ZQ==。这一串字符串经过 Base64 解码后,就是 logged_in=true;admin=true。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/439387.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【复习】CSS中的选择器

文章目录 东西有点多 以实战为主选择器盒子模型 东西有点多 以实战为主 选择器 CSS选择器&#xff08;CSS Selectors&#xff09;是用于在HTML或XML文档中查找和选择元素&#xff0c;以便应用CSS样式的一种方式。 元素选择器&#xff08;Type Selector&#xff09; 选择所有…

探索 aMQTT:Python中的AI驱动MQTT库

文章目录 探索 aMQTT&#xff1a;Python中的AI驱动MQTT库背景介绍aMQTT是什么&#xff1f;如何安装aMQTT&#xff1f;简单库函数使用方法场景应用常见问题及解决方案总结 探索 aMQTT&#xff1a;Python中的AI驱动MQTT库 背景介绍 在物联网和微服务架构的浪潮中&#xff0c;MQ…

CSS3练习--电商web

免责声明&#xff1a;本文仅做分享&#xff01; 目录 小练--小兔鲜儿 目录构建 SEO 三大标签 Favicon 图标 布局网页 版心 快捷导航&#xff08;shortcut&#xff09; 头部&#xff08;header&#xff09; logo 导航 搜索 购物车 底部&#xff08;footer&#xff0…

2024年计算机视觉与艺术研讨会(CVA 2024)

目录 基本信息 大会简介 征稿主题 会议议程 参会方式 基本信息 大会官网&#xff1a;www.icadi.net&#xff08;点击了解参会投稿等信息&#xff09; 大会时间&#xff1a;2024年11月29-12月1日 大会地点&#xff1a;中国-天津 大会简介 2024年计算机视觉与艺术国际学术…

Redis --- 第三讲 --- 通用命令

一、get和set命令 Redis中最核心的两个命令 get 根据key来取value set 把key和value存储进去 redis是按照键值对的方式存储数据的。必须要先进入到redis客户端。 语法 set key value &#xff1a; key和value都是字符串。 对于上述这里的key value 不需要加上引号&#…

数据库概述(1)

课程主页&#xff1a;Guoliang Li Tsinghua 数据库在计算机系统中的位置 首先&#xff0c;数据库是在设计有大量数据存储需求的软件时必不可少可的基础。 最常见的是&#xff1a;我们通过app或者是浏览器来实现一些特定需求——比如转账、订车票。即引出背后的CS和BS两种网…

重学SpringBoot3-集成Redis(三)

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;三&#xff09; 1. 引入 Redis 依赖2. 配置 RedisCacheManager 及自定义过期策略2.1 示例代码&#xff1a;自定义过期策略 3. 配置…

如何使用ssm实现民族大学创新学分管理系统分析与设计+vue

TOC ssm763民族大学创新学分管理系统分析与设计vue 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不…

【rCore OS 开源操作系统】Rust 字符串(可变字符串String与字符串切片str)

【rCore OS 开源操作系统】Rust 语法详解: Strings 前言 这次涉及到的题目相对来说比较有深度&#xff0c;涉及到 Rust 新手们容易困惑的点。 这一次在直接开始做题之前&#xff0c;先来学习下字符串相关的知识。 Rust 的字符串 Rust中“字符串”这个概念涉及多种类型&…

【EXCEL数据处理】000017 案例 Match和Index函数。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000016 案例 Match和Index函数。使用的软件&#xff…

DenseNet算法:口腔癌识别

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 DenseNet算法结构 其基本思路与ResNet一致&#xff0c;但是它建立的是前面所有层和后面层的密集连接&#xff0c;它的另一大特色是通过特征在channel上的连接来实现特征重用。 二 设计理念 三…

成都跃享未来教育咨询有限公司抖音小店:引领教育咨询新风尚

在数字化浪潮席卷全球的今天&#xff0c;教育咨询行业正经历着前所未有的变革。成都跃享未来教育咨询有限公司&#xff0c;作为教育行业的一颗璀璨新星&#xff0c;凭借其前瞻性的教育理念与创新的运营模式&#xff0c;在抖音平台上开设了小店&#xff0c;不仅为广大学子及家长…

学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)

在线学籍管理平台系统 目录 基于SpringbootVUE的在线学籍管理平台系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大…

C++多态、虚函数以及抽象类

目录 1.多态的概念 2.多态的定义及实现 2.1多态的构成条件 2.1.1实现多态还有两个必要条件 2.1.2虚函数 2.1.3虚函数的重写/覆盖 2.1.4多态场景的题目 2.1.5虚函数重写的一些其他问题 2.1.5.1协变(了解) 2.1.5.2析构函数的重写 2.1.6override和final关键字 2.…

【Springer上传手稿记录】《Signal, Image and Video Processing》

Springer上传手稿记录 以signal&#xff0c;image and video proecessing为例上传手稿或图片时提示上传失败无法编译成pdf错误1&#xff1a;出现Unknown theoremstyle相关错误错误2&#xff1a;command Illegal错误3&#xff1a;command I found no style file 通用问题问题1&a…

CORE MVC 过滤器 (筛选器)《2》 TypeFilter、ServiceFilter

TypeFilter、ServiceFilter ServiceFilter vs TypeFilter ServiceFilter和TypeFilter都实现了IFilterFactory ServiceFilter需要对自定义的Filter进行注册&#xff0c;TypeFilter不需要 ServiceFilter的Filter生命周期源自于您如何注册&#xff08;全局、区域&#xff09;&…

【AI学习】Mamba学习(二):线性注意力

上一篇《Mamba学习&#xff08;一&#xff09;&#xff1a;总体架构》提到&#xff0c;Transformer 模型的主要缺点是&#xff1a;自注意力机制的计算量会随着上下文长度的增加呈平方级增长。所以&#xff0c;许多次二次时间架构&#xff08;指一个函数或算法的增长速度小于二次…

SpringBoot框架下校园资料库的构建与优化

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

10.5今日错题解析(软考)

目录 前言面向对象技术——设计模式的应用场景计算机组成与体系结构——逻辑运算 前言 这是用来记录我备考软考设计师的错题的&#xff0c;今天知识点为设计模式的应用场景、逻辑运算&#xff0c;大部分错题摘自希赛中的题目&#xff0c;但相关解析是原创&#xff0c;有自己的…

【Python】Dejavu:Python 音频指纹识别库详解

Dejavu 是一个基于 Python 实现的开源音频指纹识别库&#xff0c;主要用于音频文件的识别和匹配。它通过生成音频文件的唯一“指纹”并将其存储在数据库中&#xff0c;来实现音频的快速匹配。Dejavu 的主要应用场景包括识别音乐、歌曲匹配、版权管理等。 ⭕️宇宙起点 &#x1…