1. 程式人生 > >DVWA---XSS (儲存型)

DVWA---XSS (儲存型)

服務端程式碼 LOW
在這裡插入圖片描述

trim(string,charlist)函式移除字串兩側的空白字元或其他預定義字元。charlist可選。規定從字串中刪除那些字元。如果被省略,則移除以下所有字元:

    "\0" - NULL
    "\t" - 製表符
    "\n" - 換行
    "\x0B" - 垂直製表符
    "\r" - 回車
    " " - 空格

stripslashes(string) 數刪除由 addslashes() 函式新增的反斜槓。單個反斜槓則去除,兩個反斜槓為一個反斜槓。mysqli_real_escape_string對字串特殊符號n r ‘ “ 等進行轉義。
最終未對使用者輸入資料進行xss檢測編碼,直接寫入到資料庫中,於是造成儲存型xss漏洞。
在這裡插入圖片描述


在這裡插入圖片描述

對name欄位進行了長度限制,解決方法
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

服務端程式碼 medium
在這裡插入圖片描述

以上程式碼我們重點關注兩行:

$message = htmlspecialchars( $message )
 $name = str_replace( '< script>', '', $name )

Message由於使用了htmlspecialchars方法對使用者輸入資料進行編碼轉換,因此不存在xss漏洞。
但是name由於僅僅用了str_replace方法把< script>替換為空,於是我們有以下三種方法來繞過:
非< script>標籤:

<img src=0 onerror=alert(/xss1/)>

在這裡插入圖片描述
在這裡插入圖片描述

大小寫轉換:

<Script>alert(/xss2/)</sCript>

在這裡插入圖片描述
雙重< script>標籤:

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

在這裡插入圖片描述

伺服器程式碼 high
在這裡插入圖片描述

$message = htmlspecialchars( $message ); 

所以message不存在漏洞

$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name ); 

preg_replace執行一個正則表示式的搜尋和替換,此時可以使用別的標籤< img> < a> < iframe>等,比如剛剛使用過的< img>,構造payload :<img src=0 onerror=alert(/xss/)>
在這裡插入圖片描述

服務端程式碼 impossible
在這裡插入圖片描述

都是用了htmlspecialchars函式,不存在漏洞。