freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

$_SERVER[SCRIPT_NAME]变量可值注入恶意代码
2018-04-03 16:00:20

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

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

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

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

1.png

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

2.png

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

我们尝试拼接参数试试。

3.png

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

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

4.png

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

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

5.png

根据以上payload,我们可在:

www\system\tmp\cache\zh-cn\page\mobile\product_browse

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

6.png

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

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

修复建议:

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

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

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

# 恶意代码
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者