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