2010年07月05日 星期一 23:31
由于某度众所周知的举动,让我搬离写了5年的渣度空间,准备把技术性的文章定在CSDN了。这些都是文章备份。勿怪。。
鉴于最近有些抓取机器和抄袭者,把标题的【原】字都复制,我不得不声明:本文为 yukon12345原创,转载请注明出处http://blog.csdn.net/yukon12345
本想学习下知名cms的安全防范措施的,下了个最新版的dedecms v5.6,不过粗略一看竟然就发现漏洞。
严重程度:严重。提交代码后可轻易进行xss攻击
影响浏览器:IE5,6,7,8,opera 系列,chrome系列。IE9尚未测试。高版本的ff会在iframe时停止载入,但使用其他js代码可以进行攻击。
漏洞出现在会员中心的"发表文章"里。其他地方还没检查,估计也有问题。
在dedecms系统的网站上注册一个号,完了后点击“发布文章”。只要任何人查看文章,就会被执行嵌入的js代码。
在详细内容填写框中选择左上角的源码,复制红色代码(去掉回车写成一行,不然无效)进输入框,
<img src="#" οnerrοr=javascript:
document.writ
e('<iframe sr
c=http://baid
u.com width=5
00 height=500 
/>') />
或者(这段仅对IE6有较大影响)
<img src="javascript:doc
ument.write('<i
frame src=http:
//baidu.com wid
th=500 height=50
0 />')" />
转成字母是 document.write("<iframe src=http://baidu.com width=500 height=500 />")或第二种的
javascript:document.write("<iframe src=http://baidu.com width=500 height=500 />")
提交,转到查看页面,可以发现被嵌入百度的iframe。你想的话可以尽情的写各种js。
能做什么,你懂的。
另外看了下百度的防范做法,因为百度的空间文章编辑器在opera底下也可以方便的提交源码,百度是把有“&#xx”的标签属性直接杀了。比如<img src="">,src属性如果一旦有&#xx编码的字符,整个src就被替换成空。如果是敏感标签就把标签全部给给去了。
预急防范方法:在g过滤函数return之前,添加一条正则
$str="待过滤的字段";
function check($match){
print_r ($match);
return $match[1].$match[3];
}
$str=preg_replace_callback("/(<\s*[a-zA-Z]+)(\s+.*[&#].*)(\/?>)/","check",$str);
最后研究了下著名论坛程序discuz,发现同样存在这个xss漏洞。不过它默认是不开放html代码提交和接收的,只支持ubb码。一旦有论坛开放html代码就有和上例同样的漏洞。
所以除非你有百度的魄力,有猫扑的精神(它也接受html代码直接提交,不过偶尔仍然会被xss搞挂.我就遇到过一次利用大小写和jquery库进行的xss。)。
否则还是建议大家不要开放给非管理员用户html代码方式提交内容的权限。因为过滤xss攻击实在是项浩大的工程。
最新消息:youtube和苹果itunes在7月5号也被xss了
http://www.techweb.com.cn/news/2010-07-05/634585.shtml