一:前言:
300集每集平均一小时的WEB渗透测试已经过去差不多四分之一了,对于计算机网络和web 的工作机制的了解也更深入了,接下来记录一些 web的工作机制,2021年3月20日 23:37:43
二:web 工作机制:
输入网址后:
1.先访问本地缓存
2.若无,则访问host文件
3.若也无,再通过ARP找到对应的MAC地址
4.通过DNS服务器寻址(通过DHCP获取DNS服务器)找到IP
5.通过网关
6.路由
7.到达对方主机
8.访问80 443
9.三次握手
10.建立链接
11.发送HTTP 数据包
12.HTTP响应(如果访问html文件,直接发送,如果为PHP文件,则对PHP文件进行解析,得到PHP运行结果)
web 容器
web容器,也叫web 服务器,主要提供web服务,也就是常说的HTTP服务。
常见的web容器有:Apache/IIS/Nginx等。
静态的网页
静态的网页,都是一些.html
文件,是纯文本文件。这些文件中包含html 代码。
HTML (HyperText Markup Language,超文本标记语言),在浏览器中解释运行。
中间件服务器
以上这种,只能单向地给用户展示信息。随着web的发展,信息要双向流动,产生了交互的需求,也就是动态网页的
概念;所谓动态就是利用flash、Php、asp、Java等技术在网页中嵌入一些可运行的脚本,用户浏览器在解释页面时,遇到脚本就启动运行它。
脚本的使用让web服务模式有了“双向交流”的能力,web服务模式也可以象传统软件一样进行各种事务处理,如编辑文件、利息计算、提交表单等,web架构的适用面大大扩展。
这些脚本可以嵌入在页面中,如JS等。也可以以文件的形式单独存放在web服务器的目录里,如.asp、.php、jsp文件等。这样功能性的脚本越
来越多,形成常用的工具包,单独管理,web业务开发时,直接使用就可以了,这就是中间件服务器,它实际上是web服务器处理能力的扩展。
数据库的出现
静态网页与脚本都是事前设计好的,一般不经常改动,但网站上很多内容需要经常的更新,如新闻、博客文章、互动游戏等,这些变动的数据放在静态的程序中显然不适合,传统的办法是数据与程序分离,采用专业的数据库。
web开发者在web服务器后边增加了一个数据库服务器,这些经常变化的数据存进数据库,可以随时更新。当用户请求页面时,脚本根据用户请求的页
面,涉及到动态数据的地方,利用SQL数据库语言,从数据中读取最新的数拒,生成“完整”页面,最后送给用户。
URL:统—资源定位符(网址),用来告诉web容器,浏览器所请求资源(文件)的路径。
URL编码:URL 中允许出现的字符是有限制的,URL 中path开始允许直接出现A一Za-z0-9
半角减号(-)、下划线句点(.)、波浪号(~)。其他字符均会被百分号编码。
HTTP报文分析
什么是HTTP报文呢? 就相当于我给服务器写了一封信,服务器给我们回信
报文分析工具
1.F12
2. wireshark
3. fiddler
…….
web应用的所有通信的消息都要遵守HTTP 协议的规范和要求。
*HTTP 工作模式
*REQUEST
请求报文,利用抓包工具,在访问时,得到如下
GET /phpftest/get .php HTTP/1.1Host 172.16.132.161 (请求行)
(下面全是请求头)
HOST :172.x.x.x
User-Agent Mozilla/5.0 (Windows NT 6.1;Win64;x64, rv.69.0) Gecko/20100101 Firefox/69.0
Accept texthtml,applicationxhtml+xml,applicationxml;q=0.9.*r;q=0.8
Accept-Language: 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:/172.16.132.161/phptest/Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
HTTP请求由请求行、请求头、请求正文三个部分组成。
1.请求行: 方法,资源路径,协议/版本
方法:GET
2.请求头:
由上数据,一般包含很多内容
资源路径:/php/test/get. php
协议/版本:HTTP/1.1
主要字段:
Host:主要用于指定被请求资源的Internet主机和端口号
User-Agent:浏览器指纹(即浏览器的版本等)
Referer:包含一个URL,代表当前URL的上一个URL
Cookie:记录请求者的身份认证信息
Accept-Charset:用于指定客户端接收的字符集
Content-Type:用于向接收方指示实体的介质类型(数据类型)
Content-Length:用于指明实体正文的长度,以字节方式存储的十进制数字来表示
Last-Modified:用于指示资源的最后修改时间和日期
(1):GET
GET是最常用的方法,通常用于请求服务器发送的某个资源。
(2):POST
POST方法可以向服务器提交参数以及表单,包括文件流等
(3):HEAD
与GET 方法类似,但在服务器响应中只返回首部。
(4):PUT
与GET从服务器读取文档相反,PUT 方法会向服务器写入文档。
(5):TRACE
回显浏览器的请求。
(6):OPTIONS
OPTIONS方法请求web服务器告知其支持的各种功能。
(7):DELETE
DELETE方法请求服务器删除请求URL所指定的资源。
响应报文
例子如下—-
HTTP/1.1 200 OK
Date: Sun,29 Sep 2019 08:43:35 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45X一Powered-By : PHP/5.4.45
Content-Length: 13
Connection: close
Content-Type: text/html
array(0) {
}
响应报文由状态(响应)行、响应头、响应正文三部分组成。
1.状态行:协议/版本,状态代码,描述短语
协议/版本:HTTP/1.1
状态代码:200
描述短语:0K
2.响应报头
第二行开始到第一个空行为止的所有内容,其中包含了关于HTTP响应的重要字段。
3.响应正文
服务器返回资源的内容,即浏览器接收到的HTML 代码
状态代码
100~199
信息性状态码
200~299成功状态码
300~399重定向状态码
400~499
客户端错误状态码
500~599
服务器错误状态码
响应报文主要字段
Server 服务器指纹
Set-Cookie 向浏览器端设置Cookie
Last-Modified 服务器通过这个头信息告诉浏览器,资源的最后修改时间
Content-Length 请求正文的长度Location重定向目标页面
Refresh:服务器通过Refresh头告诉浏览器定时刷新浏览器
Cookie 与Session机制
Cookie
对整个域名有效(包括它的全部子域名),只要设置成域名就可以了(这个例子里是’example.com’ ) 。
secure
设置这个Cookie是否仅仅通过安全的HTTPS 连接传给客户端。设置成TRUE时,只有安全连接存在时才会设置Cookie
如果是在服务器端处理这个需求,程序员需要仅仅在安全连接上发送此类Cookie(通过$_SERVER[“HTTPS”]判断)。
httponly
设置成TRUE,Cookie 仅可通过HTTP协议访问。这意思就是Cookie无法通过类似JavaScript这样的脚本语言访问。要有效减少XSS
攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持),不过这个说法经常有争议。PHP 5.2.0中添加。TRUE或FALSE
*Session机制
Session 机制需要借助Cookie来实现。但是二者有明显区别: Cookie
机制将用户的身份认证信息存储在浏览器端;Session机制是将身份认证信息放在服务器端。Session
机制从一定程度上解决了Cookie所面临的窃取与欺骗的风险。当然窃取的是Cookie信息,欺骗的是服务器。二者合一称为固定会话攻击。
同源策略
同源策略是禁止JavaScript
进行跨域访问的安全策略。它也是浏览器沙盒环境所提供的一项制约。
浏览器可以同时处理多个网站的内容,其典型方法为使用标签页或iframe等。
同源策略的条件
URL 的主机 (FQDN:Fully Qualified Domain Name 全称域名)一致
Schema—致(在数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas 和schemata都可以作为复数形式。模式中包含了schema对象,可以是表(table)、列(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、外键(foreign key)等。数据库模式可以用一个可视化的图来表示,它显示了数据库对象及其相互之间的关系,来源)
端口号一致
同源策略的保护对象不仅仅是iframe内的文档。比如,实现Ajax时所使用的XMLHttpRequest对象能够访问的 URL
也受到了同源策略的限制。
例如:
<html> <head> <title>跨frame 的读取试验</title><meta charset= 'utf-8'> </ head> <body> <iframe name="iframe1" width="300" height="80"src="http :// localhost/sop/iframe. html " > //定义iframe框架 </iframe> <input type="button" onclick="go() " value="密码"> <script> function go (){ try i var x = iframe1.document.forml.passwd.value;document.getElementById ( ' out ' ) .innerHTML= x;catch (e) { alert (e.message) ; } } </ script> //JS代码用于输出form表单的值 <span id="out"></ span></ body> </ html> //
<html> <head> <meta charset='utf-8'></ head> <body> <form name="form1">ifxame 的内层Ⅰ 密码<input type="text" name="pas.swd" value="pa</ form> </ body></ html>
在指定的src地址中,JS可以代码可以读取输入的password,但是如果跨域访问(即不同域名)是不允许的
内容有错字
真的吗~~~