今天我們要來做CSRF中剩下的兩題啦,一題是關於CSRF時封包Content type影響,另一個是關於CSRF變體

這題當中,我們要把資料送到指定的端點,讓我們先隨便發送一個封包當作範例

接著把題目指定的
{
"name" : "WebGoat",
"email" : "webgoat@webgoat.org",
"content" : "WebGoat is the best!!"
}
換上去,把host改成其他的端口,應該就可以了

......嗎?
重試了很久,實在沒辦法只好看提示

對喔,這關是要告訴我們如何利用Content Type,那就把每一種都試試看

試到text/plain的時候總算過了,但我還是不太懂為甚麼他可以所以再去查了一下
原來瀏覽器中有一個叫做CORS(跨來源共享) 預檢請求 (Preflight Request),在傳送封包時如果使用application/json這種非預設content type或者使用GET, POST, PUT以外的自訂方法,或者X-Requested-With這種自訂標頭時便會發送一個OPTION預檢請求來詢問伺服器這封包是否允許通過
有三種Content Type是HTML表單預設,有機會被認為簡易請求不被檢查
* application/x-www-form-urlencoded* multipart/form-data* text/plain
至於這題為甚麼是使用text/plain,是因為另外兩種格式無法滿足我們這題的json檔格式條件,發送後就會出錯
然後這題判定比較寬 應該只要Content Type對就好了,畢竟從上張圖片可以看見裡面有X-Requested-With這種自訂標頭還是能過。

這就是最後一題啦,也就是一開始提到的CSRF變種,Login CSRF
和一般的CSRF不同,不是攻擊者冒用受害者身分進行操作,反而是讓受害者使用攻擊者指定的身分進行操作,最常見例子的是在購物網站上使用這種方法,因為雖然受害者有真正買到東西,好像沒有受害,但實際上信用卡,住址等等的資料已經保存在攻擊者的帳號上了
讓我們回到題目上,先用主帳號點看看按鈕

能看到毫不意外的被看出來了
接下來創建一個新指定帳號csrf-mingming後再點看看

報出恭喜了,讓我們再回到原本的mingming帳號看看

我們就通過這題了,好耶!