CSRF(跨站請求僞造)概述 Cross-site request forgery 簡稱爲「CSRF」,在CSRF的攻擊場景中攻擊者會僞造一個請求(這個請求通常是一個連接),而後欺騙目標用戶進行點擊,用戶一旦點擊了這個請求,整個攻擊就完成了。因此CSRF攻擊也成爲"one click"攻擊。 不少人搞不清楚CSRF的概念,甚至有時候會將其和XSS混淆,更有甚者會將其和越權問題混爲一談,這都是對原理沒搞清楚致使的。
場景需求:
小黑想要修改大白在購物網站tianxiewww.xx.com上填寫的會員地址。
先看下大白是如何修改本身的密碼的:
登陸---修改會員信息,提交請求---修改爲功。
因此小黑想要修改大白的信息,他須要擁有:1,登陸權限 2,修改我的信息的請求。
可是大白又不會把本身xxx網站的帳號密碼告訴小黑,那小黑怎麼辦?
因而他本身跑到www.xx.com上註冊了一個本身的帳號,而後修改了一下本身的我的信息(好比:E-mail地址),他發現修改的請求是:
【http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change】
因而,他實施了這樣一個操做:把這個連接假裝一下,在小白登陸xxx網站後,欺騙他進行點擊,小白點擊這個連接後,我的信息就被修改了,小黑就完成了攻擊目的。
爲啥小黑的操做可以實現呢。有以下幾個關鍵點:
1.www.xxx.com這個網站在用戶修改我的的信息時沒有過多的校驗,致使這個請求容易被僞造;
---所以,咱們判斷一個網站是否存在CSRF漏洞,其實就是判斷其對關鍵信息(好比密碼等敏感信息)的操做(增刪改)是否容易被僞造。
2.小白點擊了小黑髮給的連接,而且這個時候小白恰好登陸在購物網上;
---若是小白安全意識高,不點擊不明連接,則攻擊不會成功,又或者即便小白點擊了連接,但小白此時並無登陸購物網站,也不會成功。
---所以,要成功實施一次CSRF攻擊,須要「天時,地利,人和」的條件。
固然,若是小黑事先在xxx網的首頁若是發現了一個XSS漏洞,則小黑可能會這樣作: 欺騙小白訪問埋伏了XSS腳本(盜取cookie的腳本)的頁面,小白中招,小黑拿到小白的cookie,而後小黑順利登陸到小白的後臺,小黑本身修改小白的相關信息。
---因此跟上面比一下,就能夠看出CSRF與XSS的區別:CSRF是借用戶的權限完成攻擊,攻擊者並無拿到用戶的權限,而XSS是直接盜取到了用戶的權限,而後實施破壞。 所以,網站若是要防止CSRF攻擊,則須要對敏感信息的操做實施對應的安全措施,防止這些操做出現被僞造的狀況,從而致使CSRF。好比:
--對敏感信息的操做增長安全的token;
--對敏感信息的操做增長安全的驗證碼;
--對敏感信息的操做實施安全的邏輯流程,好比修改密碼時,須要先校驗舊密碼等。php
開始今天的實驗。html
萬事開頭先抓包:apache
先登陸,帳號有vince/allen/kobe/grady/kevin/lucy/lili,密碼所有是123456安全
修改一下我的信息看看包長啥樣:cookie
後臺沒作CSRF token,同時也是經過GET請求來提交修改信息,咱們拿到這個,修改一下,而後讓allen點擊就好,咱們構造的URL中把地址add改成hacker。allen一點擊就修改了地址。post
這其實只是直接修改了用戶提交數據以達到篡改的目的。網站
衆所周知,post形式的構造是沒法在url中體現的。因此只能從請求包中的參數想辦法。url
這裏直接使用別人寫的script,思路是本身搭一個頁面,誘導用戶點進來,劫持用戶發送修改信息的請求。spa
1 <html> 2 <head> 3 <script> 4 window.onload = function() { 5 document.getElementById("postsubmit").click(); 6 } 7 </script> 8 </head> 9 <body> 10 <form method="post" action="http://192.168.1.104/pikachu/vul/csrf/csrfpost/csrf_post_edit.php"> 11 <input id="sex" type="text" name="sex" value="boy" /> 12 <input id="phonenum" type="text" name="phonenum" value="54213" /> 13 <input id="add" type="text" name="add" value="hacker" /> 14 <input id="email" type="text" name="email" value="allen@pikachu.com" /> 15 <input id="postsubmit" type="submit" name="submit" value="submit" /> 16 </form> 17 </body> 18 </html>
(本人主機ip192.168.1.104,apache也搭在這個上面。正所謂:「我打我本身」)code
把這個頁面放在pikachu/doge_csrf上
點進這個連接康康:
神奇的事情發生了!!!
……
反正我沒作出來這個……
而後忽然想,試試爆破的方式,繞過token???
而後爆破完了,提交上去,而後,我到底在幹什麼???
這裏提交數據加上了token,每次提交是有一個隨機的token 用於驗證(有點像一次一密?這麼耗資源的事情大公司應該都不會這麼幹)
這裏的確是無法僞造的。
因此我上述乾的全部事情在我作完以後,就在想本身到底在幹什麼,就以爲本身剛纔是否是懵*了……我只是單純提交了一次的token 下一次token就換掉了,實質上沒有任何的意義。
下面的過程給各位看官看看,純屬爲了博各位一笑。
抓個包:
本着不行也得上的原則,我決定試試繞過token康康。
首先很高興的是,這個地方是用get方式上傳滴,因此直接修改請求包裏面的內容就行了。
修改好請求包的部分以及爆破token。
(就是它!!!)