DVWA-XSS(Reflected)(反射型跨站脚本攻击)
XSS,即(Cross Site Scripting)跨站腳本攻擊
XSS漏洞類型:
反射型(非持久):主要用于將惡意代碼附加到URL地址的參數中,常用于竊取客戶端cookie信息和釣魚欺騙。
存儲型(持久型):攻擊者將惡意代碼注入到Web服務器中并保存起來,只要客戶端訪問了相應的頁面就會受到攻擊。
DOM型:利用瀏覽器的DOM特性,不是向瀏覽器發請求而是直接通過在本地執行從而修改或竊取本地的信息。
現在我們開始XSS反射型練習
Low
源代碼:
array_key_exists() 函數檢查某個數組中是否存在指定的鍵名,如果鍵名存在則返回 true,如果鍵名不存在則返回 false。這里鍵名為 name
可以看到,low級別的代碼只是判斷了name參數是否為空,如果不為空的話就直接打印出來,并沒有對name參數做任何的過濾和檢查,存在非常明顯的XSS漏洞
我們輸入<script>alert('hack')</script> 直接就執行了我們的 js 代碼
Medium
源代碼:
在這里,str_replace()函數只把“<script>”做了一次過濾,(str_replace()函數不太完美,因為它區分大小寫)
但是雙寫,大寫還是可以寫入的,
我們可以直接大寫繞過
我們輸入<SCRIPT>alert('hack')</SCRIPT> ,直接就執行了我們的js代碼
現在開始雙寫繞過
過濾代碼:
$name = str_replace( '<script>', '', $_GET[ 'name' ] ),<script>被攔截過濾掉;
1、在What's your name? 輸入框內輸入: <script>alert(123)</script>
提交后,瀏覽器沒有彈出我們預期的彈窗,顯示alert內容,相反,直接把“alert(123)”作為name顯示了出來,說明str_replace()函數在這里生效:
2、下面嘗試攻擊,在What's your name? 輸入框內輸入:
<sc<script>ript>alert("如果你能看到,說明攻擊成功")</script>
原理:在這里,str_replace()函數只把“<script>”做了一次過濾,
“ <sc<script>ript>alert("如果你能看到,說明攻擊成功")</script> ”提交后,
完整的“<script>”字符串被攔截,“<sc”和"ript>"被拼接,服務器端實際接受的是“<script>alert("如果你能看到,說明攻擊成功")</script>"。
High
源代碼:
可以看到,high級別的代碼使用了正則表達式直接把 <*s*c*r*i*p*t 給過濾了,* 代表一個或多個任意字符,i代表不區分大小寫。所以,我們的<script>標簽在這里就不能用了。
但是我們可以通過img、body等標簽的事件或者iframe等標簽的src注入惡意的js代碼。
我們輸入<img src=1 onerror=alert('hack')>
上面輸入的意思是,當圖片顯示錯誤時,然后執行 alert('hack') ,
這里我們的src=1肯定顯示錯誤啊,所以就執行alert語句
執行完后查看網頁源碼,可以看到,我們的代碼插入到了頁面中。
Impossible
源代碼:
htmlspecialchars(string):把預定義的字符 "<" (小于)、">" (大于)、& 、‘’、“” 轉換為 HTML 實體,防止瀏覽器將其作為HTML元素
如果當我們輸入 <script>alert('hack')</script> ,因為htmlspecialchars函數會將 <和 >轉換成html實體,并且${name}取的是$name的值,然后包圍在<pre></pre>標簽中被打印出來,所以我們插入的語句并不會被執行。
可以看出,impossible級別的代碼先判斷name是否為空,不為空的話然后驗證其token,來防范CSRF攻擊。然后再用htmlspecialchars函數將name中的預定義字符轉換成html實體,這樣就防止了我們填入標簽
總結
以上是生活随笔為你收集整理的DVWA-XSS(Reflected)(反射型跨站脚本攻击)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Inno Setup区段之Icons篇
- 下一篇: 皮囊-读后感