Know Web How to work?

【Day02】 Know-Web-How to work?

看着viewer老司机的笔记不错,我这里就不重复造轮子了,正所谓站在巨人的肩膀上take note, 感谢viewer老师的开源MD文档,我就在这里开始我的每一步细节研究了。

Web-Stage-1-HTTP

web知识点很多,而且很杂。我们只能挑一些有共性的来学,选一些来讲,碰到不会的就现学现查,大部分靠自觉。

Main

本周计划要学的东西分为四个方面,

1. 协议

  1. HTTP
    推荐图书《图解HTTP》

2. 语言

  1. HTML/CSS
    http://www.w3school.com.cn/h.asp
  2. javascript
    http://www.w3school.com.cn/b.asp
  3. mysql
    http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html#c1

  4. python
    https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

  5. php
    http://www.w3school.com.cn/php/index.asp

3. 了解Web漏洞类型

  1. OWASP
    http://www.owasp.org.cn/owasp-project/OWASPTop102017RC2.pdf
  2. Web 安全深度剖析

4. 实验环境

  1. 搭建渗透测试环境
    我这用的是win7+xampp
    http://www.freebuf.com/sectool/102661.html
  2. 浏览器 firefox或者chrome,(最好找旧版本的,因为新版本的限制多)
  3. 抓包工具burpsuite

下面是老师学HTTP的笔记,我看完了并锦上添花一波,可以对HTTP有个简略印象,要学得深入点,建议看完《图解HTTP》,并多做实验观察,多思考,多动手。


HTTP Note

1.HTTP简介

  • [HTTP][1]协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。
  • HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

2.HTTP工作原理

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URLHTTP服务端即WEB服务器发送所有请求。

扫描二维码关注公众号,回复: 291551 查看本文章

Web服务器有:Apache服务器,Nginx服务器,IIS服务器(Internet Information Services)等。

Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

2.1 HTTP三点注意事项

  • HTTP是无连接

    无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

  • HTTP是媒体独立的

这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
* HTTP是无状态

HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

以下图表展示了HTTP协议通信流程:

2.2 URI与URL

  • URI

    URI是Uniform Resource Identifier的缩写,是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。 采用HTTP协议时,协议方案就是http。除此之外,还有ftp、mailto、telnet、file等。

  • URL

    Uniform Resource Locator,统一资源定位符,表示资源在互联网上的地址,它其实是URI的一个子集
    URI仅仅表示「标识」, 标识的类型有很多,比如ISBN号码,电话号码,邮箱,网页链接地址等,而URL则把概念缩小到了「地址」。
    由于URI在绝大多数场景下都是以URL的形式存在,大家一般都说URL居多,这也没什么问题,但是在心里要清楚URI和URL还是有所区别的。

2.3 IP

IP(Internet Protocol) :互联网中设备间进行通信都要遵从的一种协议,它规定了每台设备都要有且唯一的IP地址,用来标识自己在互联网中的地址。格式通常为http://XXX.XXX.XXX.XXX,不同网段下IP地址的范围也不同。如有兴趣者,请自行百度。

2.4 域名

域名(Domain Name) :由于IP协议规定的纯数字IP地址在日常中难以记忆,因此人们便产生使用更加常见,好记的字符标识设备的地址,域名应运而生。一个域名就是一个更加容易记忆的目标主机的地址标识符。例如:百度的域名就为百度一下,你就知道,实际对应的IP地址为119.75.217.109

2.5 DNS

DNS(Domain Name System): 互联网中实际定位设备时还是使用IP地址来定位,因此产生了DNS,一种专门用来将域名转换为IP地址的协议,提供该协议服务的服务器就叫DNS服务器。

3. HTTP所属层次

HTTP协议是TCP/IP协议族中应用层的一种协议,也可以说是现在Web中应用最为广泛的一个协议了。

就像人与人之间的交流合作需要协议来规范一样,网络中的计算机也是同理:从电缆的规格到IP地址的选定方法、寻找异地用户的方法、双方建立通信的顺序,以及Web页面显示需要处理的步骤……,这些一些列规则都要实现定制好,才能让网络中千千万万的计算机之间的交流不乱套。这些一系列的规则就构成了TCP/IP协议族
分层:每一层完成一个特定的任务–封装,每一层对上一层提供服务时,上一层的数据结构是黑盒,直接作为本层的数据,而不需要关心上一层协议得任何细节,层内部的变化不会影响到其他层。

TCP/IP

4. HTTP 消息结构

  • HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
  • 一个HTTP客户端是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
  • 一个HTTP服务器同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
  • HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
  • 一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式RFC5322和多用途Internet邮件扩展MIMERFC2045来传送。

5. 客户端请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

6. 服务器响应消息

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

7. HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

8. HTTP 响应头信息

HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。

For example:

9. HTTP状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

HTTP状态码的英文为HTTP Status Code

下面是常见的HTTP状态码:
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误

10. HTTP状态码分类

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

11. HTTP content-type

  • Content-Type,内容类型,

一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。

12. Session ID

HTTP协议不保持请求之间的状态,为了维护状态,得使用状态追踪机制。

一个会话标识符(Session ID)通常在请求中传递,以将请求与回话相关联。

Session ID 通常通过以下方式来传递:

  • URL
  • 隐藏的表单字段
  • HTTP报文头中的Cookie字段

13. Cookies

最常见用来传递Session ID的地方

发起一个回话时,服务器发送一个Set-Cookie响应头

  • 以一个NAME=VALUE键值对开始
  • 后跟0个或更多分号分割的属性值对
  • Domain,Path,Expires,Secure
Set-Cookie: SID=5KXIOt4cS; expires=Mon, 31-May-2010 20:46:01 GMT; path=/; domain=.abc.com; HttpOnly

14. GET和POST的区别

[总的来说][2],GET是用来获取资源,POST使用来处理资源,在RFC7231中是这么说的:

The GET method requests transfer of a current selected representation for the target resource. GET is the primary mechanism of information retrieval and the focus of almost all performance optimizations. Hence, when people speak of retrieving some identifiable information via HTTP, they are generally referring to making a GET request.
A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request.

The POST method requests that the target resource process the representation enclosed in the request according to the resource's own specific semantics.

这里牵涉到一个很重要的词语:semantic 「语义」,那么什么是语义呢?

一种语言是合法句子的集合。什么样的句子是合法的呢?可以从两方面来判断:语法和语义。语法是和文法结构有关,然而语义是和按照这个结构所组合的单词符号的意义有关。合理的语法结构并不表明语义是合法的。例如我们常说:我上大学,这个句子是符合语法规则的,也符合语义规则。但是大学上我,虽然符合语法规则,但没有什么意义,所以说是不符合语义的。

对于HTTP请求来说,语法是指请求响应的格式,比如请求第一行必须是方法名 URI 协议/版本,具体的内容可以参见《图解HTTP》,凡是符合这个格式的请求都是合法的。
当然在符合合法的前提下实现违背语义的行为也是可以做到的,比如使用GET方法修改用户信息,POST获取资源列表。

15. HTTP Proxies

burp拦截HTTP请求的原理图

Mission

1. 学习HTTP协议,尝试用浏览器(chrome或者firefox)和burpsuite分别抓取HTTP请求头和响应头,截图放在自己笔记中提交到版本库中

Ans: 不同的 Burpsuite 同一系列的区别不太大,但是奇偶数跨越的版本一般都会有一些限制,burpsuite有很多的用法,但是主要模块就几个,通过不同的配置可以达到不同的效果,这里只是简述下我着重关注的地方,也是在CTF_web赛题中需要接触多的方面:

  • BP 抓取效果图:

    • 断点抓取:

    • 历史抓取:

  • BurpSuite 测试流程

  • BP 重点模块 (以后写各种情况的抓包详情分析)

    • 心脏-代理Proxy
    • 重放-Repeater
    • 爆破-Intruder
    • 蜘蛛-Spider
  • BP 各功能模块对照翻译(彩蛋)

  • 参考:

2. 请用自己的话简述在浏览器地址栏中输入网址www.baidu.com,从按回车键到页面显示这个过程中,发生了什么?

  • 简述:

    • 网址如果是域名的话会先通过dns解析,找到IP,然后通过IP找到对应服务器。如果是IP访问则省去dns解析步骤。再根据网址和参数,找到对应web服务器上的文件,如果是动态网页,则会先编译成静态html,如果直接访问静态网页,则省去编译步骤。最后输出到浏览器,浏览器解析成对应网页效果。
  • 详细流程:

    • 第一步:地址解析阶段

      • 用户在浏览器端输入URL后,浏览器先做第一件事情就是找到目标域名的IP地址,大致经过以下几个阶段:

      • 1.查询 浏览器端的DNS缓存 中是否有目标域名的相关信息。

      • 2.查询 本机的host文件 中是否有目标域名的信息。
      • 3.查询本地的 路由器中的DNS缓存 中是否有目标域名的信息。
      • 4.查询 ISP(互联网服务提供商,例如电信,移动)中的DNS服务器 中是否有目标域名的信息。
      • 5.查询 根域名服务器 是否有目标域名的信息,如果没有,则传至 子域名服务器 进行查询, 以此递推 。
      • 6.查询到目标IP地址后,则开始建立 TCP 三次握手 ,与目标服务器建立连接。
      • 7.通过 HTTP 协议向目标主机发送请求。

      • 第二步:请求处理及响应阶段

      • 1.服务器端接受到请求后,根据路由将url中的地址进行重定向到服务器程序上的目标文件。

      • 2.此处涉及到后台的MVC架构,大致如下:

      • URL中的文件地址部分经过服务器上的路由程序重定向到对应的控制器(controller)对象,控制器对象根据URL中指定的操作执行相关的逻辑并调用目标数据的模型(Model)对象,模型对象与数据库交互完成目标操作后,控制器将模型中反馈的数据填充到视图中。

      • 3.视图部分(通常是HTML页面)作为HTTP响应发送到浏览器端。

      • 第三步:视图解析阶段

      • 1.浏览器开始解析目标HTML文件,执行流的顺序为自上而下。

      • 2.HTML解析器将HTML结构转换为基础的DOM(文档对象模型),构建DOM树完成后,触发DomContendLoaded事件。
      • 3.CSS解析器将CSS解析为CSSOM(层叠样式表对象模型),一棵仅含有样式信息的树。
      • 4.CSSOM和DOM开始合并构成渲染树,每个节点开始包含具体的样式信息。
      • 5.计算渲染树中个各个节点的位置信息,即布局阶段。
      • 6.将布局后的渲染树显示到界面上。

注:图片等外部资源在解析阶段被加载,加载完毕后触发load事件

Reference-Links

猜你喜欢

转载自blog.csdn.net/skymyxvincent/article/details/79502744