[CyberSecurityLearning 52] Análisis de seguridad de la arquitectura web (mecanismo de trabajo web, protocolo HTTP)

Tabla de contenido

Mecanismo de trabajo web

Página web, sitio web

Contenedor web

Páginas estáticas

Servidor de middleware

La aparición de bases de datos

Construye un sitio web

Descripción general del protocolo HTTP

Visión de conjunto

Características

URL

Análisis de mensajes HTTP

Modo de trabajo HTTP

PEDIDO

Solicitar mensaje, de la siguiente manera

experimentar

RESPUESTA

El mensaje de respuesta es el siguiente:

código de estado

Campo principal

Las condiciones de la estrategia del mismo origen

Explorando la misma estrategia de origen

Prepara dos páginas


Por que estudiar esta lección

Aprendemos el curso de pruebas de penetración, principalmente para aplicaciones web, por lo que necesitamos una cierta comprensión de la arquitectura web.

Navega por todas las cosas en Internet:

                                  

Mecanismo de trabajo web

Página web, sitio web

Podemos ver hermosas páginas en Internet a través de un navegador, que generalmente son páginas .html representadas por el navegador, que contienen tecnologías de interfaz de usuario como css. La colección de varias páginas web es el sitio web.

Contenedor web

El contenedor web, también llamado servidor web, proporciona principalmente un servicio web, que a menudo se denomina servicio HTTP.
Los contenedores web comunes son: Apache / IIS / Nginx, etc.

Apache nace para admitir PHP e IIS nace para admitir .net.asp

Páginas estáticas

Las páginas estáticas son todos archivos .html, que son archivos de texto sin formato. Estos archivos contienen código html.
HTML (HyperText Markup Language, HyperText Markup Language), interpreta y se ejecuta en el navegador.

Servidor de middleware

Lo anterior solo puede mostrar información a los usuarios en una dirección. Con el desarrollo de la Web, la información tiene que fluir en ambas direcciones, creando una necesidad de interacción, es decir, el concepto de páginas web dinámicas; la llamada dinámica es el uso de flash, php, asp, Java y otras tecnologías. para incrustar algunos scripts ejecutables en las páginas web y el navegador del usuario. Al interpretar la página, inicia y ejecuta el script cuando lo encuentra.

El uso de scripts permite que el modelo de servicio web tenga capacidades de comunicación bidireccional. El modelo de servidor web también puede manejar varias transacciones como el software tradicional, como editar archivos, calcular intereses, enviar formularios, etc. La aplicación de la arquitectura web es enormemente expandido.

Estos scripts se pueden incrustar en la página, como JS, etc. También se puede almacenar por separado en el directorio del servidor web en forma de archivos, como archivos .asp, .php, jsp, etc. De esta manera, cada vez más scripts funcionales forman un conjunto de herramientas común, que se puede administrar por separado y se puede usar directamente durante el desarrollo empresarial en la Web. Este es el servidor de middleware, que en realidad es una extensión de las capacidades de procesamiento del servidor Web.

La aparición de bases de datos

Las páginas web y las secuencias de comandos estáticas se diseñan de antemano y, por lo general, no se cambian con frecuencia. Sin embargo, muchos contenidos del sitio web deben actualizarse con frecuencia. Obviamente, es inapropiado colocar estos datos modificados en el programa de la página web estática. El método tradicional es separar los datos del programa., La base de datos profesional utilizada.

Los desarrolladores web agregan un servidor de base de datos detrás del servidor web. Estos datos que cambian con frecuencia se almacenan en la base de datos y se pueden actualizar en cualquier momento. Cuando un usuario solicita una página, el script usa el lenguaje de la base de datos SQL para leer los datos más recientes de los datos de acuerdo con la página solicitada por el usuario y donde están involucrados los datos dinámicos, para producir una página "completa" y finalmente enviar se lo al usuario

Construye un sitio web

Enlace de origen: https://pan.baidu.com/s/1lsn9gfOQ1TbNwIiIn-9MJw
Código de extracción: cy39

Copie el archivo cms en el código fuente al directorio raíz del sitio web phpstudy

El install.sql (archivo de base de datos)
en la carpeta cms tiene un database.inc.php (archivo de configuración de base de datos) debajo del archivo de inclusión para abrirlo haciendo clic derecho

Cree una nueva base de datos cms (phpmyadmin)

Importar, encontrar install.sql (primero seleccione la base de datos y luego importe)

Luego actualiza la página

 

Descripción general del protocolo HTTP

HTTP (Protocolo de transferencia de hipertexto, Protocolo de transferencia de hipertexto, es la especificación y los requisitos para la entrega de mensajes.

  • Visión de conjunto

@

Propuesto en 1990, la versión actual es 1.1.

@

HTTP se utiliza para transferir documentos html desde un servidor web a un navegador web.

@

Es un protocolo de solicitud y respuesta. El cliente envía una solicitud y el servidor responde a la solicitud.

@

HTTP usa una conexión TCP confiable, el puerto predeterminado es 80

  • Características

@

Admite modo navegador / servidor

@

Sencillo y rápido: cuando el navegador realiza una solicitud al servidor, solo necesita transmitir el método de solicitud y la ruta de solicitud

@

Flexible: HTTP ejecuta y transmite cualquier tipo de objetos de datos (incluidos html, jpg, mp3)

.html

 

Texto sin formato

.jpg

 

imagen

.mp3

 

Audio

@

El protocolo HTTP es un protocolo sin estado

 

  • URL

Localizador uniforme de recursos (URL), que se utiliza para indicarle al contenedor web la ruta del recurso (archivo) solicitado por el navegador. Por ejemplo: http: //localhost/test/requests.php? Id = 32

¿Por qué no hay nombre de usuario y contraseña en la URL anterior?
Omitido. Porque se publica un servicio web en Internet para permitirle acceder de forma anónima

Demuestre la existencia de nombre de usuario y contraseña: ftp: // 1901: [email protected]

Formato de URL:

Esquema: // inicio de sesión: contraseña @ dirección: puerto / ruta / a / recurso /? Query_string # fragment

esquema: //               es el nombre del protocolo de
inicio de sesión: contraseña     nombre de usuario y contraseña
@               dirección dirección (incluida la dirección IP o el nombre de dominio) el
puerto                         predeterminado es 80, otros deben agregar
/ ruta / a / recurso /   ruta de recursos
? query_string         cadena de consulta
fragmento                  ancla (Darse cuenta del posicionamiento de la página)

Puerto

 

80

Acceso

 

nombre de usuario

Contraseña

 

contraseña   

Fragmento

 

Punto de anclaje

@

Codificación de URL

Existen restricciones sobre los únicos caracteres permitidos en la URL. [AZ] [az] [0-9], el signo menos de ancho medio (-), el punto de subrayado (.) Y la tilde (~) pueden aparecer directamente en el ruta de la URL. Otros caracteres estarán codificados en porcentaje (incluidos los espacios)

como sigue:

#

 

% 23

[]Espacio

 

% 20

Principio de codificación de URL:% + código ASCII en forma hexadecimal

No use chino al codificar la URL

Al programar, se utilizará un signo más [+] en lugar de espacios.

@

Herramienta de análisis de mensajes

1 、 F12

2 、 tiburón

3 、 violinista

4 、 Suite para eructar

...

Análisis de mensajes HTTP

Todos los mensajes de comunicación de las aplicaciones web deben cumplir con las especificaciones y requisitos del protocolo HTTP.

  • Modo de trabajo HTTP

  • PEDIDO

    • Solicitar mensaje, de la siguiente manera

OBTENER /php/test/get.php HTTP / 1.1
Host: 192.168.1.136
Usuario-Agente: Mozilla / 5.0 (Windows NT 6.1; Win64; x64; rv: 75.0) Gecko / 20100101 Firefox / 75.0
Aceptar: texto / html, aplicación /xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Aceptar-Idioma: zh-CN, zh; q = 0.8, zh-TW; q = 0.7, zh-HK; q = 0.5, en-US; q = 0.3, en; q = 0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.136/php/test/
Connection: close
Upgrade-Insecure-Requests: 1
Cache- Control: edad máxima = 0

Varias herramientas de agencia de Amway:


Administrador y conmutador de proxy

Conexión directa (es decir, sin usar ningún proxy)

La solicitud HTTP consta de tres partes: línea de solicitud, encabezado de solicitud y cuerpo de solicitud

1. Línea de solicitud: método, ruta de recursos, protocolo / versión

Método: OBTENER

Ruta de recursos: /php/test/get.php

Protocolo / versión: HTTP / 1.1

2. Encabezado de la solicitud

El contenido de la segunda línea del mensaje de solicitud a la primera línea vacía. Que contiene muchos campos

Hay un espacio entre el encabezado de la solicitud y el cuerpo de la solicitud, y no hay espacio entre la línea de la solicitud y el encabezado de la solicitud.

3. Cuerpo de la solicitud

El método anterior (método GET) no tiene cuerpo de solicitud, lo verá más adelante (POST tiene cuerpo de solicitud)

 

Método de solicitud: (qué campos tiene la línea de solicitud)

OBTENER

El método más utilizado, normalmente el usuario solicita un determinado recurso enviado por el servidor.

CORREO

Puede enviar parámetros y formularios al servidor, incluidos flujos de archivos, etc.

CABEZA

Similar al método GET, pero solo se devuelve el encabezado en la respuesta del servidor

PUT (peligroso)

A diferencia de GET leyendo el documento desde el servidor, el método PUT escribe el documento en el servidor

RASTRO

Solicitud del navegador Echo

OPCIONES

Solicitar al servidor web que informe las distintas funciones que soporta

ELIMINAR

Solicite al servidor que elimine el recurso especificado por la URL de la solicitud (se puede eliminar cualquier archivo)

Si nuestro servidor habilita PUT, TRACE o DELETE, ¡creemos que el servidor es peligroso!

  • experimentar

Utilice telnet para simular un navegador para enviar solicitudes HTTP

La función del protocolo http es simple y rápida. Solo necesitamos enviar el recurso y la ruta solicitados cuando solicitamos recursos.
Se puede construir un mensaje de solicitud http:

Abrir acceso telnet en win7: panel de control --- programa --- función de abrir o cerrar ventanas --- comprobar cliente telnet --- OK

Utilice telnet para enviar una solicitud de obtención:

telnet 172.16.132.161 80
------------------
GET /php/test/get.php HTTP / 1.1 (método de solicitud + ruta de recursos + versión del protocolo)
HOST: 172.16.132.161
-----------------

Después del retorno de carro, está en blanco (presione ctrl +] para encender el eco)
y luego presione retorno de carro para ingresar a la interfaz en blanco, y pegue el mensaje anterior

Presione Enter nuevamente, puede ver la respuesta del servidor


Telnet www.baidu.com 80

----------------


Anfitrión GET / HTTP / 1.1 : www.baidu.com

-----------

Ingrese y vea html (use cmd)

Cree un nuevo archivo baidu.html en la máquina virtual, pegue el código anterior en él y visite

De esta manera, puede simular que el navegador envíe solicitudes http a través de telnet

Utilice el método OPTIONS para probar las solicitudes HTTP permitidas por el servidor web

---------------

OPCIONES / HTTP / 1.1

Anfitrión: 192.168.1.136

-------

Utilice telnet para transmitir parámetros GET

-------------

    OBTENER /php/test/get.php?name=AJEST&pwd=123456 HTTP / 1.1

    Anfitrión: 192.168.1.136

-------------

Utilice telnet para simular POST y solicite pasar parámetros

---------------

POST /php/test/post.php?http://192.168.1.136/php/test/post.php HTTP / 1.1
Host: 192.168.1.136
Tipo de contenido: application / x-www-form-urlencoded
Contenido-Longitud: 19

nombre = GGG & pwd = 123456

-------------


Quiero usar un método simple para enviar datos por correo postal: (de lo contrario, escriba un formulario)
Herramienta: hackbar


Qué campos hay en el encabezado de la solicitud:

Anfitrión

Se utiliza principalmente para especificar el host de Internet y el número de puerto del recurso solicitado

Agente de usuario

Huella digital del navegador

Referer

Contiene una URL, que representa la URL anterior de la URL actual (esta es la página desde la que se redirige esta solicitud)

Galleta

Registre la información de autenticación de identidad del solicitante

Aceptar-juego de caracteres

El usuario especifica el juego de caracteres aceptado por el cliente.

Tipo de contenido

El tipo de medio (es decir, el tipo de datos) utilizado para informar al receptor de la entidad de conocimiento.

Largancia de contenido

Se utiliza para indicar la longitud del cuerpo de la entidad, expresada como un número decimal almacenado en bytes.

Última modificación

Se utiliza para indicar la fecha y hora de la última modificación del recurso.

 

RESPUESTA

  • El mensaje de respuesta es el siguiente:

-------------------------------------------------- -------------------------------

HTTP/1.1 200 OK
Date: Sat, 25 Apr 2020 09:50:59 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 13
Connection: close
Content-Type: text/html

array(0) {

}

------------------------------------------------------------------------------

响应报文由状态行(响应行)、响应报头、响应正文三部分组成。

1、状态行:协议/版本,状态代码,描述短语

协议/版本:HTTP/1.1
状态代码:200
描述短语:OK

2、响应报头

第二行开始到第一个空行为止的所有内容,其中包含了关于HTTP响应的重要字段。

3、响应正文

服务器返回资源的内容,即浏览器接收到的HTML 代码。
 

状态码

100~199

信息性状态码(少见)

200~299

成功状态码(最常见,2开头就是请求成功)

300~399

重定向状态码

400~499

客户端错误状态码

500~599

服务器错误状态码

写一个重定向代码:

location.php:
<?php
header("Location:./get.php");
?>

//我没在访问location.php的瞬间会直接到get.php页面

主要字段

Server

服务器指纹

Set-Cookie

向浏览器端设置Cookie

Last-Modified

服务器通过这个头信息告诉浏览器,资源的最后修改时间

Content-Length

请求正文长度

Location

重定向目标页面

Refresh

服务器通过Refresh头告诉浏览器定时刷新浏览器

同源策略的条件

  • URL 的主机(FQDN:Fully Qualified Domain Name 全程域名)一致
  • Schema 一致
  • 端口号一致

同源策略的保护对象不仅仅时iframe 内文档。比如实现Ajax 时所使用的XMLHttpRequest 对象能够访问的 URL也受到了同源策略的限制。

sop叫同源策略

同源策略的探究

  • 准备两个页面

  • -------index.html

        <html>

        <head>

        <title> 跨 frame 的读取实验 </title>

        <meta charset="utf-8">

        </head>

        <body>

        <iframe name="iframe1" width="300" height="80"

        src="http://192.168.3.10/sop/iframe.html"

        >

        </iframe>

        <input type="button" οnclick="go()" value=" 密码: ">

        <script>

        function go(){

        try {

        var x = iframe1.document.form1.passwd.value;

        document.getElementById('out').innerHTML = x;

        } catch (e){

        alert(e.message);

        }

        }

        </script>

        <span id="out"></span>

        </body>

        </html>

    --------

    --------iframe.html

        <html>

        <head>

        <meta charset="utf-8">

        </head>

        <body>

        <form name="form1"> iframe 的内层

        密码 <input type="text" name="passwd" value="password1">

        </form>

        </body>

        </html>

    --------

    这里我们使用我们服务器的浏览器测试这个实验(因为我们要使用不同的两个URL来访问我们的网页)

    我们用指定的IP访问,可以正常读取

当时当我们使用我们本机的回环地址去访问时,打开页面,无法读取(这就是由同源策略限制,无法访问内层iframe)

 

Supongo que te gusta

Origin blog.csdn.net/Waffle666/article/details/115212531
Recomendado
Clasificación