一、Web 简介

1、什么是 Web

学习 Web 安全当然要简单的了解什么是 Web,Web 与生活息息相关,上个网站浏览新闻,看个视频等其中涉及到几个基本的点。从通信,会接触到 URL,到协议,会接触到 HTTP,再到前后端的概念,前端即 HTML,CSS,JavaScript,三剑客。后端,即处理脚本语言,比如PHP,JAVA,python,SQL 等等,再细致的分还能分为很多,这是一个庞大的链路。

WEB 就是所谓的 WWW 全球广域网(World Wide Web),也就是常说的万维网。它是一种基于超文本和 HTTP 的、全球性的、动态交互的、跨平台的分布式图形信息系统,是建立在 Internet 上的一种网络服务,为浏览者在 Internet 上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet 上的信息节点组织成一个互为关联的网状结构。

上面说的比较官方,根据实际生活来看,就是可以与人交互的网页。Web 也有它的发展史,发展到现在与人交互、处理各种事物等,各种管理平台也应运而生,因此也带了了很多的风险。

2、Web 发展史

2.1 静态页面

互联网最开始 Web 网站的主要内容是静态的,由文字和图片组成,制作和表现形式是以表格为主。当时的用户行为仅仅是浏览网页。

2.2 多媒体阶段

随着技术不断发展,音频、视频、Flash 等多媒体技术应运而生。多媒体的加入使得网页变得更加生动形象,网页上的交互也给用户带来了更好的体验。

2.3 CGI 阶段

渐渐的多媒体已经不能满足人们的请求,于是 CGI(Common Gateway Interface)应运而生。CGI 定义了 Web 服务器与外部应用程序之间的通信接口标准,因此 Web 服务器可以通过 CGI 执行外部程序,让外部程序根据 Web 请求内容生成动态的内容。

这个时候各种编程语言,如 PHP、ASP、JSP 等也逐渐加入市场,基于这些语言可以实现更加模块化、功能更强大的应用程序。

2.4 AJAX

开始的时候用户提交整个表单后才能获取结果,用户体验极差。于是 Ajax(Asynchronous Javascript And XML)技术逐渐流行起来,它使应用在不更新整个页面的前提下也可以获得或更新数据。这使得 Web 应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。

2.5 MVC

随着 Web 应用开发越来越标准化,出现了 MVC 等思想。MVC 是 Model View Control 的缩写,Model 用于封装数据和数据处理方法,视图 View 是数据的 HTML 展现,控制器 Controller 负责响应请求,协调 Model 和 View。

Model,View 和 Controller 的分开,是一种典型的关注点分离的思想,使得代码复用性和组织性更好,Web 应用的配置性和灵活性也越来越好。而数据访问也逐渐通过面向对象的方式来替代直接的 SQL 访问,出现了 ORM(Object Relation Mapping)的概念。

除 MVC 外,类似的设计思想还有 MVP,MVVM 等。

2.6 RESTful

在 CGI 时期,前后端通常是没有做严格区分的,随着解耦和的需求不断增加,前后端的概念开始变得清晰。前端主要指网站前台部分,运行在 PC 端、移动端等浏览器上展现给用户浏览的网页,由 HTML5、CSS3、JavaScript 组成。后端主要指网站的逻辑部分,涉及数据的增删改查等。

此时 REST(Representation State Transformation)逐渐成为一种流行的 Web 架构风格。REST 鼓励基于 URL 来组织系统功能,充分利用 HTTP 本身的语义,而不是仅仅将 HTTP 作为一种远程数据传输协议。

2.7 云服务

随着时间的发展,Web 的架构越发复杂,负载均衡、数据库分表、异地容灾、缓存、CDN、消息队列等技术开始应用,增加了 Web 开发和运维的复杂度。同时云服务开始逐渐发展,部署环境容器化,各个功能拆成微服务或是 Serverless 的架构。

3、Web 工作方式

先举个简单的例子:

有一天你和你的小女朋友来到了一家餐厅,桌子上放着餐单,上面各式各样的菜品,土豆炖牛肉、红烧肉啦等等,都是你们爱吃的菜,这时服务员过来,问两位需要点什么菜品,你们随机点了这两个爱吃的菜,服务员记录在了一张纸上,大步走向后厨房。不久,菜品做好了,服务员给你端上了美味佳肴,你们大快朵颐,饭后,你们决定溜溜,然后……(就该各回各家了)

Web 的构造大致分为前端和后端,协议使用的是 HTTP,通信方法使用的是 URL。根据这个例子进一步说明:

桌子上的餐单即为一个网页,一个精心构造的前端页面,上面的菜品即为一个个超链接,你选择了土豆炖牛肉,这时服务员通过 HTTP 协议打包好你的请求,通过 URL 去访问你需要的这份资源,然后来到了后端,就是后厨房嘛,一般这就是网站的服务器所在地,厨师也就是说服务器奋力的给你做好这份菜品,再通过服务员送到了你的餐桌上,即呈现在了你所看到的网页上。

举了个通俗的例子,目的是便于理解。

3.1 URL

URL 即为统一资源定位符(Uniform Resource Locator),就是平时所用到的 URL 连接,比如 www.baidu.comwww.bing.com等都是 URL 地址,便于记忆,不然一堆 IP 地址,记到什么时候去。

但现在 URL 地址不仅仅是方便记录的原因了,一般厂商都会使用 CDN 节点,很难知道它们服务器的真实 IP 地址。如果知道了服务器的真实 IP 地址,对于厂商来说是一个很大的风险。所以在渗透测试时,信息收集到真实的 IP 地址也是一个关键的地方。

URL 标准格式:

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

schema:协议类型
host:服务器地址
port:端口号
path:路径
?query-string:查询语句
#anchor:页面锚点
  • 协议类型(Schema)一般就是常见的 http 或者 https

  • 服务器地址(host)一般就是 URL 地址,知道真实的 IP 地址也可以打开目标网页

  • 端口号(port)一般都是 80 端口(可以省略),使用的是 http 协议,而 https 协议使用的 443 端口

  • 路径(path)是目标服务器存放该页面的相对路径

  • ?query-string 是要查询的语句

  • #anchor 是页面的某个锚点,一般较少见

例如:

https://cn.bing.com/search?q=www.cnblogs.com%2Fhkalpa%2F&qs=n&form=QBRE&sp=-1&pq=www.cnblogs.com%2Fhkalpa%2F&sc=0-23&sk=&cvid=8547D32D215449B3A897E1A87E8C61E5&ghsh=0&ghacc=0&ghpl=

3.2 DNS 服务器

DNS(域名系统,Domain Name System),它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。通俗来说就是一个大型的数据库,里面存放着 URL 以及与其对应的 IP 地址,类比一下就好像图书馆的索引一样,根据索引就可以找到书。

3.3 上网流程

用浏览器访问各种资源:浏览器是客户端角色,输入 URL 时浏览器会首先请求 DNS 服务器,DNS 根据请求的 URL 返回对应的 IP 地址,接下来,浏览器会带着请求的信息去访问该 IP 的服务器,来处理请求,当服务器接收到了请求后,会根据 HTTP 协议所带的数据,来对客户端的访问进行理,这个处理就是后端过程,可能使用的是 PHP,可能是 JAVA 语言,或者其它,处理完成之后再将这些信息返回给客户端,客户端根据返回的数据进行呈现,呈现的网页即为前端,其中包括了 HTML、CSS、JavaScript等基本元素,一个丰富的页面就呈现在了电脑屏幕。

二、HTTP 简介

HTTP(HyperText Transfer Protocol,超文本传输协议),是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。它是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

1、HTTP 请求报文

完整的 HTTP 请求包含以下内容,请求方法一般是 GET 和 POST,URL 即请求的地址,协议版本一般都是 HTTP/1.1,然后配合着请求头,来访问请求的资源,请求头有通用的,也有厂家自定义的。如果是 POST 请求,会携带请求数据。GET 请求的数据会在 URL 处携带查询,即 ?query-string 部分,POST 把查询部分放在了请求报文中,即下面请求数据的部分,这样做可以较为安全的保障所请求的数据。GET 所请求的数据在 URL 中,一般都能看到,但是不管哪种请求都或多或少的加入了编码,这样的数据不进行特定方式解码,是看不到具体数据的。

1.1 请求方法

  • GET:请求指定页面信息,并返回主体,数据插入进 URL 中进行传输。

  • POST:向指定资源提交数据进行请求,数据被放在请求数据体中传输。

  • HEAD:类似 GET 请求,但只获取头部信息,无响应体。

  • PUT:将传输数据取代指定文档传输。

  • DELETE:请求服务器删除指定页面。

  • CONNECT:与代理服务器可以进行管道方式连接。

  • OPTIONS:查询针对请求 URL 指定资源支持的方法。

  • TRACE:可以对请求消息的传输路径追踪。

  • MOVE:请求服务器将指定的页面移动到另一个网络地址上。

1.2 请求头部

  • Hsot:请求资源的服务器

  • User-Agent:客户端程序的信息

  • If-Match:比较实体标记(Etag)

  • If-Modified-Since:比较资源更新的时间

  • Authorization:web 认证信息

  • Accept:用户代理可处理的媒体类型

  • Accept-Charset:优先的字符集

  • Accept-Encoding:优先的内容编码

  • Accept-Language:优先的语言(自然语言)

2、HTTP 响应报文

2.1 响应报文组成

第一行:HTTP 协议版本 + 状态码 + 原因短语
下面若干行:可选的响应首部信息
空行
剩下的消息:为响应的信息

2.2 响应状态码

  • 1xx:信息,服务器收到请求,需要请求者继续执行相关操作。

  • 2xx:成功,操作被成功接受并处理。

  • 3xx:重定向,需要进行附加操作以完成请求。

  • 4xx:客户端错误,请求中存在语法错误,服务器无法处理请求。

  • 5xx:服务器错误,服务器在处理请求的过程发生了错误。

常见的状态码含义:

  • 200 OK:表示客户端发来的请求在服务器端被正常处理了。

  • 301 Not Modified:表示客户端附带条件的请求,未满足条件。

  • 400 Bad Request:表示请求报文中存在语法错误。

  • 401 Unauthorized:表示发送的请求需要有通过 HTTP 认证的信息。

  • 403 Forbidden:表明对请求资源的访问被服务器拒绝了。

  • 404 Not Found:服务器无法找到请求的资源。

  • 500 Internal Server Error:表明服务器端在执行请求时发生了错误。

  • 503 Service Unavailable:表明服务器暂时处于超负载或进行停机维护

2.3 响应头部

  • Server:服务器的信息

  • Location:状态码出现 3xx 是一般会配合该头部指向重定向的地址。

  • Set-cookie:服务器向用户发放的表示凭证。

  • HttpOnly:使 JavaScript 脚本无法获取 cookie,防止 xss 攻击。

  • X-Frame-Options:控制网站内容在其它 web 网站的 Frame 标签内的显示问题。防止点击劫持攻击;

    • DENY:拒绝

    • SAMEORGIN:仅同源域名下的页面匹配时许可

  • X-Powered-By:可以知道 Web 后端语言(但是可以修改)

2.4 Cookie

HTTP 是无状态协议,单纯从网络上请求数据,服务器端并不知道是谁请求的数据。这时 Cookie 就出现了,它的作用是给每个客户端颁发一个通行证,这样服务端就能确认目标身份了。Cookie 不单单是记录身份,更多是记录访问者的一些信息,不然服务器一天接收那么多请求,再返回请求,它无法区分不同的访问者,这些访问者又请求了哪个信息。

至于cookie 中记录的都什么意思?恐怕只有厂家知道了。

三、总结

WEB 没有什么需要深入理解的概念。渗透时常见 URL,对于查询数据的分析,到后面 POST 请求一个数据,针对不同的查询来进行模糊测试。HTTP 部分常见的无非就是 GET 和 POST,有些漏洞会涉及到 PUT,上传一些数据,来 Getshell。剩下的就是请求头或者响应头的部分,常见头的部分,大致是上面列出来的。当然,还有很多头部是厂家自定义的,具体含义恐怕除了猜测,只有厂家知道了。还有主要的一个地方是 Cookie 头,这是在测试中也经常需要的。

原文地址:http://www.cnblogs.com/HKalpa/p/16787521.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性