1、简介
1.1、XSS区别
从信任的角度来区分:
- XSS:利用用户对站点的信任,服务器下发的脚本在客户端浏览器执行
- CSRF:利用站点对已经身份认证的信任
在已经身份认证过的用户,可以正常访问服务端资源。此时如果黑客发送一个链接,是进行上述访问的服务资源如修改密码的一个链接请求,此时此用户点击,会被执行,密码会被直接修改,因为是利用已经认证的合法身份提交的。
1.2、结合社工在身份认证会话过程中实现攻击
- 修改账号密码、个人信息(修改已注册的email、收货地址)
- 发送伪造的业务请求(网银、购物、投票)
- 关注他人社交账号、推送博文
- 在用户非自愿、不知情的情况下提交请求
1.3、业务逻辑漏洞
- 缺少二次确认机制:一般来说对于服务端而言,所有的请求都是合法的,因为已经验证了用户。但是服务端对于关键操作,缺少确认机制是发生此问题的根源(可以采用验证码机制)
- 自动扫描程序无法实现此类漏洞
1.4 漏洞利用条件
- 被害用户已经完成身份认证
- 新请求的提交不需要重新身份认证或确认机制
- 攻击者必须了解web app请求的参数构造
- 诱使用户触发攻击的指令(社工)
2、验证csrf(get方法)
环境说明:
192.168.50.115 kali,模拟黑客,搭建1.html网页,诱使受害者点击
192.168.50.17 模拟受害者机器
192.168.50.183 靶机,有csrf漏洞的服务
2.1、搭建诱使点击网页
首先,黑客要知道web app请求的构造,因此,通过burpsuite截获正常访问时的请求数据。访问csrf界面,然后输入修改的密码,点击提交:
burp截获
将get请求以一个可点击链接的方式,写入1.html文件中,在黑客的主机上搭建,路径为
/var/www/html/1.html
<a href='http://=192.168.50.183/dvwa/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change'>csrf</a>
然后启动apahce,并确定能够访问
# service apache2 start
2.2、诱使受害者点击
将上述构造好的网页,通过社工或者其他手段,诱使受害者点击(在受害者已经登录此网站的情况下)
2.3 csrf攻击后果
此时,受害者正在正常访问此网站,此时如果接受到攻击者发送的链接,然后点击了,会发生什么呢?
正常访问 点击恶意链接 密码修改成功
此时logout之后,在通过密码为“password”则无法登录
登录失败
3、验证csrf(post方法)
burpsuite截断后,使用CSRF PoC generator功能。首先截断请求,构造数据请求
截断请求
然后在此基础上,右键点击“CSRF PoC generator”
CSRF PoC generator选择
随后会生成csrf html:
生成csrf html
复制内容,在'/var/www/html/2.html'中粘贴
2.html
验证
在正常登录访问网站的同时,点击恶意链接
此时,密码已经被修改。
密码修改成功
4、源代码
4.1、low级别
low源代码4.2、medium级别
上述的都是基于low级别进行的poc测试,下面通过medium级别可以看到,多了一层判断,意思是判断referer信息,看请求中是否含有127.0.0.1即只能本机修改密码,如果不是则不能执行。
medium源代码
通过请求截断,在referer中添加127.0.0.1,只要在referer中找到此字段,即为通过判断条件
修改referer转发forward后,密码已经修改成功
修改密码成功
4.3、high级别
高级别增加了当前密码的二次校验功能
high级别 high源代码
5、自动扫描程序的检测方法
- 在请求和响应过程中检查是否存在anti-CSRF token名
- 检查服务器是否验证anti-CSRF token的名值
- 检查token中可编辑的字符串
- 检查referer头是否可以伪造
6、应对对策
- Captcha验证码
- anti-CSRF token
- Referer
- 降低会话超时时间
网友评论