作者: kostis90gr
翻譯: 黯魂[S.S.T]
本文已發表於《駭客防線》6月刊,著作權屬於《駭客防線》及指令碼安全小組,轉載請保持文章完整性,謝謝 :)
這份指南僅僅是出於報告目的,如果任何人把它用於違法目的,我不負責任.
通過使用javascript注入,使用者不用關閉網站或者把頁面儲存在他的PC上就可以改變網站中的內容.這是由他的瀏覽器的地址欄完成的.
命令的文法看上去像這樣:
Copy code
javascrit:alert(#command#)
比方說如果你想看到在網站http://www.example.com裡面的一個警告框,那麼首先在地址欄輸入URL(www.example.com),當頁面載入完之後,清空URL並輸入javascrit:alert("Hello World")作為一個新的URL.這樣將彈出一個警告框顯示Hello World.可是,一些人會用這個技巧改變頁面內的幾乎任何內容.例如一個圖片.讓我們設想有一個網站的logo圖片.通過查看頁面原始碼(可以使用瀏覽器中的"查看原始碼"做到),我們發現一句HTML代碼:
Copy code
<IMG Name="hi" src="hello.gif">
得到資訊:有一個圖片被命名為hi,且源檔案為hello.gif.我們想要改變它為bye.jpeg並儲存到我們的網站http://www.mysite.com上.所以我們的圖片的完整URL是http://www.mysite.com/bye.jpeg 要使用javascript注入,我們需要在地址欄中輸入:
Copy code
javascript:alert(document.hi.src="[url]http://www.mysite.com/bye.jpeg"[/url])
你將看到一個提示框說http://www.mysite.com/bye.jpeg,並且在那之後圖片將會被改變.注意雖然那些變化只是暫時的!如果你重新整理頁面或者再次進入,你造成的變化將丟失,因為你改變的不是伺服器上的網站,而是你PC上的.
使用同樣的方法,我們可以查看或改變變數的值.比如我們在網站中找到這樣一些原始碼:
Copy code
<SCRIPT LANGUAGE="JavaScript">
var a="test"
</SCRIPT>
意思是給變數a賦值test.為了查看變數的值,我們將輸入:
Copy code
javascript:alert(a)
然後為了把它從test改為hello,則輸入:
Copy code
javascript:alert(a="hello")
但是javascript注入主要用來改變表單的屬性.下面是我們已有的部分代碼:
Copy code
<form name="format" action="send.php" method="post">
<input type="hidden" name="mail" value="[email]someone@somewhere.com[/email]">
<input type="text" name="name">
<input type="submit" value="submit"></form>
我們想要表單發送到我們的郵箱,而不是代碼中的郵箱someone@somewhere.com,這個想法可以被這個命令完成:
Copy code
javascript:alert(document.format.mail.value="[email]me@hacker.com[/email]")
到現在你已經知道我總是按層次來講述,下面我們就從大到小開始:
1)從document開始
2)輸入我們想要改變的對象名(比如document.hi.src)或者它所屬的屬性並且重新賦值(比如document.format.mail.value)
3)最後結束於我們想要改變的特徵(比如源路徑:document.hi.src,或者變數值:document.format.mail.value)
4)用"."號分隔單詞.
5)當我們想要改變特徵值的時候,使用"="號和新的特徵值.
*注意:當新的特徵值為字串時需要使用雙引號""括起來(比如:document.format.mail.value="me@hacker.com")如果我們想要把它變為一個變數的值,則不需要使用雙引號"".比如我們想改變變數a的值,使其等於變數b的值,會輸入javascript:alert(a=b).
但是,大多數頁面中的屬性都沒有名字,例如:
Copy code
<form action="send.php" method="post">
<input type="hidden" name="mail" value="[email]someone@somewhere.com[/email]">
<input type="text" name="name">
<input type="submit" value="submit"></form>
在這個代碼中,表單沒有名字.利用上面的所有資訊,命令可能看上去像這樣:
Copy code
javascript:alert(document. .mail.value="[email]me@hacker.com[/email]")
在這種情況下我們將不得不計算所有的表單來發現這個表單的序號.我會用一個例子來講解: 複製代碼 代碼如下:<form action="send.php" method="post">
<input type="text" name="name">
<input type="submit" value="submit"></form>
<form action="send.php" method="post">
<input type="hidden" name="mail" value="someone@somewhere.com">
<input type="text" name="name">
<input type="submit" value="submit"></form>
<form action="send.php" method="post">
<input type="text" name="name">
<input type="submit" value="submit"></form>
在以上代碼中我們看見了3個表單,但是我們只對第二個感興趣.因此我們想要的表單序號就是2.千萬別忘記我們是從1開始計算的,我們說1,2,3,4...但是在javascript中卻是從0開始計算的.它是0,1,2,3...所以真正的表單序號是1,不是2.通常我們要先找到表單序號再減一.
我們將用這個序號來補全我們的命令: 複製代碼 代碼如下:javascript:alert(document.forms[1].mail.value="me@hacker.com")
像這樣,你就能改變沒有名字的圖片或者連結了.
對於圖片: 複製代碼 代碼如下:javascript:alert(document.images[3].src="#你想改變的靶心圖表片URL#")
對於連結: 複製代碼 代碼如下:javascript:alert(document.links[0].href="http://www.undug.net/#你想改變的目標連結#")
最後,我們可以用這個技巧編輯cookies.
下面的命令由triviasecurity.net的Dr_aMado所編寫,但是我修改了一點以至於在使用者編輯它之前就能顯示cookie.你只需要複製它們到地址欄: 複製代碼 代碼如下:javascript:alert(window.c=functiona(n,v,nv){c=document.cookie;c=c.substring(c.indexOf(n)+n.length,c.length);c=c.substring(1,((c.indexOf(";")>-1)?c.indexOf(";") :c.length));nc=unescape(c).replace(v,nv);document.cookie=n+"="+escape(nc);return unescape(document.cookie);});alert('The cookie is: "'+document.cookie+'"');alert(c(prompt("The name of the cookie:",""),prompt("Change this value:",""),prompt("with this:","")));
作為結束,我必須強調我們所做的改變僅僅是在使用者端!就像是把網站儲存在了你的PC上,然後修改它.儘管如此,使用這個技巧你仍然可以欺騙一個頁面(例如cookies)或者通過一個頁面的安全驗證.例如一些頁面會檢測使用者從哪發送的資料.如果資料從http://www.test.com/form.php發送到http://www.test.com/check.php,check.php可能會檢測資料是否是從http://www.test.com/form.php上的表單發送的.除此之外,如果你打算登入一個頁面中你自己的javascript代碼,通過使用一些像這樣的技巧,你將能夠改變類似不變的圖片!可是你需要用到比這裡講到的更深層次的知識.
要是有任何問題和建議,請發郵件給我:kostis90gr@gmail.com