背景介绍:
该漏洞由国外一位ID名为 Shlok 的白帽子在一次私人项目中发现。该站点会对用户输入的每个字符替换为不同的字符然后显示在屏幕上,通过对算法的分析,最终收获XSS漏洞。
侦查阶段:
在侦察阶段 Subfinder 枚举了 3428 个子域名:
subfinder -all -dL scope.txt -o subs.txt
有了子域列表后使用 httpx 识别可用的子域并将结果保存:
cat subs.txt | httpx -o live.txt
为了进一步简化流程,使用以下命令从可用子域列表中删除赏金范围外的子域:
grep -Fvf outofscope.txt live.txt >> finallive.txt
然后白帽小哥重点关注基于 PHP 的子域:
cat finallive.txt | httpx -status-code -tech-detect -title | grep PHP
很快便发现了一个有趣的子域,由于保密要求称为 redacted.target.com
接下来的步骤是对目标执行模糊测试,利用FFUF和字典 (raft-large-words.txt) 来Fuzz目标,探索各种扩展名,如 .php、.js、.json、.txt、.sql、.tar.gz、.bkp、. html、.htm 和 .zip:
ffuf -w Seclists/Discovery/Web-Content/raft-large-words.txt -u https://redacted.target.com/FUZZ -e .php,.php.bak,.js,.json,.txt,.sql,.tar.gz,.bkp,.html,.htm,.zip -mc 200,301 -ac
通过Fuzz,发现了一个特别有趣的文件,名为password.php,它立即引起了白帽小哥的注意。
看起来很简单的一个页面,是吧?
通过查看页面源代码:
一个meta tag包含三个有趣的输入参数:token、uid 和email,拿出arjun,输入:
arjun -u https://redacted.target.com
结果如下:
构建如下URL:
https://redacted.target.com/password.php?e=">abcdefghijkl
然而,令人遗憾的是,并没能在meta tag之外找到“abcdefghijkl”,而是遇到了一系列看似随机且混乱的单词。
白帽小哥没有灰心,开始尝试使用单个字母创建Payload,从 ?e=">a" 开始,逐步浏览字母表,经过一番坚持和仔细观察,终于发现规律,替换算法如下:
a=n, b=o, c=p, d=q, e=r, f=s, g=t, h=u, i=v, j=w, k=x, l=y, m=z, n=a, o=b, p=c, q=d, r=e, s=f, t=g, u=h, v=i, w=j, x=k, y=l ,z=m
接下来就简单了,重新构造Payload:
https://redacted.target.com/password.php?e=”><fpevcg>cebzcg(1)</fpevcg>
搞定!收工!等待赏金奖励~
====正文结束====
原文始发于微信公众号(骨哥说事):一处奇怪的XSS实现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论