天天看點

Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links

  • 【Day02】 Know-Web-How to work?
  • Web-Stage-1-HTTP
  • Main
    • 1. 協定
    • 2. 語言
    • 3. 了解Web漏洞類型
    • 4. 實驗環境
  • HTTP Note
    • 1.HTTP簡介
    • 2.HTTP工作原理
      • 2.1 HTTP三點注意事項
      • 2.2 URI與URL
      • 2.3 IP
      • 2.4 域名
      • 2.5 DNS
    • 3. HTTP所屬層次
    • 4. HTTP 消息結構
    • 5. 用戶端請求消息
    • 6. 伺服器響應消息
    • 7. HTTP請求方法
    • 8. HTTP 響應頭資訊
    • 9. HTTP狀态碼
    • 10. HTTP狀态碼分類
    • 11. HTTP content-type
    • 12. Session ID
    • 13. Cookies
    • 14. GET和POST的差別
    • 15. HTTP Proxies
  • Mission
    • 1. 學習HTTP協定,嘗試用浏覽器(chrome或者firefox)和burpsuite分别抓取HTTP請求頭和響應頭,截圖放在自己筆記中送出到版本庫中
    • 2. 請用自己的話簡述在浏覽器位址欄中輸入網址www.baidu.com,從按Enter鍵到頁面顯示這個過程中,發生了什麼?
  • Reference-Links

【Day02】 Know-Web-How to work?

看着viewer老司機的筆記不錯,我這裡就不重複造輪子了,正所謂站在巨人的肩膀上take note, 感謝viewer老師的開源MD文檔,我就在這裡開始我的每一步細節研究了。

Web-Stage-1-HTTP

web知識點很多,而且很雜。我們隻能挑一些有共性的來學,選一些來講,碰到不會的就現學現查,大部分靠自覺。

Main

本周計劃要學的東西分為四個方面,

1. 協定

  1. HTTP

    推薦圖書《圖解HTTP》

    Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links

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
    • 下載下傳

      連結: https://pan.baidu.com/s/1eSkyF0e 密碼: e27e

      (有時間限制,請盡快下載下傳)
    • 使用介紹
    • http://www.360doc.com/content/16/0425/10/29967943_553593234.shtml
    • https://www.gitbook.com/book/t0data/burpsuite/details
    • https://www.sinosky.org/burp-suite-walkthrough.html
    • https://t0data.gitbooks.io/burpsuite/content/#1F

下面是老師學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用戶端通過

URL

HTTP

服務端即

WEB

伺服器發送所有請求。

Web伺服器有:

Apache

伺服器,

Nginx

伺服器,

IIS

伺服器(

Internet Information Services

)等。

Web伺服器根據接收到的請求後,向用戶端發送響應資訊。

HTTP

預設端口号為

80

,但是你也可以改為

8080

或者其他端口。

2.1 HTTP三點注意事項

  • HTTP是無連接配接

    無連接配接的含義是限制每次連接配接隻處理一個請求。伺服器處理完客戶的請求,并收到客戶的應答後,即斷開連接配接。采用這種方式可以節省傳輸時間。

  • HTTP是媒體獨立的

這意味着,隻要用戶端和伺服器知道如何處理的資料内容,任何類型的資料都可以通過HTTP發送。用戶端以及伺服器指定使用适合的MIME-type内容類型。

* HTTP是無狀态

HTTP協定是無狀态協定。無狀态是指協定對于事務處理沒有記憶能力。缺少狀态意味着如果後續處理需要前面的資訊,則它必須重傳,這樣可能導緻每次連接配接傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。

以下圖表展示了HTTP協定通信流程:

Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links

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協定族。

分層:每一層完成一個特定的任務–封裝,每一層對上一層提供服務時,上一層的資料結構是黑盒,直接作為本層的資料,而不需要關心上一層協定得任何細節,層内部的變化不會影響到其他層。

Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links

4. HTTP 消息結構

  • HTTP是基于用戶端/服務端(C/S)的架構模型,通過一個可靠的連結來交換資訊,是一個無狀态的請求/響應協定。
  • 一個HTTP

    用戶端

    是一個應用程式(Web浏覽器或其他任何用戶端),通過連接配接到伺服器達到向伺服器發送一個或多個HTTP的請求的目的。
  • 一個HTTP

    伺服器

    同樣也是一個應用程式(通常是一個Web服務,如Apache Web伺服器或IIS伺服器等),通過接收用戶端的請求并向用戶端發送HTTP響應資料。
  • HTTP使用統一資源辨別符(

    Uniform Resource Identifiers

    ,

    URI

    )來傳輸資料和建立連接配接。
  • 一旦建立連接配接後,資料消息就通過類似Internet郵件所使用的格式RFC5322和多用途

    Internet郵件擴充

    MIME

    )RFC2045來傳送。

5. 用戶端請求消息

用戶端發送一個HTTP請求到伺服器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求資料四個部分組成。
Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links

6. 伺服器響應消息

HTTP響應也由四個部分組成,分别是:狀态行、消息報頭、空行和響應正文。
Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links

7. HTTP請求方法

根據HTTP标準,HTTP請求可以使用多種請求方法。

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links

8. HTTP 響應頭資訊

HTTP請求頭提供了關于請求,響應或者其他的發送實體的資訊。

Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links

For example:

Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links

9. HTTP狀态碼

當浏覽者通路一個網頁時,浏覽者的浏覽器會向網頁所在伺服器送出請求。當浏覽器接收并顯示網頁前,此網頁所在的伺服器會傳回一個包含HTTP狀态碼的資訊頭(server header)用以響應浏覽器的請求。

HTTP狀态碼的英文為

HTTP Status Code

下面是常見的HTTP狀态碼:

- 200 - 請求成功

- 301 - 資源(網頁等)被永久轉移到其它URL

- 404 - 請求的資源(網頁等)不存在

- 500 - 内部伺服器錯誤

10. HTTP狀态碼分類

HTTP狀态碼由三個十進制數字組成,第一個十進制數字定義了狀态碼的類型,後兩個數字沒有分類的作用。HTTP狀态碼共分為5種類型:

Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links
Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links
Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links
Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links

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=KXIOt4cS; expires=Mon, -May- :: 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請求的原理圖

Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links

Mission

1. 學習HTTP協定,嘗試用浏覽器(chrome或者firefox)和burpsuite分别抓取HTTP請求頭和響應頭,截圖放在自己筆記中送出到版本庫中

Ans: 不同的 Burpsuite 同一系列的差別不太大,但是奇偶數跨越的版本一般都會有一些限制,burpsuite有很多的用法,但是主要子產品就幾個,通過不同的配置可以達到不同的效果,這裡隻是簡述下我着重關注的地方,也是在CTF_web賽題中需要接觸多的方面:

  • BP 抓取效果圖:
    • 斷點抓取:
      Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links
    • 曆史抓取:
      Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links
  • BurpSuite 測試流程
    Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links
  • BP 重點子產品 (以後寫各種情況的抓包詳情分析)
    • 心髒-代理Proxy
    • 重放-Repeater
    • 爆破-Intruder
    • 蜘蛛-Spider
  • BP 各功能子產品對照翻譯(彩蛋)
    Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links
    Know Web How to work?【Day02】 Know-Web-How to work?Web-Stage-1-HTTPMainHTTP NoteMissionReference-Links
  • 參考:
    • BurpSuite-WooYun

2. 請用自己的話簡述在浏覽器位址欄中輸入網址

www.baidu.com

,從按Enter鍵到頁面顯示這個過程中,發生了什麼?

  • 簡述:
    • 網址如果是域名的話會先通過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事件

  • 價值參考:
    • 前端必讀:浏覽器内部工作原理
    • 淺析浏覽器輸入URL到頁面輸出執行流程

Reference-Links

  • [1]: HTTP學習筆記
  • [2]: HTTP協定中GET和POST方法的差別
  • [3]: 《Http協定入門》 by阮一峰

繼續閱讀