php server script name,$_SERVER[SCRIPT_NAME]变量可值注入恶意代码
$_SERVER['SCRIPT_NAME']變量在路由傳參時,可引入惡意代碼,從而導致xss以及惡意代碼注入。
PS:本文僅做技術討論與分享,嚴禁用于任何非法用途。
$_SERVER['SCRIPT_NAME']變量是PHP中定義的變量,可用于自動獲取當前文件在網站中的路徑。就目前而言,人們對其是完全信賴的。沒有對該變量獲取的值進行過濾。
舉個例子,我們創建一個test.php,源碼如下:
我們訪問這個文件,看看會輸出什么。
可以看到輸出了test文件在當前網站中的路徑。
我們嘗試拼接參數試試。
該變量仍然沒有被污染。就這點來看,該變量的獲取在一定程度上還是可靠的。
然而,該變量真的沒有安全問題嗎?我們再試試構造其他payload
是的!這返回了非預期的數據。這并不是我們希望看到的。
根據我的測試。我們只要在路由傳參末尾加上“ /”,也就是空格+/,$_SERVER['SCRIPT_NAME']便會獲取“ /”到域名之間的所有字符。該變量只會在路由傳參中獲取我們傳入的payload,從而污染參數。若是動態的參數傳遞,如:test?id=123 ?這種的傳參方式則不會帶入其他數據。
基于此,我們可以對一些路由傳參的開源cms構造惡意payload,從而實現任意代碼寫入,或者實現反射型xss。
反射型XSS,payload:index.php/product/c7.html/%EF%BC%9F'%20οnlοad=alert(123)%20//
如國內的蟬知cms,其6.6版本就是路由傳參。我們就可以構造如下payload,對其進行惡意代碼注入。
根據以上payload,我們可在:www\system\tmp\cache\zh-cn\page\mobile\product_browse
路徑下找到我們注入惡意代碼的緩存文件。
可以看到我們構造的PHP代碼已經寫入這一緩存文件中。
根據筆者本地測試,該漏洞至少影響:
修復建議:緩解措施:對$_SERVER['SCRIPT_NAME']進行過濾
解決方案:重新實現$_SERVER['SCRIPT_NAME']變量的獲取
*本文作者:飛檐哈哈哈,轉載請注明來自FreeBuf.COM
總結
以上是生活随笔為你收集整理的php server script name,$_SERVER[SCRIPT_NAME]变量可值注入恶意代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 1e6,java-GeoPoi
- 下一篇: php通过ip查询经纬度,php 获取客