二十七、CSRF跨站请求伪造
2017-12-21 本文已影响0人
cybeyond
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界面,然后输入修改的密码,点击提交:
![](https://img.haomeiwen.com/i4593121/49f0fde3ccc32f9c.png)
![](https://img.haomeiwen.com/i4593121/6dc994cf12f78b20.png)
将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攻击后果
此时,受害者正在正常访问此网站,此时如果接受到攻击者发送的链接,然后点击了,会发生什么呢?
![](https://img.haomeiwen.com/i4593121/0779364019dc88c2.png)
![](https://img.haomeiwen.com/i4593121/c007accb81f4af43.png)
![](https://img.haomeiwen.com/i4593121/35c534988b81ddb6.png)
此时logout之后,在通过密码为“password”则无法登录
![](https://img.haomeiwen.com/i4593121/bc3c20409af2775e.png)
3、验证csrf(post方法)
burpsuite截断后,使用CSRF PoC generator功能。首先截断请求,构造数据请求
![](https://img.haomeiwen.com/i4593121/19342e4037f04fc2.png)
然后在此基础上,右键点击“CSRF PoC generator”
![](https://img.haomeiwen.com/i4593121/dd59e2a2eeb692a2.png)
随后会生成csrf html:
![](https://img.haomeiwen.com/i4593121/a1c79b72efa37c17.png)
复制内容,在'/var/www/html/2.html'中粘贴
![](https://img.haomeiwen.com/i4593121/8c678ffb822fe4a2.png)
验证
在正常登录访问网站的同时,点击恶意链接
![](https://img.haomeiwen.com/i4593121/4559edc75cdde17a.png)
此时,密码已经被修改。
![](https://img.haomeiwen.com/i4593121/37b095e8b6f38ca5.png)
4、源代码
4.1、low级别
![](https://img.haomeiwen.com/i4593121/c0772c87eda1159c.png)
4.2、medium级别
上述的都是基于low级别进行的poc测试,下面通过medium级别可以看到,多了一层判断,意思是判断referer信息,看请求中是否含有127.0.0.1即只能本机修改密码,如果不是则不能执行。
![](https://img.haomeiwen.com/i4593121/42e89716e07eb027.png)
通过请求截断,在referer中添加127.0.0.1,只要在referer中找到此字段,即为通过判断条件
![](https://img.haomeiwen.com/i4593121/fcecd1f71255c39c.png)
转发forward后,密码已经修改成功
![](https://img.haomeiwen.com/i4593121/76ca251ae18a30cb.png)
4.3、high级别
高级别增加了当前密码的二次校验功能
![](https://img.haomeiwen.com/i4593121/4c24dcda31df2824.png)
![](https://img.haomeiwen.com/i4593121/8bf1b94420fbd896.png)
5、自动扫描程序的检测方法
- 在请求和响应过程中检查是否存在anti-CSRF token名
- 检查服务器是否验证anti-CSRF token的名值
- 检查token中可编辑的字符串
- 检查referer头是否可以伪造
6、应对对策
- Captcha验证码
- anti-CSRF token
- Referer
- 降低会话超时时间