寫在前面:感謝米安網,感謝task分享,感謝Assassin_CHN分享
http協議是一個滲透測試人員或者開發人員必須要懂的協議,我們訪問網站也必須要用到http協議。
1.http簡介
http(Hyper Text Transfer Protool超文本傳輸協議),一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,是萬維網交換信息的基礎,允許將HTML(超文本標記語言)文檔從web服務器傳送到web瀏覽器。
也就是說我們訪問網站必須要用到http協議。
2.使用firebug和curl觀察http協議
firebug是一款非常好用的網頁調試工具,可以查看http請求;
curl是一個利用url語法規定來傳輸文件和數據的工具,支持很多協議,如http、FTP、Telnet等,使用curl可以很清楚的看到所使用的協議。
2.1 firebug
首先打開Mozilla Firefox(或Google Chrome),添加firebug組件
然后訪問網站,以http://www.moonsos.com/為例,右擊鼠標,選擇“使用firebug審查元素”
出現如下界面:
然后選擇“網絡”,就可以看到請求信息
備注:直接右擊頁面,選擇“審查元素”-->選擇“網絡”也可以看到請求的詳細信息。
首次打開firebug沒有顯示請求信息,我們在URL框中回車后,會看到三個GET請求,說明瀏覽器向服務器發送了三次請求
點擊任意一個請求,在響應頭信息中可以看到請求的詳細信息
2.2 curl
curl也可以在windows上安裝curl.exe工具。效果都是一樣的。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@yvonne ~]
# curl -I www.moonsos.com
HTTP
/1
.1 200 OK
Server: Apache
/2
.2.25 (Win32) PHP
/5
.3.5
Connection: keep-alive
Date: Mon, 28 Dec 2015 13:41:58 GMT
Last-Modified: Mon, 28 Dec 2015 13:40:00 GMT
Content-Type: text
/html
; charset=utf-8
Content-Length: 35764
X-Powered-By: PHP
/5
.3.5
Set-Cookie: safedog-flow-item=0B04B99E0C1B1CFD0D0CCCB472D82967; expires=Thur, 3-Feb-2152 16:53:17 GMT; domain=moonsos.com; path=/
X-Daa-Tunnel: hop_count=1
X-Cache-Lookup: Hit From Upstream
X-Cache-Lookup: Hit From Upstream
|
3.http請求的詳解
3.1firebug中的http報文信息
HTTP請求首部常用首部:
首部 |
類型 |
描述 |
Date |
通用 |
提供日期和時間標志,說明報文是什么時候創建的 |
Content-Length |
實體 |
報文中實體主體的字節大小。如果進行了gzip壓縮,這個大小就是壓縮后的大小。客戶端通過它確定報文截尾。 |
Accept |
請求 |
客戶端通知服務器可以接收哪些媒體類型 |
Content-Type |
實體 |
報文中對象的媒體類型 |
Cache-Control |
通用 |
見 “緩存首部” |
Connection |
通用 |
Connection:close響應結束之后,連接會被關閉。不支持持久連接的HTTP/1.1應用程序要在所有請求和響應中插入Connection:close。 |
Server |
響應 |
識別服務器軟件 |
Set-Cookie |
響應 |
設置服務器產生的ID |
HTTP請求其他首部
首部 |
類型 |
描述 |
Expect:100-continue |
請求 |
客戶端告知服務器它們需求某種行為。 |
Transfer-Encoding:chunk |
通用 |
使用分塊傳輸 |
User-Agent |
請求 |
用戶的瀏覽器軟件 |
Host |
請求 |
請求資源所在的服務器。(Apache中按Host區分虛擬主機) |
Location |
響應 |
令客戶端重定向至URL |
Vary |
響應 |
服務端通知客戶端,在服務端的協商中會使用哪些來自客戶端的首部。它的值是一個首部列表,服務器會去查看這些首部,以確定什么內容作為響應發回給客戶端。 |
3.2 http協議是無狀態的,客戶端(瀏覽器)發起request請求,服務器返回response響應,然后建立連接。
http協議request請求包括三個部分:請求頭(請求方法)、請求行(消息報頭)、請求正文。
http協議response響應包括三個部分:響應頭、響應行(消息消息報頭)、響應正文(消息主題)。
3.3 常用的http請求方法:
GET | 請求獲取由request-url標識的資源 |
POST | 在request-url所標識的資源后附加新的數據 |
HEAD | 請求獲取由request-url所標識資源的響應消息報頭 |
TRACE | 請求服務器會送收到的請求信息,主要用於測試或診斷 |
PUT | 請求服務器存儲一個資源,並用request-url作為其標識 |
DELETE | 請求服務器刪除由request-url所標識的資源 |
OPTIONS | 請求查詢服務器性能,或查詢與服務器相關的選項和需求 |
3.4 http請求常見返回狀態碼:
1xx 臨時響應
返回碼 |
說明 |
100:Continue |
請求者應當繼續提出請求。 服務器返回此代碼表示已收到請求的第一部分,正在等待其余部分。 |
101:Switching Protocols |
請求者已要求服務器切換協議,服務器已確認並准備切換。 |
2xx 成功
返回碼 |
說明 |
200:OK |
服務器已成功處理了請求。 |
206:Partial Content |
服務器成功處理了部分 GET 請求。 |
3xx 重定向
返回碼 |
說明 |
301:Moved Permanently |
請求的網頁已永久移動到新位置 |
302:Found |
服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求。只在當次請求中生效。 |
303:See Other |
請求者應當對不同的位置使用單獨的 GET 請求來檢索響應時,服務器返回此代碼。 對於除 HEAD 之外的所有請求,服務器會自動轉到其他位置。 |
304:Not Modified |
自從上次請求后,請求的網頁未修改過。服務器返回此響應時,不會返回網頁內容。如果網頁自請求者上次請求后再也沒有更改 過,您應當將服務器配置為返回此響應(稱為 If-Modified-Since HTTP 標頭)。 |
305:Use Proxy |
請求者只能使用代理訪問請求的網頁。 如果服務器返回此響應,還表示請求者應使用代理。 |
307:Temporary Redirect |
服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求。 此代碼與響應 GET 和 HEAD 請求的 301 代碼類似,會自動將請求者轉到不同的位置 |
4xx 請求錯誤
返回碼 |
說明 |
400:Bad Request |
服務器不理解請求的語法。服務器沒有收到GET。 |
401:Unauthorized |
請求要求身份驗證。 對於需要登錄的網頁,服務器可能返回此響應。 |
403:Forbidden |
服務器拒絕請求。 |
404:Not Found |
服務器找不到請求的任何信息。 |
405:Method Not Allowed |
禁用請求中指定的方法。 |
406:Not Acceptable |
無法使用請求的內容特性響應請求的網頁。 |
407:Proxy Authentication Required |
此狀態代碼與 401(未授權)類似,但指定請求者應當授權使用代理。 |
411:Length Required |
服務器不接受不含有效內容長度標頭字段的請求。 |
413:Request Entity Too Large |
服務器無法處理請求,因為請求實體過大,超出服務器的處理能力。 |
414:Request-URI Too Large |
請求的 URI(通常為網址)過長,服務器無法處理。 |
415:Unsupported Media Type |
請求的格式不受請求頁面的支持。 |
416:Requested range not satisfiable |
如果頁面無法提供請求的范圍,則服務器會返回此狀態代碼。 |
417:Expectation Failed |
服務器未滿足”期望”請求標頭字段的要求。(Expect) |
5xx 服務器錯誤
返回碼 |
說明 |
500:Internal Server Error |
服務器遇到錯誤,無法完成請求。 |
502:Bad Gateway |
服務器充當網關或代理,從上游服務器收到無效響應。 |
503:Service Unavailable |
服務器目前無法使用(由於超載或停機維護)。 通常,這只是暫時狀態 |
504:Gateway Timeout |
服務器充當網關或代理,但沒有及時從上游服務器收到請求。 |
505:HTTP Version Not Supported |
服務器不支持請求中所用的 HTTP 協議版本。 |
4.手工模擬http請求
4.1 通過Telnet模擬http請求
windows默認不支持Telnet,需要開啟Telnet服務,如下圖:
現在就可以開始模擬http的請求了,是不是有點小興奮ヾ(o)ヾ呢O(∩_∩)O~~
這里我先寫完操作步驟,然后再一步一步的詳細講解
·首先建議在notepad記事本里寫下要請求的內容
GET /index.html HTTP/1.1
HOST: www.moonsos.com
·然后cmd打開命令dos界面,輸入要請求的網站域名和端口
telnet www.moonsos.com 80
·回車后按 'CTRL+]',然后繼續回車,將記事本中寫好的內容復制到命令行里
備注:這里的兩步如果長時間就會自動遺失對主機的連接
·將記事本中的內容復制進去后,連着兩次回車,就可以看到GET到的內容了。
結果:
這里是GET請求,換做POST或HEAD也是一樣的。只要將請求方法換做POST或HEAD就好。
小結通過Telnet模擬http請求:
1.telnet www.moonsos.com 80
2.'CTRL+]'
3.回車Enter
4.輸入請求,兩次回車Enter
4.2 curl.exe[windows工具]或curl[linux命令]
[root@yvonne ~]# curl -I www.moonsos.com
HTTP/1.1 200 OK
Server: Apache/2.2.25 (Win32) PHP/5.3.5
Connection: keep-alive
Date: Mon, 28 Dec 2015 14:23:51 GMT
Last-Modified: Mon, 28 Dec 2015 14:20:00 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 35764
X-Powered-By: PHP/5.3.5
Set-Cookie: safedog-flow-item=0B04B99E0C1B1CFD0D0CCCB472D82967; expires=Thur, 3-Feb-2152 17:35:11 GMT; domain=moonsos.com; path=/
X-Daa-Tunnel: hop_count=1
X-Cache-Lookup: Hit From Upstream
X-Cache-Lookup: Hit From Upstream