php server script name,$_SERVER[SCRIPT_NAME]变量可值注入恶意代码

$_SERVER['SCRIPT_NAME']变量在路由传参时,可引入恶意代码,从而导致xss以及恶意代码注入。

PS:本文仅做技术讨论与分享,严禁用于任何非法用途。

$_SERVER['SCRIPT_NAME']变量是PHP中定义的变量,可用于自动获取当前文件在网站中的路径。就目前而言,人们对其是完全信赖的。没有对该变量获取的值进行过滤。

举个例子,我们创建一个test.php,源码如下:

eb32946d33b42d4b1c70eaa5f9954574.png

我们访问这个文件,看看会输出什么。

19106f8d9fe35c25562b7240fbe37e4d.png

可以看到输出了test文件在当前网站中的路径。

我们尝试拼接参数试试。

132fa0ef1c5f86822a9f2c415d724735.png

该变量仍然没有被污染。就这点来看,该变量的获取在一定程度上还是可靠的。

然而,该变量真的没有安全问题吗?我们再试试构造其他payload

22bfe80640280b4fcc4ac53f12e5b3c4.png

是的!这返回了非预期的数据。这并不是我们希望看到的。

根据我的测试。我们只要在路由传参末尾加上“ /”,也就是空格+/,$_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,对其进行恶意代码注入。

f71f154aea88bad1bc054c227b9ef0de.png

根据以上payload,我们可在:www\system\tmp\cache\zh-cn\page\mobile\product_browse

路径下找到我们注入恶意代码的缓存文件。

aa40867dca6d2981b0f026dee4d8ec6d.png

可以看到我们构造的PHP代码已经写入这一缓存文件中。

根据笔者本地测试,该漏洞至少影响:

修复建议:缓解措施:对$_SERVER['SCRIPT_NAME']进行过滤

解决方案:重新实现$_SERVER['SCRIPT_NAME']变量的获取

*本文作者:飞檐哈哈哈,转载请注明来自FreeBuf.COM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值