1.URL进入服务器时自动进行一次默认解码
2.进入deny方法之前进行参数处理时,会通过mergeParams方法中的urldecode函数进行第二次解码
3.在创建连接操作helper::createLink()中,通过parse_str()函数进行第三次编码
存储型(持久型):
复现条件:
环境:windows11+phpstudyV8+php5.4.45+apache
程序框架:骑士cms V3.4.0
特点:存储型xss,过滤绕过
payload构造思路:
通过分析程序代码探查可控参数经过哪些变换最终导致漏洞发生的过程,以流程图的形式记录下来,最后采用自下而上的的逆推方式构建payload,流程图如下,在最末端构建payload为href=“javascript:alert(document.cookie)”,需要使用<img src=“闭合payload所在位置前后的标识符”,并且按照参数在流程图自下而上,路径上可能经历的解码和转换操作进行编码,从而触发和测试存储型xss漏洞
payload流程图:
复现漏洞:
首先我们搭建好靶场环境
然后我们注册一个企业用户并且登录账号
我们找到公司信息,然后先把基本信息填好,不然是进不到上传营业执照的地方的
然后我们来到上传营业执照的地方
我们在上传的时候就按照他给的格式上传即可
然后我们将他的图片地址复制出来,一会我们要用到
http://localhost/74cms/data/certificate/2021/12/27/1640606362579.jpg
我们开始构造payload链接
http://localhost/74cms"><?a class="admin_frameset" href=javascript;alert(document.cookie)?><img src=74cms/data/certificate/2021/12/27/1640606362579.jpg><?/a?><?b a="
光这样写好了payload还是不够的,我们要对他在进行一次编码,编码后的内容如下
http%3A%2F%2Flocalhost%2F74cms%22%3E%3C%3Fa%20class%3D%22admin_%26%23102%3Brameset%22%20href%3Dja%26%23118%3Basc%26%23114%3Bipt%3Bale%26%23114t(document.cookie)%3F%3E%3Cimg%20src%3D74cms%2Fdata%2Fcertificate%2F2021%2F12%2F27%2F1640606362579.jpg%3E%3C%3F%2Fa%3F%3E%3C%3Fb%20a%3D%22
然后我们找到系统首页下方的申请友链
<