记两处奇葩的存储型XSS

xhys121zero2025-09-29文章来源:SecHub网络安全社区


记两处奇葩的存储型xss

0x01奇葩的xss

第一处:

undefinedimage20240424215813357.png

发现返回的订单号的一部分为可以自定义

undefinedimage20240424215847825.png

发现可以自定义onclick中的值,但是xq在自然情况下会报错

undefinedimage20240424215945888.png

如果前面的xq函数报错的话,后面自定义是无法执行的

undefinedimage20240424220010871.png

这个时候可以用到声明提升

申明提升说明:

在执行代码时,JavaScript 引擎会先执行一遍扫描, 把发现的函数声明提升到源代码树的顶部。因此即使函数定义出现在调用它们的代码之后,引擎也会把函数声明提升到顶部。这个过程叫作函数声明提升(function declaration hoisting)

可以使用

xq('FD371700');function xq(){console.log(1)};('2022010110')

覆盖xq函数而执行了xq函数中的consoloe.log

弹窗绕过方面可以使用

(window['a\u006ce'+'rt'])(1)

最后成功xss

undefinedimage20240424220319198.png

第二处:

undefinedimage20240424220516883.png

当点击常用联系人的时候会触发一个请求

undefinedimage20240424220623108.png

查看js代码部分

undefinedimage20240424220635804.png

把返回的json请求直接加上了括号后直接eval了

[{id:"123456789012345",pId:"CY001",name:"123456789012345(dsad1)",isParent:false}]

这里可以自定义dsad1部分,所以直接构造

payload:

)"}])((window['a\u006ce'+'rt'])(1))([{"a":"(1
[{id:"123456789012345",pId:"CY001",name:"123456789012345(dsad1)"}])((window['a\u006ce'+'rt'])(1))([{"a":"(1)",isParent:false}]

undefinedimage20240424220841708.png

成功绕过

0x02总结

之前一直觉得js中的代码应该不会有什么xss漏洞,基本不会留意js中的eval等危险函数,这次的发现只是偶然的,所以以后要多注意注意js中的危险函数了,危险函数检测脚本:GitHub - ibrahimAlises/untrusted-types

undefinedimage20240424220939673.png

转载于yier的博客