引言
今天我們來解 Web 滲透 ( 滲透測試 ) 的題目,
在這之前,你需要先初步了解 HTTP 以及它的許多請求方法 。
這邊就簡單講 HTTP 兩個常用請求方法 GET, POST ,
以及今天解題用的一個額外方法 HEAD 。
GET
這個方法主要用於一般讀取網頁,當你不需要對伺服器傳送什麼參數時,
主要都是用 GET ,但它也可以傳送參數,只是能傳送的資料少,
而且資料會直接在網址中看見。
( 以 picoCTF 某頁面為例,https://play.picoctf.org/practice/challenge/132?category=1&page=1
網址後會接上由 ?
開頭的一串資料,資料間由 &
分隔,
這明顯是 GET 請求,且資料是 category=1 、 page=1 ,
從字面上可以看出這個請求希望帶到「第1個分類」與「第1頁」 )
POST
當你需要傳送較大量資料時,通常會使用 POST 請求,
它會將資料以「表單」形式送給伺服器,諸如「登入」、
「填表單」、「線上測驗」等等,幾乎都是以這種請求完成,
POST 請求的資料不會在網址中被看到,而且傳送資料大小無限制。
HEAD
這個請求其實較沒那麼常用,它跟 GET 非常類似,
但是 GET 會把請求的網頁送過來 ( 你才能看到請求的頁面 ) ,
HEAD 則不會,它只會把網頁的檔頭資訊傳過來,讓你知道請求內容的大小等資訊,
因此 HEAD 請求常被用在請求內容相當大時,
或是你需要短時間內發出許多請求,來確認內容中一些資訊的時候。
更多資訊可以看看我分享的維基百科連結,或是找找關於 HTTP 的資訊,
基本上想要解這個主題的題目一定必須對 HTTP 有基本了解。
Web Exploitation / GET aHEAD
這題的標題是有玄機的, get ahead
原來的意思是 獲取成功
,
但同時也暗示 get a head
,希望你用 HEAD 請求來解題,才能「獲取成功」。
題目給了一串網址,直接點進去會看到一組按鈕,一個按了背景變藍,一個按了背景變紅。
通常拿到網頁第一件事,就是按下 F12 ,開啟開發者工具 (限定 Google Chrome) ,
你可以從中找到許多網頁的資訊,但是裡面並沒有可用的 flag 線索。
其實從題目標題下手就行了,我們對伺服器發出 HEAD 請求吧!
但是要怎麼做呢?
我們必須寫程式來對這個網頁伺服器發出請求, Python 就是相當適合的工具:
import requests
r = requests.head('http://mercury.picoctf.net:45028/')
print(r)
print(r.headers)
Requests 是 Python 中最常用來處理 HTTP 的函式庫,
其中它也可以處理 HTTP 請求。
r = requests.head('http://mercury.picoctf.net:45028/')
代表對該網址發出 HEAD 請求,並把結果回傳給 r 。print(r.headers)
可以把請求得到的檔頭印出來。
執行會得到:
<Response [200]>
{'flag': 'picoCTF{r3j3ct_th3_du4l1ty_775f2530}', 'Content-type': 'text/html; charset=UTF-8'}
原來題目將 flag 嵌在 HEAD 請求的檔頭中。