CTF入门学习3->Web通讯基础

2021年11月26日 阅读数:2
这篇文章主要向大家介绍CTF入门学习3->Web通讯基础,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

Web安全基础

01 Web通讯

这个部分重点介绍浏览器与Web服务器的详细通讯过程。浏览器

01-00 URL协议

只要上网访问服务器,就离不开URL。安全

URL是什么?

URL就是咱们在浏览器里输入的站点连接。又叫作“统一资源定位符”(Uniform Resource Locator)。服务器

URL支持不少协议,好比HTTP、FTP等等。网络

PS:HTTP和URL有何区别?jsp

答:(来源(https://www.jianshu.com/p/4fb712c05b63)ide

HTTP:(Hypertext transfer protocol)超文本传输协议,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。工具

URL:(Uniform Resource Locator)统一资源定位符,对能够从互联网上获得的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。学习

URL有什么做用?

URL的做用就是定位服务器的资源。网站

那如何才能定位到网站(服务器)的资源呢?spa

咱们来设想一下:咱们在网上购买的东西是如何寄到咱们手上的呢?

咱们提供了咱们的收货地址。

在Web的世界中,URL就充当了收货地址的角色。

浏览器经过URL,能够定位到服务器的资源,而后将服务器的资源展现给咱们。

这个“收货地址”有必定的格式:

schema://host[:port#]/path/.../[?query-string] [#anchor]

schema:底层协议如http、https、ftp等;

host:服务器的域名或者IP地址;

:port# : 服务器端口,HTTP默认端口是80(能够省略),其余端口须要指明;

/path: 访问资源的路径;

?query-string: 发送给服务器的数据;

#anchor: 锚;一般表示在页面的特定位置。

全部的URL都遵循这个URL标准。

URL实例

http://dun.163.com/sj/test/test.jsp?name=sviergn&x=true#stuff

逐一解析:

schema:http协议;

host:dun.163.com;没有指明端口,默认80

/path:/sj/test/test.jsp,访问资源的路径;

?query-string:?name=sviergn&x=true;

anchor:#stuff

这一部分须要常忆经常使用。

 

01-01 HTTP协议

HTTP就是Web通讯时使用的协议,也是Web创建的基础;是网络上应用最广的一种协议。

什么是HTTP?

又称超文本传输协议;Hyper Text Transfer Protocol;

为了了解这一协议的过程,咱们设想一下快递小哥的工做:

快递小哥首先经过货车派送货物,当货物送到咱们的收货地址的时候,快递小哥就会打电话联系咱们,说是某某公司的快递员,要咱们来取件。

若是要让快递小哥送进小区里面,咱们就须要告诉物业准许他进入,至关于给他颁了个通行证;

当快递小哥将货物送到咱们手上,咱们须要签收,快递小哥拿到快递单,就完成了一次快递任务。

HTTP协议相似。

浏览器:快递小哥

快递小哥经过货车送货:浏览器经过Get方式发送请求。

HTTP中的Host就至关于“收件人地址”;

User-Agent就至关于快递小哥所处的公司;

HTTP包含的Cookie就至关于可以进入咱们小区的凭证。

当服务器收到浏览器的HTTP请求后,会返回一个状态码(对应收到这个事实)和相应内容(对应已签收的字据)。状态码为200表示正常收到(状态码能够在上文中/前一篇的开发者工具的网络中查看)

能够看到HTTP协议的请求和响应包含了一些特殊的属性,包含方式、User-Agent、Host、返回的状态码等等;

这些都属于HTTP的报文。

什么是HTTP的报文?

分为三部分:起始行、头、身体

左边,是浏览器发送的HTTP请求报文,右边是服务器返回的HTTP请求报文;

  • 左侧

    • 第一行:请求行Request Line

    • 以后:是咱们的头部Headers;

    • 下面:应该是咱们的数据体,但因为是GET请求,没有数据体

    • 注意头部和数据体之间是有一个空行的。

  • 右侧

    • 第一行:状态行;

      • 好比:HTTP/1.1 200 OK

    • 头部

    • 主体:也就是响应的正文

    • 注意响应的头部和主题之间也是有一行空行的。

HTTP请求示例

好比一个发帖的HTTP请求

当咱们进行发帖的时候,咱们的请求报文和响应报文以下:

  • 请求

    • 第一行:请求行

      • 这里是POST

    • Headers

      • 相较于上面,多了一个Cookie字段,就是前面提到的用户凭证,至关于告诉服务器,是我发的这个帖子。

      • 黑客就比较喜欢获取这个Cookie凭证,若是获取,就拥有了“我”的凭证,能够以“我”的身份发帖。

      • 后面会接触一些这方面的安全漏洞。

    • 也有了数据体

      • 就是要发布的帖子的相关内容

HTTP请求的其余方法

  • HEAD

    • 与GET请求相似,不一样是只返回HTTP的头部信息,没有数据体,也就没有页面内容。

  • PUT

    • 上传指定的URL描述

  • DELETE

    • 删除指定资源

  • OPTIONS

    • 返回服务器支持的HTTP方法

01-02 HTTP头的Referer

这是除了HTTP请求方式和Cookie的概念外,另外一个重要概念。

Referer就是告诉服务器,咱们从什么地方来(即告诉物业咱们是哪一个快递公司的);

举例:

咱们经过https://m.study.163.com/直接跳转到页面。和从bing主页搜索云课堂再进入,开发者工具中显示的HTTP请求是不一样的,后者会多一个Referer头,表示是从bing的这个连接来的。

如图;图一是直接跳转;图二是搜索跳转;

直接跳转Rerfer

搜索跳转的Rerfer与之不一样。

 

 

因此因为Referer能够告诉服务器该次请求的来源,因此不少Web服务器会经过Referer来进行统计(好比CNZZ、百度统计)

从安全的角度来说,Referer还能够用来判断来源是否合法。

(好比:

  • 防止盗链

    • 好比一些网站不想被盗用内容或恶意引用,就会经过Referer限制来者

  • 防止CSRF漏洞

    • (暂不了解

01-03 HTTP状态码

302 --跳转

好比:在响应报文的状态行(第一行)

HTTP/1.1 302 Moved Temporarily

在跳转同时,还会在响应报文的Headers部分有一个Location字段,是跳转到的URL地址,也就是这个响应报文告诉咱们,咱们须要跳转到Location中的URL地址。

除了这两处,还会有Set-Cookie字段,做用是Web服务器向咱们的浏览器颁发凭证,好比咱们经过用户名密码登陆成功后,Web服务器一般就会给咱们颁发一个凭证。

相似的是301。

除此以外,还包括10x,20x,30x,40x,50x;每一个状态码都表明不一样的意思。

分类 分类描述
10x 信息,服务器收到请求,须要请求者继续执行操做
20x 成功,操做被成功接收并处理
30x 重定向,须要进一步的操做以完成请求
40x 客户端错误,请求包含语法错误或没法完成请求
50x 服务器错误,服务器在处理请求的过程当中发生了错误

具体的状态码能够到后面再学习,或用到查看。

01-04 实例演示

咱们打开Edge浏览器,输入https://www.cnblogs.com/Roboduster

咱们用F12打开开发者工具,进入“网络”,刷新一下,查看“文档”,选中head头,能够看到有请求头、响应头,点击就能够看源码,有一些是上面讲过的,还有些字段是不熟悉的。这些字段能够自行查阅。

除了HEADER外,咱们能够看一看响应的具体内容,在左侧的“响应”中;Cookie中有请求的Cookie等等。