[深入學(xué)習(xí)Web安全] 深入利用XSS漏洞

前言
從這節(jié)課開始,小宅再次更改排版,希望能給大家更好的閱讀體驗(yàn)。我們上節(jié)課就講了XSS的基本原理其實(shí)就是HTML代碼注入。這節(jié)課,我們將深入一點(diǎn),學(xué)習(xí)一下How To Exploit XSS。
淺析XSS利用技術(shù)
XSS能干什么?
在我們學(xué)習(xí)XSS的利用技術(shù)之前,我們很有必要先知道XSS可以干什么?或者說(shuō)有什么樣的危害:
· 篡改頁(yè)面,修改頁(yè)面內(nèi)容
· 網(wǎng)絡(luò)釣魚
· 盜取用戶Cookie
· 劫持用戶(瀏覽器)會(huì)話
· 掛廣告,刷流量
· DDoS
· 網(wǎng)頁(yè)掛馬
· 獲取客戶端信息(例如UA,IP,開放端口)
· 傳播XSS Worm
……
這些都是XSS能夠做到的(當(dāng)然,有些也受制與XSS存在的環(huán)境)。
Cookie是什么?
我們?cè)谶M(jìn)一步學(xué)習(xí)XSS之前,我們先來(lái)了解下瀏覽器Cookie是什么。我們要說(shuō)Cookie就得先談到HTTP協(xié)議,我們先來(lái)想想C/S架構(gòu)的程序,通常都是Client端鏈接Server端,通訊完成后就斷開連接。
但是HTTP協(xié)議不同,他的客戶端是瀏覽器,每次發(fā)送HTTP請(qǐng)求和接收HTTP響應(yīng)就是一次通訊,每次都是一個(gè)請(qǐng)求和一個(gè)響應(yīng),也就是發(fā)送請(qǐng)求到結(jié)束請(qǐng)求就是通訊過(guò)程,完了就斷開了。
那么,我們知道,有很多Web程序都是有登錄功能的,也就是有用戶身份識(shí)別功能。但是,每次一請(qǐng)求一響應(yīng),就結(jié)束了,網(wǎng)站怎么管理用戶會(huì)話呢?網(wǎng)站如何認(rèn)證用戶呢?
正是利用這個(gè)Cookie來(lái)驗(yàn)證的,每次瀏覽器發(fā)起HTTP請(qǐng)求就會(huì)帶上Cookie頭,而Cookie則是有每次響應(yīng)的set-cookie來(lái)設(shè)置的。
我們總結(jié)一下上面講的,簡(jiǎn)練的說(shuō)就是:HTTP連接是無(wú)狀態(tài)連接,所以得使用Cookie來(lái)驗(yàn)證用戶身份。
我們?cè)贑hrome瀏覽器上可以使用如下方法查看我們?cè)诰W(wǎng)站上的Cookie:
1.訪問(wèn)“chrome://settings/”:
2.最底下有個(gè)"顯示高級(jí)設(shè)置...",點(diǎn)一下:
3.有個(gè)“隱私設(shè)置”:
4.標(biāo)題下面有個(gè)“內(nèi)容設(shè)置”按鈕,我們點(diǎn)一下:
5.我們點(diǎn)擊“所有Cookie和網(wǎng)站數(shù)據(jù)...”按鈕,我們就能看到,我們?cè)谒芯W(wǎng)站上的Cookie了:
Cookie呢,是以Key=Value的形式存在的,就和下圖一樣:
我們每次訪問(wèn)某個(gè)域的時(shí)候,瀏覽器就會(huì)吧我們?cè)谶@個(gè)域的Cookie寫在訪問(wèn)這個(gè)域的HTTP請(qǐng)求的Cookie頭里。而某個(gè)域想要給我們?cè)O(shè)置Cookie的時(shí)候就需要在HTTP響應(yīng)里的set-cookie頭里寫。
PHP如何設(shè)置Cookie
我們先啟動(dòng)apache2服務(wù),然后到Web根目錄,創(chuàng)建一個(gè)cookietest.php文件,代碼如下:
然后用瀏覽器訪問(wèn)這個(gè)頁(yè)面:
然后在頁(yè)面中右鍵-審查元素:
在橫欄上找到Network,然后刷新頁(yè)面,發(fā)現(xiàn)Network下面出現(xiàn)了一個(gè)HTTP請(qǐng)求:
點(diǎn)擊一下那個(gè)請(qǐng)求:
可以看到橫欄里有個(gè)Cookies,點(diǎn)一下:
我們就能看到HTTP請(qǐng)求時(shí)帶的Cookie和HTTP響應(yīng)了設(shè)置的Cookie了。
JS操作Cookie
接下來(lái),我們還得學(xué)習(xí)一個(gè)小知識(shí),用JS操作Cookie,嘿嘿。首先,我們得知道一個(gè)document的屬性cookie,我們先創(chuàng)建一個(gè)HTML文件,寫入如下代碼:
然后用瀏覽器打開這個(gè)頁(yè)面:
可以看到,當(dāng)前Cookie為空,我們修改剛才的代碼如下:
我們?cè)賮?lái)訪問(wèn)頁(yè)面:
可以看到設(shè)置成功了,但是這樣的Cookie并不標(biāo)準(zhǔn),后端也不能直接操作,還得專門編寫處理這種特殊“Cookie”的函數(shù),所以,我們來(lái)看一個(gè)JS設(shè)置Cookie的函數(shù):
我們可以看到,這個(gè)setCookie()函數(shù)并不復(fù)雜,首先傳入一個(gè)c_name,其實(shí)就是CookieName,和對(duì)應(yīng)值,最后是過(guò)期天數(shù)(每個(gè)Cookie都是存在生命周期的,在生命周期之內(nèi)的Cookie才可用)。
利用HTML代碼發(fā)起HTTP請(qǐng)求(重點(diǎn))
接下來(lái),我們就要來(lái)說(shuō)這篇paper的重點(diǎn)部分了,如何利用HTML代碼來(lái)發(fā)起HTTP請(qǐng)求,請(qǐng)大家準(zhǔn)備好,我們即刻開始,首先我們創(chuàng)建一個(gè)HTML文件,就叫“htmlRequest.html”吧,代碼如下:
我們?cè)L問(wèn)該頁(yè)面,并且打卡審查元素的Network,然后刷新,如下圖:
我們可以看到,我們利用src屬性發(fā)起了兩個(gè)GET請(qǐng)求,分別是www.xxx.com和[url=www.yyy.com]www.yyy.com[/url]。那么POST請(qǐng)求呢?(這個(gè)可能XSS用不到,但是CSRF一定會(huì)用到,而且是CSRF的重點(diǎn)),我們修改HTML代碼為:
我們還是一樣的,訪問(wèn)頁(yè)面,Network,刷新頁(yè)面,如下:
我們可以看到,是成功的提交了test-1&test=2到www.xxx.com/test的,這個(gè)POST請(qǐng)求也是成功的。
盜取Cookie的XSS-ShellCode的編寫與利用
我們,接著來(lái)學(xué)習(xí)XSS-ShellCode的編寫與利用,首先,例如我們有一個(gè)VPS,在Web跟目錄創(chuàng)建一個(gè)stealCookie.php和一個(gè)showData.php,我們來(lái)構(gòu)思一下,首先,我們對(duì)這兩個(gè)程序做一下需求分析:
stealCookie.php:我們的目的是程序可以接收GET參數(shù)location和cookie,并將其保存到數(shù)據(jù)庫(kù)中。showData.php:我們的目的是輸出數(shù)據(jù)庫(kù)中存儲(chǔ)的location和cookie。
所以,我們寫這個(gè)程序之前最重要的就是先把存儲(chǔ)數(shù)據(jù)的表搞好,于是我在mysql里創(chuàng)建了一個(gè)xss數(shù)據(jù)庫(kù),在該庫(kù)中創(chuàng)建了一個(gè)data表,data表里有l(wèi)ocation和cookie列。
接著,我們來(lái)編寫stealCookie程序,首先,要獲取GET參數(shù),我們就得使用超全數(shù)組GET[參數(shù)名],如下:
然后,我們鏈接數(shù)據(jù)庫(kù),并存儲(chǔ)數(shù)據(jù):
我們來(lái)測(cè)試一下,傳入location=ichunqiu.com&cookie=abcdefg,嘗試如下:
我們到數(shù)據(jù)庫(kù)去查看,如下:
可以看到,已經(jīng)成功的插入了,接著就是編寫showData程序了,首先呢,肯定要鏈接數(shù)據(jù)庫(kù),選擇xss庫(kù)(對(duì)了大家有沒(méi)注意到一個(gè)細(xì)節(jié),我們編寫的stealCookie是存在SQL注射漏洞的,嘿嘿)。
接著我們進(jìn)行查詢數(shù)據(jù),然后使用mysql_fetch_array()函數(shù)將查詢結(jié)果轉(zhuǎn)換成數(shù)組,然后輸出就行了:
我們?cè)L問(wèn)來(lái)看下效果:
接著,我們來(lái)說(shuō)構(gòu)造Exploit來(lái)盜取Cookie。首先,我們先來(lái)專門寫個(gè)測(cè)試Demo,就叫demo.php,代碼如下:
我們用Firefox來(lái)測(cè)試,如下
接著,我們得寫成script標(biāo)簽的src屬性加載一個(gè)js,然后實(shí)現(xiàn)讀取cookie和location,然后發(fā)給stealCookie,嘿嘿(當(dāng)然,現(xiàn)實(shí)生活中還有一道墻,同源策略,阿西吧,這里使用反射型XSS演示,完全是因?yàn)楹醚菔拘?,啊西吧?/p>
然后,由于我們要測(cè)試盜取Cookie,那沒(méi)有Cookie怎么行,所以修改demo.php代碼為:
我們?cè)赬SS目錄下在建一個(gè)app.js,代碼的話,如下:
我們?cè)L問(wèn)如下URL:”http://localhost/xss/demo.php?xss=%3Cscript%20src=%22app.js%22%3E%3C/script%3E“:
可以看到,只是加載了一張圖片,但是,我們回?cái)?shù)據(jù)庫(kù)一看:
可以看到,我們成功的盜取了用戶的Cookie。好了,這篇paper就到這里了,希望大家繼續(xù)支持深入學(xué)習(xí)Web安全系列文章!
本文轉(zhuǎn)自:i春秋社區(qū)
本文地址:http://bbs.ichunqiu.com/thread-10648-1-1.html?from=jbzj
相關(guān)文章
局域網(wǎng)共享安全方式之用局域網(wǎng)文件共享系統(tǒng)實(shí)現(xiàn)共享文件夾安全設(shè)置
現(xiàn)在很多單位都有文件服務(wù)器,經(jīng)常會(huì)共享文件讓局域網(wǎng)用戶訪問(wèn)。那么,如何才能保護(hù)局域網(wǎng)內(nèi)共享文件夾的安全性呢?下面通過(guò)本文給大家分享局域網(wǎng)共享安全方式之用局域網(wǎng)文2017-05-11- 這篇文章主要介紹了IIS的FastCGI漏洞處理方法,需要的朋友可以參考下2017-04-30
IIS PHP fastcgi模式 pathinfo取值錯(cuò)誤任意代碼執(zhí)行漏洞修復(fù)方法
這篇文章主要介紹了PHP fastcgi模式 pathinfo取值錯(cuò)誤任意代碼執(zhí)行漏洞,需要的朋友可以參考下2017-04-30- IIS短文件名泄露漏洞,IIS上實(shí)現(xiàn)上存在文件枚舉漏洞,攻擊者可利用此漏洞枚舉獲取服務(wù)器根目錄中的文件,這里為大家分享一下安裝方法,需要的朋友可以參考下2017-04-23
用mcafee麥咖啡設(shè)置服務(wù)器基本用戶安全(防止新建用戶與修改密碼)
這篇文章主要介紹了用麥咖啡設(shè)置服務(wù)器基本用戶安全(防止新建用戶與修改密碼),需要的朋友可以參考下2017-02-26防范黑客入侵,關(guān)閉端口封鎖大門 黑客無(wú)法入侵
這篇文章主要介紹了防范黑客入侵,關(guān)閉端口封鎖大門 黑客無(wú)法入侵的相關(guān)資料,需要的朋友可以參考下2016-10-31現(xiàn)代網(wǎng)絡(luò)性能監(jiān)控工具應(yīng)具備何種技能?網(wǎng)絡(luò)與應(yīng)用程序監(jiān)控
大家都知道現(xiàn)在市場(chǎng)上的網(wǎng)絡(luò)性能監(jiān)控工具大有所在,這為現(xiàn)在的IT行業(yè)的人員提供了很多便利,幫助IT管理團(tuán)隊(duì)監(jiān)控網(wǎng)絡(luò)性能,并且?guī)椭鶬T管理人員確定系統(tǒng)性能的瓶頸所在,進(jìn)而2016-10-19- 雖然現(xiàn)在網(wǎng)絡(luò)很發(fā)達(dá),但對(duì)我們普通人而言,也就是10多年的上網(wǎng)歷史,好多人還沒(méi)意識(shí)到信息安全的重要性。那么如何保證自己的上網(wǎng)安全?下面小編為大家分享10條防范自救,一2016-10-12
- 這篇文章主要介紹了遠(yuǎn)離病毒 八項(xiàng)基本原則的相關(guān)資料,需要的朋友可以參考下2016-10-08
- 這篇文章主要介紹了Linux 防范病毒的方法的相關(guān)資料,需要的朋友可以參考下2016-10-08