開啟靶機
打開環境,查看顯示
點擊Give me Flag后發生跳轉
根據題目提示為HTTP臨時重定向
簡單記錄一下HTTP臨時重定向是什么
HTTP重定向:服務器無法處理瀏覽器發送過來的請求(request),服務器告訴瀏覽器跳轉到可以處理請求的url上。(瀏覽器會自動訪問該URL地址,以至於用戶無法分辨是否重定向了。)
重定向的返回碼3XX說明。Location響應首部包含了內容的新地址或是優選地址的URL。
狀態碼
301:在請求的URL已被移除時使用。響應的Location首部中應該包含資源現在所處的URL。
302:與301狀態碼類似,但是,客戶端應該使用Location首部給出的URL來零食定位資源,將來的請求仍然使用老的URL。
官方的比較簡潔的說明:
- 301 redirect: 301 代表永久性轉移(Permanently Moved)
- 302 redirect: 302 代表暫時性轉移(Temporarily Moved )
盡量使用301跳轉!301和302狀態碼都表示重定向,就是說瀏覽器在拿到服務器返回的這個狀態碼后會自動跳轉到一個新的URL地址,這個地址可以從響應的Location首部中獲取(用戶看到的效果就是他輸入的地址A瞬間變成了另一個地址B)——這是它們的共同點。他們的不同在於。301表示舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜索引擎在抓取新內容的同時也將舊的網址交換為重定向之后的網址;302表示舊地址A的資源還在(仍然可以訪問),這個重定向只是臨時地從舊地址A跳轉到地址B,搜索引擎會抓取新的內容而保存舊的網址。
HTTP中的重定向和請求轉發的區別
轉發是服務器行為,重定向是客戶端行為。為什么這樣說呢,這就要看兩個動作的工作流程:
轉發過程:客戶瀏覽器發送http請求——》web服務器接受此請求——》調用內部的一個方法在容器內部完成請求處理和轉發動作——》將目標資源發送給客戶;
在這里,轉發的路徑必須是同一個web容器下的url,其不能轉向到其他的web路徑上去,中間傳遞的是自己的容器內的request。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感覺不到服務器做了轉發的。轉發行為是瀏覽器只做了一次訪問請求。
重定向過程:客戶瀏覽器發送http請求——》web服務器接受后發送302狀態碼響應及對應新的location給客戶瀏覽器——》客戶瀏覽器發現是302響應,則自動再發送一個新的http請求,請求url是新的location地址——》服務器根據此請求尋找資源並發送給客戶。
在這里location可以重定向到任意URL,既然是瀏覽器重新發出了請求,則就沒有什么request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問請求的。
重定向,其實是兩次request
第一次,客戶端request A,服務器響應,並response回來,告訴瀏覽器,你應該去B。這個時候IE可以看到地址變了,而且歷史的回退按鈕也亮了。重定向可以訪問自己web應用以外的資源。在重定向的過程中,傳輸的信息會被丟失。
通過瀏覽器工具進行查看
可以看到有一個狀態為302的域名
使用Linux環境下的curl進行抓取
curl介紹:
curl不會進行跳轉,curl -L會跟隨跳轉
抓取結果如下
成功拿到flag