天天看點

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

  【簡介】跨站腳本(Cross-site scripting,簡稱:XSS)是一種網站應用程式的安全漏洞攻擊,是代碼注入的一種。XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使使用者加載并執行攻擊者惡意制造的網頁程式。進而使目标計算機收到危害。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

     反射型XSS

  反射型XSS攻擊是指注入的腳本從Web伺服器反射出來的攻擊,例如錯誤消息、搜尋結果或包含作為請求的一部分發送到伺服器的部分或全部輸入的任何其他響應。

  反射型XSS攻擊通過其他途徑傳遞給受害者,例如在電子郵件中或在其他一些網站上。當使用者被欺騙點選惡意連結,送出特制表單,甚至隻是浏覽惡意網站時,注入的代碼會傳播到易受攻擊的網站,這會将攻擊反映回使用者的浏覽器。然後浏覽器執行代碼,因為它來自“可信”伺服器。反射型XSS有時也稱為非持久性或II型XSS。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

  安全等級 - Low

  将DVWA的安全等級切換到Low。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ① 選擇【XSS (Reflected)】,輸入MG,點選【Submit】,下面會顯示 Hello MG。點選【View Source】,檢視資料庫源代碼。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ② 分析源碼,可以看到沒有對參數name做任何的過濾。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ③ 輸入 <script>alert(123456)</script> ,點選【Submit】。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ④ 可以看到有彈出視窗,顯示指定的内容。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

  安全等級 - Medium

  将安全等級更新為中級。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ① 分析源代碼可以看到,使用str_replace函數将字元 ‘<script>' 轉換為NULL,由于這個函數隻執行一次,是以有多種方法可以繞過。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ② 輸入 <sc<script>ript>alert(123456)</script> ,點選【Suibmit】。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ③ 将 '<script>' 标簽雙寫繞過,隻能過濾一次,這就達成了我們目的。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ④ 輸入 <Script>alert(123456)</script> ,點選【Suibmit】。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ⑤ 使用大小寫混淆的方法,也可以成功的繞過。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

  安全等級 - High

  将安全等級更新為進階。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ① 分析源代碼可以看到,使用了

preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i'

正規表達式來過濾,這樣就不能再用大小寫和重寫來繞過了。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ② 輸入 <img src="" οnerrοr="alert('123456')"> ,點選【Suibmit】。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ③ 雖然無法使用<script>标簽注入XSS代碼,但是可以通過img、body等标簽的事件或者iframe等标簽的src注入惡意的js代碼。這樣就會避免出現<script>标簽被正規表達式比對到。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

  安全等級 - Impossible

  将安全等級更新為不可能。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ① 分析源代碼可以看到,使用了 htmlspecialchars()函數,這個函數的功能是把預定義的字元 "<" (小于)和 ">" (大于)轉換為 HTML 實體。這樣将<>這兩個标簽字元變為html實體我們就無法構造标簽進行混淆攻擊了。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

  FortiWeb 防護

  FortiWeb可以阻止這一類的攻擊。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

   ① 這次我們通路192.168.1.128,也就是經過FortiWeb保護的DVWA,安全選擇Low,輸入一段注入代碼,看看會發生什麼。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ② 通路被FortiWeb成功的阻止了。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

     ③ 登入FortiWeb,選擇菜單【日志和報表】-【攻擊】,點選【添加過濾器】。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ④ 選擇【消息ID】。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ⑤  選擇阻止頁面上顯示的消息ID。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練

    ⑥ 顯示XSS攻擊被FortiWeb阻止了。如果有了FortiWeb,這樣大部分因為代碼産生的漏洞安全問題,就可以有效的解決了。

Web篇(6.3) 08. 跨站腳本 - 反射型XSS ❀ FortiWeb 攻防演練