郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
CSRF
1 简介
CSRF 定义: 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF , 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
在已经身份认证过的用户,可以正常访问服务端资源。此时如果黑客发送一个链接,是进行上述访问的服务资源如修改密码的一个链接请求,此时此用户点击,会被执行,密码会被直接修改,因为是利用已经认证的合法身份提交的。
1.1 CSRF 与 XSS 区别
从信任的角度来区分:
XSS:利用用户对站点的信任,服务器下发的脚本在客户端浏览器执行
CSRF:利用站点对已经身份认证的信任
1.2 CSRF 的危害
在用户非自愿、不知情的情况下提交请求
- 修改账号密码、个人信息(修改已注册的email、收货地址)
- 发送伪造的业务请求(网银、购物、投票)
- 关注他人社交账号、推送博文
1.3 CSRF 产生的原因
缺少二次确认机制:
- 一般来说对于服务端而言,所有的请求都是合法的,因为已经验证了用户。但是服务端对于关键操作,缺少确认机制是发生此问题的根源(可以采用验证码机制)
1.4 漏洞利用条件
- 被害用户已经完成身份认证
- 新请求的提交不需要重新身份认证或确认机制
- 攻击者必须了解 web app 请求的参数构造
- 诱使用户触发攻击的指令(社工)
2 验证 CSRF
2.1 验证环境
靶机:meatsploitable2,dvwa,security-level: low,CSRF
WEB 服务器主机:确保靶机可以其访问 CSRF 网页
<?php
if (isset($_GET['Change'])) {
// Turn requests into variables
$pass_new = $_GET['password_new'];
$pass_conf = $_GET['password_conf'];
if (($pass_new == $pass_conf)){
$pass_new = mysql_real_escape_string($pass_new)