欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

$_SERVER[SCRIPT_NAME]变量可值注入恶意代码

来源:本站整理 作者:佚名 时间:2018-04-03 TAG: 我要投稿

$_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'%20onload=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']变量的获取
 

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载