回到当时,大多数情况下,这样的注射是在服务器日志文件上进行的。这些文件是Apache错误日志、访问日志等等。像这样的技术已经使用了多年,希望它们不会在更新的系统上工作--即使它们是LFI易受攻击的。
他们不会在更新的系统上工作是因为什么?像Apache、Nginx这样的web服务器是否有任何方法来阻止将PHP代码写入日志文件?
发布于 2020-11-11 23:22:36
请注意,在链接文章中,该技术依赖于system(),它应该在面向公共的PHP处理器上禁用。禁用该功能,以及其他疯狂的功能,应该停止很大一部分(即。shell_exec,passthru,exec,popen,proc_open .参见https://globedrill.com/disable-dangerous-php-functions-php-hardening-cpanel/) -此控件适用于PHP php.ini选项disable_functions。另一个相关的选项是open_basedir,它用于将文件包含或操作限制在此值下的目录。
在到达web服务器的上下文中,可以将WAF配置为400通过HTTP将代码注入日志的任何尝试,方法是阻塞门处的请求。
关于记录的内容,web服务器可以确保日志中用户控制的内容在写入之前编码任何数据,例如urlencode。这是一个明智的事情,在服务层,以及应用层。
在另一个级别上,可以对放置日志文件的目录以及应用程序对这些目录的访问应用更多的控制。这可以由chmod等人来处理。若要限制访问,请防止PHP在web服务器上下文下运行以访问日志文件。根据服务器的配置方式,这对于web服务器的日志可能是不可能的(至少没有跳转),但是对于应用程序日志等等。
同样值得一提的是,.htaccess或equiv可以用于拒绝对已知日志文件的任何请求,例如。PHP的error_log。
最后,在PHP本身中,文件是与include、require et.al一起输入的,可以应用一些筛选来确保用户输入准备的值在可接受的范围内,可以使用正则表达式,例如:
<?php
echo preg_match( '/file1\.php|file2\.php|file3\.php/', $lang_consts_file );https://security.stackexchange.com/questions/240707
复制相似问题