Low
我們直接查看源碼
對Low型源碼中部分函數解釋
trim()移除字符串兩側的空白字符或其他預定義字符\t,\n,\x0b,\r,空格 tripslashes(string)函數去除反斜杠 \ mysqli_real_escape_string(connection,escapestring)轉義在SQL語句中使用的字符串中的特殊字符。
$GLOBALS:引用全局作用域中可用的全部變量。
我們可以從上文中看出,低級的xss存儲型,是沒有對<script>進行過濾的
接下來我們直接進行彈窗測試。
輸入 <script>alert('xss')</script>
點sign guestbook提交之后完成彈窗,如下圖所示
Medium
查看源碼
str_replace( '<script>', '', $name );過濾小寫的<script>
htmlspecialchars() 函數,把預定義的字符 "<" (小於)和 ">" (大於)轉換為 HTML 實體:
我們使用Burp Suite抓包改包實現彈窗
抓包准備
設置瀏覽器代理
Burp Suite設置
接下來我門清除一下DVWA設置
因為源碼里面有htmlspecialchars() 函數,我們采用抓包改包繞過。
我們隨便輸入一些字符,因為我們要去抓包來修改,所以這里輸入什么都不影響。
這個時候不要點提交,返回Busp Suite,依次點擊,直到開啟攔截請求
截取成功
在數據傳輸過程中會進行URL編碼的轉換,我們在Burp Suite里進行編碼轉換。
注意:我們需要轉換的編碼是 <SCRIPT>alert('1')</SCRIPT> ,因為源碼里有$name = str_replace( '<script>', '', $name );---把小寫的<script>替換為空字符串。我們采用大寫=繞過
把下圖標識為1的部分替換,替換完成后點擊放包
完成彈窗
完成彈窗之后,記得把Burp Suite的攔截禁用關掉。方便后續操作。
High
我們查看源碼,可以發現,相比前面的medium,只是加上了對<script>關鍵字的限制
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name ); --- 將$name變量(我們輸入的Name文本框部分)中包含有script(i:不限制大小寫)進行替換為空字符。
我們同樣采用抓包改包繞過。---既然限制了script關鍵字的輸入,我們可以采用別的彈窗方式 <img src=x onerror=alert('123')>
記得在提交之前,開啟攔截請求。
攔截成功
將1122替換為<img src=x onerror=alert('123')>
完成彈窗