Tabla de contenido
La aparición de bases de datos
Descripción general del protocolo HTTP
Solicitar mensaje, de la siguiente manera
El mensaje de respuesta es el siguiente:
Las condiciones de la estrategia del mismo origen
Explorando la misma estrategia de origen
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 |
@ |
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ónimaDemuestre 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.
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
-------------------------------------------------- -------------------------------
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)