0


安全入门day.02

一、环境部署

1、windows版本

这里使用小皮面板部署网页

小皮面板8.1版本下载链接:

https://public.xp.cn/upgrades/phpStudy_64.zip

小皮面板2018版本下载链接:

http://public.xp.cn/upgrades/PhpStudy2018.zip

(1)点击安装程序开始安装,在自定义选项中修改安装位置,根据自己实际安装位置设定,作者这里安装在C盘作为演示

(2)点击立即安装,等待进度条走完

(3)点击安装完成执行程序

(4)如果出现以下界面就是安装成功了

(5)根据设定的软件安装位置,部署网站,软件根目录下面有3个文件夹,第一个COM文件夹是小皮面板的配置文件,第二个Extensions文件夹是存放已经安装的软件环境,例如php、mysql和Apache等;第三个WWW文件夹是存放网页的地方,将想部署的网页放在WWW文件夹里

(6)这里以DVWA靶场作为案例,将DVWA解压缩后放在WWW文件夹里

    然后根据资源地址编写网页访问地址,WWW文件夹对应localhost、DVWA对应WWW下的文件夹、然后是文件夹下的资源
http://localhost/DVWA-2.3/setup.php
    注:2018版本小皮的界面与8.1版本不相同,2018版本不能修改mysql和web中间件的版本。并且2018版本WWW文件夹在PHPTutorial目录下,但是实际的访问地址是相同的。

    在浏览器中访问该资源地址,只要出现界面就是搭建成功

2、Linux版本

    在linux中需要根据linux的不同发行版运行不同的脚本
Centos安装脚本
yum install -y wget && sudo wget -O install.sh https://dl.xp.cn/dl/xp/install.sh && sudo bash install.sh

Ubuntu安装脚本
sudo wget -O install.sh https://dl.xp.cn/dl/xp/install.sh && sudo bash install.sh

Debian安装脚本
sudo wget -O install.sh https://dl.xp.cn/dl/xp/install.sh && sudo bash install.sh
    运行完成脚本后会出现一个访问地址,就可以在浏览器中进行图形化管理,这里以Ubuntu为例进行演示。

(1)执行安装脚本

(2)安装完成

(3)根据面板地址访问管理面板,本地虚拟机访问内网面板地址,云主机访问外网面板地址

(4)创建网站

按照要求填写数据,这里可以得到安装地址是根目录

根据域名或者IP地址编写访问地址,这里域名需要自己在C:\Windows\System32\drivers\etc\hosts文件中写出域名与IP地址的对应关系(有可能所设域名是一个已备案的网站),然后根据域名访问资源或者也可以根据IP地址访问资源

www.test.com
(虚拟机演示)
http://192.168.30.130/

二、WEB应用组成角色名词

1、开发语言

    WEB应用开发语言是指用于开发Web应用程序的编程语言和技术栈。这些语言和技术栈为开发者提供了构建、部署和维护Web应用程序所需的各种工具和功能。常见的Web应用程序的编程语言有asp、php、aspx、jsp、java、python、ruby、go、html、javascript等。

2、程序源码

    Web应用程序源码是构建和定义Web应用程序的关键组成部分,它是一系列使用各种编程语言编写的指令和代码集合。这些代码定义了Web应用程序的结构、功能、样式以及用户交互方式。

3、中间件容器

    中间件是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。它处在操作系统和更高一级应用程序之间,将应用程序运行环境与操作系统隔离,使得应用程序开发者不必为更多系统问题忧虑,而直接关注于应用程序在解决问题上的能力。常见的中间件有IIS、Apache、Nginx、Tomcat、Weblogic、Jboos、glasshfish等。

4、数据库

    数据库是一个以有组织的方式存储的数据集合,也被称为数据存储库(Data Store)。它能够存储大量结构化和非结构化的数据,包括文本、数字、图像、音频等各种类型的信息。常见的数据库有Access、Mysql、Mssql、Oracle、db2、Sybase、Redis、MongoDB等。

5、服务器操作系统

    服务器操作系统是安装在大型计算机上的操作系统,主要用于管理服务器硬件和软件资源,以及向多个程序提供服务。它是企业IT系统的基础架构平台,也是按应用领域划分的三种操作系统之一(另外两种是桌面操作系统和嵌入式操作系统)。目前常见的服务器操作系统有Windows Server系列和Linux系列。

6、第三方软件

    第三方软件指的是由该软件的原始生产商(或称为“官方”)以外的其他组织或个人开发的相关软件。这些软件通常针对某种软件或应用在功能上的不足或漏洞进行开发,以提供额外的功能、优化或改进。例如phpmyadmin、VNC、Openssh等。

三、WEB应用安全漏洞分类

1、SQL注入

    SQL注入是一种网络安全攻击手段,具体指的是web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,从而在管理员不知情的情况下实现非法操作。这种攻击方式欺骗数据库服务器执行非授权的任意查询,从而进一步获取相应的数据信息。

2、文件安全

    文件安全是指确保文件中所保存的信息的完整性、机密性和可访问性得到妥善保护的过程。这包括防止未经授权的用户访问或修改文件内容,以及确保只有被授权的用户能够按照规定的权限访问文件。

3、RCE执行

    RCE,即远程命令执行(Remote Command Execution)或远程代码执行(Remote Code Execution),是一个安全术语,主要用于描述一种网络安全攻击方式。在网络安全领域,RCE指的是攻击者通过某种手段,在远程计算机上执行特定的命令或代码,从而实现对目标系统的控制或非法操作。

4、XSS跨站

    XSS跨站,全称跨站脚本(Cross Site Scripting),为避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。这是一种网络安全攻击手段,具体指的是恶意攻击者往Web页面里插入恶意Script代码(通常是JavaScript),当用户浏览该页面时,嵌入在Web页面中的恶意代码会被执行,从而达到攻击用户的目的。

5、CSRF/SSRF/CRLF

(1)CSRF

    CSRF是一种网络攻击方式,攻击者利用用户在已登录的Web应用程序上的会话(Session)信息,通过伪造用户请求的方式,在用户不知情的情况下执行恶意操作。这种攻击也被称为“One-Click Attack”或“Session Riding”。

(2)SSRF

    SSRF是一种安全漏洞,允许攻击者构造恶意的请求,由服务器端发起,从而攻击内部网络或本地系统。这种攻击利用了服务器未对外部输入进行充分验证的漏洞。

(3)CRLF

    CRLF注入攻击是一种常见的网络安全漏洞,攻击者会利用应用程序对用户输入数据的不严格验证,通过注入恶意的CRLF序列来改变数据的处理方式,从而执行未经授权的操作。这种攻击方式通常发生在Web应用程序中,攻击者可以通过向请求行或首部字段注入恶意的CRLF序列,来注入一些额外的首部字段或报文主体,并在响应中输出。这可能会导致数据泄露、会话劫持、响应篡改等严重后果。

6、反序列化

    反序列化攻击(Deserialization Vulnerability)是一种网络安全攻击方式,它利用了应用程序在反序列化操作中的漏洞,允许攻击者将恶意构造的序列化对象注入到应用程序中,从而执行未授权的操作或以应用程序的身份执行恶意代码。

7、逻辑越权

    逻辑越权是一种安全漏洞,它指的是在用户认证和授权过程中,由于逻辑处理不当,导致用户能够跳过自己的权限限制,去访问或操作同等级用户或者上级用户的资源。这种漏洞通常是由于开发人员在编写程序时,对数据的增删改查请求处理不当,过分相信客户端传输的数据,未进行严格的权限判定而导致的。

8、未授权访问

    未授权访问(Unauthorized Access)是指用户或系统在没有获得合法授权的情况下,对受保护的资源、系统或服务进行了访问。这种访问行为违反了安全策略、权限控制或访问控制列表(ACL)的规定,可能导致数据泄露、服务中断、系统被滥用或恶意攻击等严重后果。

9、XXE/XML

(1)XXE(XML External Entity Injection)全称为XML外部实体注入,是一种针对应用程序解析XML输入类型的安全漏洞。当应用程序在解析XML数据时,如果允许引用外部实体,并且没有正确地限制或过滤这些外部实体的加载,就可能导致XXE漏洞的产生。

(2)XML(Extensible Markup Language)是一种标记语言,用于定义数据的结构和表示方法。它允许用户定义自己的标签和文档结构,以便更好地描述和传输数据。

10、弱口令

    弱口令(Weak Password)在网络安全领域中,指的是那些容易被猜测或破解的口令。这些口令通常缺乏足够的复杂性和随机性,使得攻击者能够轻易地通过暴力破解、字典攻击或其他技术手段获取访问权限。

四、WEB请求返回过程解析

1、过程解析

(1)HTTP协议流程

1)用户在浏览器中输入网址或点击链接,请求访问一个 HTTP 网站。

2)浏览器解析网址,获取主机名(域名)和端口号,默认为 80(HTTP 默认使用的端口)。

3)浏览器向 DNS 服务器发送一个 DNS 查询请求,以获取主机名对应的 IP 地址。

4)DNS 服务器返回主机名对应的 IP 地址给浏览器。

5)浏览器与服务器之间建立 TCP 连接。这个过程叫做 TCP 握手,包括三次握手(SYN、SYN-ACK、ACK)。在握手期间,浏览器和服务器之间协商连接参数。

6)完成 TCP 握手后,浏览器和服务器之间建立了一个 TCP 连接通道。

7)浏览器向服务器发送一个 HTTP 请求,包括请求的资源路径、请求头和可能的请求体。

8)服务器收到请求后,进行相应的处理,例如获取网页内容、执行服务器端脚本等。

9)服务器将处理结果封装成一个 HTTP 响应,包括响应头和响应体。

10)服务器将响应发送给浏览器,通过建立的 TCP 连接通道进行传输。

11)浏览器收到服务器发送的响应后,解析响应,根据响应中的内容进行相应的处理,例如渲染网页内容、执行 JavaScript 等。

12)完成页面加载和渲染后,用户可以在浏览器中查看和操作网页内容。

13)TCP 连接持续开放,可以进行后续的请求和响应交互。

(2)HTTPS协议流程

1)用户在浏览器中输入网址或点击链接,请求访问一个 HTTPS 网站。

2)浏览器解析网址,获取主机名(域名)和端口号,默认为 443(HTTPS 默认使用的端口)。

3)浏览器向 DNS 服务器发送一个 DNS 查询请求,以获取主机名对应的 IP 地址。

4)DNS 服务器返回主机名对应的 IP 地址给浏览器。

5)浏览器与服务器之间建立 TCP 连接。这个过程叫做 TCP 握手,包括三次握手(SYN、SYN-ACK、ACK)。在握手期间,浏览器和服务器之间协商连接参数。

6)完成 TCP 握手后,浏览器会给服务器发送一个加密通信准备就绪的消息。

7)服务器收到消息后,将自己的数字证书和公钥发送给浏览器。

8)浏览器收到服务器的证书后,开始进行证书验证。浏览器会检查证书是否由可信任的证书颁发机构签发,证书是否过期,域名是否与证书匹配等。如果验证通过,继续下一步;如果验证失败,浏览器会显示警告信息,提示用户存在安全风险。

9)如果证书验证通过,浏览器生成一个随机的对称密钥,使用服务器的公钥进行加密,并将加密后的密钥发送给服务器。

10)服务器收到浏览器发送的加密后的对称密钥后,使用自己的私钥进行解密,得到对称密钥。

11)浏览器和服务器都拥有了相同的对称密钥,用于后续的数据传输加密和解密。

12)浏览器向服务器发送一个加密的 HTTP 请求,包含请求的资源路径、请求头和可能的请求体。

13)服务器收到请求后,进行相应的处理,例如获取网页内容、执行服务器端脚本等。

14)服务器将处理结果封装成加密的 HTTP 响应,包括响应头和响应体,并使用之前协商好的对称密钥进行加密。

15)加密后的响应通过加密连接发送给浏览器。

16)浏览器收到加密的响应后,使用之前协商好的对称密钥进行解密。

17)浏览器解析响应,根据响应中的内容进行相应的处理,例如渲染网页内容、执行 JavaScript 等。

18)完成页面加载和渲染后,用户可以在浏览器中查看和操作网页内容。

2、名词解释

(1)请求数据包

    请求数据包是网络通信过程中的一种信息单元,用于将用户或应用程序的请求信息从发送端传输到接收端(如服务器)。这些数据包包含了请求的具体内容、目标地址以及其他控制信息,以确保数据包能够正确、高效地到达目的地。


请求数据包

(2)请求方法

    请求方法(Request Methods)是在网络通信中,特别是HTTP协议中,用于指定客户端希望服务器对资源执行的操作类型的一种标识。常见的请求方法有GET、POST、PUT、DELETE、HEAD、OPTIONS等。

(3)请求头

    请求头(Request Headers)是HTTP请求消息中的一个重要组成部分,它包含了关于请求的各种元数据信息。当客户端(如浏览器)向服务器发送HTTP请求时,除了请求行(Request Line)和可选的请求体(Request Body)之外,还会包含一系列请求头字段。这些字段为服务器提供了关于请求的额外信息,有助于服务器正确处理和响应请求。

1)Accept:告诉服务器客户端能够接受的媒体类型(MIME类型),如

text/html

application/json

等。这有助于服务器根据客户端的偏好返回适当格式的响应。

2)Accept-Encoding:指示客户端支持的内容编码类型,如gzip、deflate等。这允许服务器将响应的内容进行压缩,以减少传输的数据量,提高传输效率。

3)Accept-Language:表明客户端优先接受的自然语言。这有助于服务器根据客户端的语言偏好返回相应的内容,实现内容的国际化。

4)Authorization:包含客户端发送给服务器的认证信息,如Bearer token、Basic authentication等。这用于验证客户端的身份,确保请求的安全性。

5)Cache-Control:指定请求和响应遵循的缓存机制。它可以控制缓存的行为,如是否缓存响应、缓存的有效期等。

6)Connection:指定客户端与服务器之间连接的选项,如

keep-alive

表示保持连接以便后续请求,

close

表示请求结束后关闭连接。

7)Content-Length(通常出现在POST或PUT请求中):表示请求体的长度(字节数)。这有助于服务器读取完整的请求体内容。

8)Content-Type:表示请求体的媒体类型。这告诉服务器请求体中包含的数据类型,如

application/json

application/x-www-form-urlencoded

等。

9)Cookie:包含由服务器发送的cookie信息,这些信息会在后续的请求中自动包含,以便服务器识别用户或保存状态信息。

10)Host:指定请求的资源所在的服务器的主机名和端口号。这是HTTP/1.1协议中必须包含的请求头字段。

11)Referer:指示当前请求是从哪个页面链接过来的。这有助于服务器了解请求的上下文,进行日志记录、统计分析等。

12)User-Agent:包含发出请求的客户端(如浏览器)的类型、版本、操作系统等信息。这有助于服务器了解客户端的环境,进行内容协商、兼容性处理等。

(4)请求体

    请求体(Request Body)是HTTP请求中的一个部分,用于在客户端向服务器发送请求时,携带要提交给服务器的数据。当使用POST、PUT、PATCH等HTTP请求方法时,通常会包含请求体。请求体可以包含各种类型的数据,如表单数据、JSON、XML等,具体取决于请求的内容类型和服务器端的期望。


请求体

(5)响应包

    响应包(Response Packet)是在网络通信中,特别是在HTTP协议中,服务器对客户端的请求做出的回应所形成的数据包。当客户端(如Web浏览器)向服务器发送请求后,服务器会处理该请求,并将处理结果封装成一个响应包返回给客户端。响应包包含了服务器对请求的处理结果,是客户端获取所需数据或服务的直接来源。


响应包

(6)响应头

    响应头紧随状态行之后,用于提供有关响应的额外信息,如内容类型、内容长度、服务器类型、缓存策略等。这些信息对于客户端来说非常重要,因为它们可以帮助客户端正确地处理响应内容。

1)Server:指明了处理请求的服务器软件名称和版本号。例如,

Server: Apache/2.4.41

表示服务器使用的是Apache HTTP Server,版本号为2.4.41。

2)Date:表示响应生成的日期和时间(即服务器发送响应的日期和时间)。这个字段有助于客户端了解响应的新鲜度。

3)Content-Type:表示响应体的媒体类型。这告诉客户端实际返回的内容类型,如

text/html

application/json

等。客户端会根据这个字段来决定如何解析和展示响应体内容。

4)Content-Length:表示响应体的长度(以字节为单位)。这个字段有助于客户端了解需要接收多少数据,以便正确读取和解析响应体。

5)Content-Encoding:如果响应体被服务器压缩,这个字段会指明使用的压缩编码类型,如

gzip

deflate

等。客户端需要根据这个字段来解压响应体内容。

6)Cache-Control:指定了响应的缓存策略。这个字段包含了多个指令,用于控制缓存的行为,如是否缓存响应、缓存的有效期等。

7)Connection:表示服务器是否希望保持连接打开,以便后续的请求可以通过同一个连接发送。

Keep-Alive

表示保持连接,而

close

表示请求结束后关闭连接。

8)ETag:是一个响应头的实体标签(Entity Tag)的标识符,它代表了一个特定版本的资源的标识符。这个字段用于缓存验证,当客户端发送请求时,可以在请求头中包含

If-None-Match

字段,并带上ETag的值,如果资源未发生变化,则服务器可以返回304 Not Modified状态码,而不必发送完整的响应体。

9)Last-Modified:表示资源的最后修改时间。这个字段有助于客户端了解资源的更新情况,以便在需要时重新请求资源。

10)Set-Cookie:如果服务器希望在客户端存储一些信息(如会话ID),它可以通过

Set-Cookie

字段来发送一个cookie。客户端会在后续的请求中自动包含这个cookie,以便服务器识别用户或保存状态信息。

11)Location:当响应状态码为3xx(重定向)时,这个字段会指明重定向的目标URL。客户端需要根据这个字段来发送新的请求到指定的URL。

12)Accept-Ranges:用于告知客户端服务器是否能处理范围请求,以指定获取服务器某部分的资源。常见的值有

none

bytes

13)Age:资源缓存的年龄,也就是资源自缓存以来到现在已经过去了多长时间。这个字段有助于客户端了解缓存内容的新鲜度。

14)Vary:用于告知客户端响应可能会根据请求头中的某些字段的不同而有所变化。这有助于代理服务器和缓存服务器正确地缓存和分发响应内容。


响应头

(7)状态码

** ** 状态码(Status Code)是HTTP协议中用于表示服务器对客户端请求响应结果的一种简短表示。状态码是一个三位数的整数,分为五个类别,每个类别都有其特定的含义和用途。当客户端向服务器发送HTTP请求时,服务器会根据请求的处理情况返回一个状态码,客户端根据这个状态码来判断请求是否成功,或者需要采取什么样的进一步操作。

1)1xx(信息性状态码):这些状态码表示请求已被接收,正在处理中,但还没有完成。这类状态码通常不会被实际使用,因为它们只是用于表示请求的中间状态。

2)2xx(成功状态码):这类状态码表示请求已成功被服务器接收、理解并接受。其中,

200 OK

是最常见的成功状态码,表示请求已成功处理并返回了请求的资源。

3)3xx(重定向状态码):这类状态码表示客户端需要采取进一步的操作才能完成请求。例如,

301 Moved Permanently

表示请求的资源已被永久移动到新的URL,客户端应使用新的URL发起请求;

302 Found

(虽然通常被误用为临时重定向,但标准定义上是用于找到资源但临时从不同的URI响应请求)和

307 Temporary Redirect

都表示请求的资源暂时位于不同的URI,客户端应临时使用新的URI进行访问。

4)4xx(客户端错误状态码):这类状态码表示请求包含语法错误或无法完成请求。例如,

404 Not Found

表示请求的资源在服务器上不存在;

403 Forbidden

表示服务器理解请求但拒绝执行;

400 Bad Request

表示请求报文中存在语法错误。

5)5xx(服务器错误状态码):这类状态码表示服务器在处理请求的过程中发生了错误。例如,

500 Internal Server Error

表示服务器遇到了一个未曾预料到的情况,导致它无法完成对请求的处理;

502 Bad Gateway

表示作为网关或代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应;

503 Service Unavailable

表示由于临时的服务器维护或过载,服务器当前无法处理请求。

(8)代理服务器

    代理服务器是一种网络服务器,它充当客户端和目标服务器之间的中间人,接受来自客户端的请求,并将其转发给目标服务器,然后将目标服务器的响应返回给客户端。

标签: 安全 web安全

本文转载自: https://blog.csdn.net/mxxcxy/article/details/140462030
版权归原作者 晴空星雨 所有, 如有侵权,请联系我们删除。

“安全入门day.02”的评论:

还没有评论