CSRF(Cross-site request forgery)
CSRF 主要的攻擊行為就是利用當使用者合法取得網站使用認證後,透過某些方式偽造網站合法使用者的身份進行非法的存取動作,合法使用者即可能在不自覺的情況下被引導到駭客的攻擊網頁。
簡單來說就是在使用者已登入的情況下,接收到攻擊者的惡意連結並且在使用者不知情的情況下來達成修改密碼,修改商品價格,轉帳等功能
防禦機制
Level Low
$pass_new = $_GET[ 'password_new' ];
$pass_conf = $_GET[ 'password_conf' ];
這邊的驗證機制非常簡單,只會判斷你的新密碼和確認新密碼
若是兩者一致就送出修改密碼的請求,進而達成修改密碼
這時候仔細觀察網址列
這就是我們可以構造惡意代碼的東西了
這時候攻擊者需要做的事情就是,構造惡意代碼再讓使用者執行惡意代碼就完成攻擊了
payload:<img src="https://127.0.0.1/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#" />
Level medium
中級的驗證機制除了剛剛的密碼確認之外,多了一道認證
if( eregi( $_SERVER[ 'SERVER_NAME' ], $_SERVER[ 'HTTP_REFERER' ] )
他將會比對server_name和http_referer有沒有一致,必須一致才能修改密碼
Level high
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
第5行增加了token機制,當使用者每次訪問時,都會得到一組token參數值並驗證。所以通常可利用XSS的方式來取得使用者的cookie、token值搭配CSRF修改密碼。
<img src=x onclick="alert(alert(frames[0].document.getElementsByName('user_token')[0].value))">