日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

DVWA:全等级XSS

發(fā)布時(shí)間:2024/6/21 45 生活家
生活随笔 收集整理的這篇文章主要介紹了 DVWA:全等级XSS 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  XSS,全稱Cross Site Scripting,即跨站腳本攻擊,某種意義上也是一種注入攻擊,是指攻擊者在頁(yè)面中注入惡意的腳本代碼,當(dāng)受害者訪問該頁(yè)面時(shí),惡意代碼會(huì)在其瀏覽器上執(zhí)行,需要強(qiáng)調(diào)的是,XSS不僅僅限于JavaScript,還包括flash等其它腳本語(yǔ)言。根據(jù)惡意代碼是否存儲(chǔ)在服務(wù)器中,XSS可以分為存儲(chǔ)型(Stored)的XSS與反射型(Reflected)的XSS。

  DOM型的XSS由于其特殊性,常常被分為第三種,這是一種基于DOM樹的XSS。例如服務(wù)器端經(jīng)常使用document.boby.innerHtml等函數(shù)動(dòng)態(tài)生成html頁(yè)面,如果這些函數(shù)在引用某些變量時(shí)沒有進(jìn)行過濾或檢查,就會(huì)產(chǎn)生DOM型的XSS。DOM型XSS可能是存儲(chǔ)型,也有可能是反射型。

  簡(jiǎn)單來說,XSS就通常指黑客通過HTML注入纂改了網(wǎng)頁(yè),插入惡意腳本,從而在用戶瀏覽網(wǎng)頁(yè)時(shí),控制用戶瀏覽器的一種攻擊。

反射型XSS(Reflected)

  把難度調(diào)至Low等級(jí),然后進(jìn)入XSS(Reflected),顯示如下界面:

  我們打開代碼,看一下邏輯和限制(路徑如下圖所示):

  可以看到,代碼直接引用了name參數(shù),并沒有任何的過濾與檢查,存在明顯的XSS漏洞。

  先利用alert測(cè)試是否存在XSS,如果有彈窗彈出,說明有XSS漏洞:

  http://192.168.1.1/DVWA-master/vulnerabilities/xss_r/?name=<script>alert(1)</script>

Medium

  我們先把難度調(diào)節(jié)到中等,然后進(jìn)入XSSReflected頁(yè)面:

  然后我們照例用alert進(jìn)行測(cè)試,發(fā)現(xiàn)并沒有彈窗出現(xiàn):

  http://192.168.1.1/DVWA-master/vulnerabilities/xss_r/?name=<script>alert(1)</script>

  那么真的沒有XSS漏洞嗎,顯然不是,否則這個(gè)等級(jí)就失去了意義,我們查看代碼一探究竟:

  這里對(duì)輸入進(jìn)行了過濾,使用str_replace函數(shù)將輸入中的<script>刪除,這種防護(hù)機(jī)制是可以被輕松繞過的。雙寫,大小寫混合,都可以輕松繞過它:

雙寫繞過

  http://192.168.1.1/DVWA-master/vulnerabilities/xss_r/?name=<sc<script>ript>alert(1)</script>

大小寫混合繞過

  http://192.168.1.1/DVWA-master/vulnerabilities/xss_r/?name=<ScRipt>alert(1)</script>

High

  我們嘗試用alert來看看會(huì)不會(huì)出現(xiàn)彈窗,結(jié)果發(fā)現(xiàn)并沒有:

  http://192.168.1.1/DVWA-master/vulnerabilities/xss_r/?name=<script>alert(1)</script>

  所以我們來打開代碼。看看他進(jìn)行了哪些防御,結(jié)果發(fā)現(xiàn),High級(jí)別的代碼同樣使用黑名單過濾輸入,preg_replace()函數(shù)用于正則表達(dá)式的搜索和替換,這使得雙寫繞過、大小寫混淆繞過(正則表達(dá)式中i表示不區(qū)分大小寫)不再有效:

  那么<script>標(biāo)簽確實(shí)是被限制住了,我們沒有辦法繼續(xù)利用這個(gè)標(biāo)簽檢測(cè)XSS漏洞。所以這里可以更換別的標(biāo)簽,雖然無法使用<script>標(biāo)簽注入XSS代碼,但是可以通過img、body等標(biāo)簽的事件或者iframe等標(biāo)簽的src注入惡意的js代碼:

Img標(biāo)簽: 

  http://192.168.1.1/DVWA-master/vulnerabilities/xss_r/?name=<img src=1 onerror=alert(1)>

iframe標(biāo)簽

  http://192.168.1.1/DVWA-master/vulnerabilities/xss_r/?name=<iframe onload=alert(1)>

存儲(chǔ)型XSS(Stored)  

Low

  大致上等同于反射型,但是攻擊效果遠(yuǎn)遠(yuǎn)強(qiáng)于反射型。

  我們打開源代碼(路徑如下):

  我們呢發(fā)現(xiàn)用了很多新的函數(shù):

  trim(string,charlist)函數(shù):

  函數(shù)移除字符串兩側(cè)的空白字符或其他預(yù)定義字符,預(yù)定義字符包括、 、
、x0B、以及空格,可選參數(shù)charlist支持添加額外需要?jiǎng)h除的字符。

  mysql_real_escape_string(string,connection)函數(shù):

  函數(shù)會(huì)對(duì)字符串中的特殊符號(hào)(x00,
,,,‘,“,x1a)進(jìn)行轉(zhuǎn)義。

  stripslashes(string)函數(shù):

  函數(shù)刪除字符串中的反斜杠。

  這些函數(shù)中并沒有對(duì)輸入做XSS方面的過濾與檢查,且存儲(chǔ)在數(shù)據(jù)庫(kù)中,因此這里存在明顯的存儲(chǔ)型XSS漏洞。我們可以果斷輸入<script>標(biāo)簽來試圖測(cè)試漏洞,然后點(diǎn)擊Sign Guestbook(這里我們是在Message文本框中輸入,Name隨便輸入一個(gè)):

  <script>alert(1)</script>

  當(dāng)我們點(diǎn)到別的頁(yè)面又回來的時(shí)候,發(fā)現(xiàn)竟然重新彈出了彈窗,或者再次點(diǎn)擊Sign Guestbook,也是一樣,跟反射型XSS不同,反射型XSS想彈出彈窗,每一次都需要再寫一次<script>標(biāo)簽,而存儲(chǔ)型XSS會(huì)把文本框的內(nèi)容存儲(chǔ)下來,這個(gè)時(shí)候我們應(yīng)該明白了,為什么叫做存儲(chǔ)型XSS而不是其他名字。我們?cè)谖谋究蛳路揭部梢钥吹酱鎯?chǔ)的記錄:

  既然Message文本框有XSS漏洞,那么能不能通過Name文本框檢測(cè)呢,我們復(fù)制代碼進(jìn)去,結(jié)果發(fā)現(xiàn),竟然限制了字符位數(shù),只有十個(gè)字符:

  <script>alert(1)</script>

  所以我們來做個(gè)代理,用Burp Suite截取DVWA發(fā)送的數(shù)據(jù)包,修改其中的Name的字符數(shù)據(jù),從而繞過這個(gè)字符的限制。在此之前我們得把數(shù)據(jù)都清空,前面也提到了,這是一個(gè)存儲(chǔ)型XSS,不清空的話我們無法判斷執(zhí)行的是原來是數(shù)據(jù)還是新的語(yǔ)句,簡(jiǎn)而言之,就是控制變量。

  在Name和Message里面都輸入任意內(nèi)容,這時(shí)在Message里面我們也不能輸入<script>標(biāo)簽,原因當(dāng)然也是控制變量,如下圖所示,我們?cè)跇?biāo)記的屬于Name的部分,更換為<script>標(biāo)簽的語(yǔ)句:

  我們更換后點(diǎn)擊Forward,返回DVWA頁(yè)面,發(fā)現(xiàn)有返回的對(duì)話框:

  由于我們前面控制變量,所以這就說明Name文本框也可以檢測(cè)XSS漏洞。

Medium

  還是一樣,調(diào)節(jié)難度,注意的是,點(diǎn)擊Clear Guestbook清理存儲(chǔ)記錄:

  雖然知道不大行,但是還是用<script>標(biāo)簽試一下,然后發(fā)現(xiàn),果然沒有彈窗,只是多出一條記錄:

  那么我們就查看代碼,看看有什么防御:

相關(guān)函數(shù)說明

strip_tags()函數(shù):

  剝?nèi)プ址械腍TML、XML以及PHP的標(biāo)簽,但允許使用<b>標(biāo)簽。

addslashes()函數(shù):

  返回在預(yù)定義字符(單引號(hào)、雙引號(hào)、反斜杠、NULL)之前添加反斜杠的字符串。

  尤其可以看到的是,對(duì)message參數(shù)使用了htmlspecialchars函數(shù)進(jìn)行編碼,因此我們無法再通過message參數(shù)注入XSS代碼,但是對(duì)于name參數(shù),只是簡(jiǎn)單過濾了<script>字符串,仍然存在存儲(chǔ)型的XSS。所以當(dāng)然,我們放棄在Message中注入,通過Burp Suite抓包在Name中構(gòu)造<script>,步驟和注意事項(xiàng)在Low等級(jí)已經(jīng)有詳細(xì)內(nèi)容,我們有雙寫和大小寫混合兩種方法可供選擇,這里只放出語(yǔ)句和截圖(注意清除記錄),其余不再贅述:

雙寫:

  <sc<script>ript>alert(/xss/)</script>

大小寫混合:

  <Script>alert(/xss/)</script>

High

  我們直接來看代碼:

  可以看到,message參數(shù)使用了htmlspecialchars函數(shù)進(jìn)行編碼,我們還是無法再通過message參數(shù)注入XSS代碼,至于Name,這里使用正則表達(dá)式過濾了<script>標(biāo)簽,但是卻忽略了img、iframe等其它危險(xiǎn)的標(biāo)簽,因此name參數(shù)依舊存在存儲(chǔ)型XSS。所以我們使用其他標(biāo)簽來抓包,在Name中進(jìn)行注入,這里只給出標(biāo)簽語(yǔ)句和截圖,其他內(nèi)容不再贅述:

Img標(biāo)簽

  <img src=1 onerror=alert(233)>

iframe標(biāo)簽

  <iframe onload=alert(1)>

總結(jié)

以上是生活随笔為你收集整理的DVWA:全等级XSS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。