日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二、详解 DVWA_Reflected反射型XSS

發布時間:2023/12/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二、详解 DVWA_Reflected反射型XSS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

創建時間:2022年5月15日17:01:18
作者:在下小黃


存儲區:URL
插入點:HTML

  • XSS攻擊需要具備兩個條件:
    • 需要向web頁面注入惡意代碼;
    • 這些惡意代碼能夠被瀏覽器成功的執行
  • XSS反射型漏洞:
    • 反射型XSS,顧名思義在于“反射”這個一來一回的過程。
    • 反射型XSS的觸發有后端的參與,而之所以觸發XSS是因為后端解析用戶在前端輸入的帶有XSS性質的腳本或者腳本的data URI編碼,后端解析用戶輸入處理后返回給前端,由瀏覽器解析這段XSS腳本,觸發XSS漏洞。
    • 因此如果要避免反射性XSS,則必須需要后端的協調,在后端解析前端的數據時首先做相關的字串檢測和轉義處理;同時前端同樣也許針對用戶的數據做excape轉義,保證數據源的可靠性
  • 基本原理:就是通過給別人發送帶有惡意腳本代碼參數的URL,當URL地址被打開時,特定的代碼參數會被HTML解析,執行,如此就可以獲取用戶的COOIKE,進而盜號登陸。

  • 特點是:非持久化 必須用戶點擊帶有特定參數的鏈接才能引起。

  • XSS反射型攻擊,惡意代碼并沒有保存在目標網站,通過引誘用戶點擊一個鏈接到目標網站的惡意鏈接來實施攻擊的。


  • 一、Reflected Low 級別:

  • 我們拿到靶場之后,先檢查代碼。
  • <?phpheader ("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>'; }?> ------------------------------------------------------------------------------------ array_key_exists() 函數檢查某個數組中是否存在指定的鍵名,如果鍵名存在則返回 true,如果鍵名不存在則返回 falseecho() 函數輸出一個或多個字符串。簡單來說:簡單來說就是,輸入請求不為空的時候,直接原樣輸出!!
    • 前端負責輸入,后端接收到name參數后沒有防范措施,直接打印在屏幕上。(echo)
    • <script>alert('xss')</script>

  • PHP 輸出已經變成了,'<pre>Hello <script>alert('xss')</script></pre>' 然后輸出到頁面時,直接運行 <script>alert(1)</script> 這就是 XSS,原本這個地方應該是輸入數據的,但是卻變成運行代碼了。

  • 二、Reflected Medium 級別:

  • 還是像之前一樣,拿到之后我們先審計一下代碼
  • <?phpheader ("X-XSS-Protection: 0");// Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Get input$name = str_replace( '<script>', '', $_GET[ 'name' ] );// Feedback for end userecho "<pre>Hello ${name}</pre>"; }?> ----------------------------------------------------------------------------------- str_replace() 函數以其他字符替換字符串中的一些字符(區分大小寫),這里是過濾請求中的<script>
    • 輸入<scri<script>pt>alert('xss')</script>

    • 另一種方法,大小寫混淆繞過:
    • 輸入:<SCriPt>alert(/xss/)</ScRipt>

    • 輸入其他標簽,如<IMG src=1 onerror=alert(document.cookie)>


    三、Reflected High 級別:

    • 輸入<script>alert('xss')</script>
    <?phpheader ("X-XSS-Protection: 0");// Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Get input$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );// Feedback for end userecho "<pre>Hello ${name}</pre>"; }?> -------------------------------------------------------------------------------------- preg_replace():函數執行一個正則表達式的搜索和替換 (.*) 表示從頭到尾匹配字符,表示貪婪匹配,(.*)s 從頭到尾匹配s /i 表示不區分大小寫 '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i' 表示過濾了<script>雖然<script>標簽不管用了,但是可以使用其他標簽繞過 輸入<IMG src=1 onerror=alert(document.cookie)>
    • <script>被過濾了
    • 構造出<scri<script>pt>alalertert('xss')</scr</script>ipt>
    • 發現無法提交 猜測對提交的數據長度做了限制

    • 源碼對任何形式的script做了過濾
    • 所以可以采用不使用script的方式。
    • 比如利用 img 的 onerror 函數 ,意思是說,如果圖片的地址是錯誤的,就執行alert(1)
    • 函數使用正則表達式的搜索和替換,這樣使得雙寫繞過和大小寫混淆不可行。
    • 我們可以考慮通過img、body等標簽的事件或者iframe等標簽的src注入惡意的js代碼。
    • 輸入:<img src=1 onerror=alert(/xss/)>


    四、Reflected Impossible 級別:

    <?php// Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Get input$name = htmlspecialchars( $_GET[ 'name' ] );// Feedback for end userecho "<pre>Hello ${name}</pre>"; }// Generate Anti-CSRF token generateSessionToken();?> ------------------------------------------------------------------------------------- htmlspecialchars() 函數把預定義的字符轉換為 HTML 實體。 預定義的字符是: & (和號)成為 & " (雙引號)成為 " ' (單引號)成為 ' < (小于)成為 < > (大于)成為 >雖然利用了htmlspecialchars()函數將用戶的輸入進行過濾,但是在特定情況下需要用戶輸入一些被過濾,會丟失原始數據。且htmlspecialchars本質也是黑名單過濾,沒有絕對安全簡單來說:就是直接輸出
  • 那么什么是HTML實體?
    • 在 HTML 中,某些字符是預留的。
    • 在 HTML 中不能使用小于號(<)和大于號(>),這是因為瀏覽器會誤認為它們是標簽,當然在HTML中還有其他實體。
    • 如果希望正確地顯示預留字符,我們必須在HTML源代碼中使用字符實體(character entities)。
    • 如需顯示小于號,我們必須這樣寫:< 或 <使用實體名而不是數字的好處是,名稱易于記憶。不過壞處是,瀏覽器也許并不支持所有實體名稱(對實體數字的支持卻很好)。
      于號(>),這是因為瀏覽器會誤認為它們是標簽,當然在HTML中還有其他實體。
    • 如果希望正確地顯示預留字符,我們必須在HTML源代碼中使用字符實體(character entities)。
    • 如需顯示小于號,我們必須這樣寫:< 或 <使用實體名而不是數字的好處是,名稱易于記憶。不過壞處是,瀏覽器也許并不支持所有實體名稱(對實體數字的支持卻很好)。

    總結

    以上是生活随笔為你收集整理的二、详解 DVWA_Reflected反射型XSS的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。