nginx fastcgi/fpm 正则禁止上传目录php执行

nginx fastcgi/fpm 正则禁止上传目录php执行

王忘杰
2021-03-17 / 0 评论 / 228 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年03月17日,已超过1138天没有更新,若内容或图片失效,请留言反馈。

注意,本文讨论的仅仅是如何绕过禁止规则进入cgi。


nginx fastcgi/fpm 禁止上传目录php执行
因为上传目录是具备写入权限的,写入权限很恐怖。


1.最常见的,完全错误的方法
来源,百度下最常见的

location ~ ^/upload/.*\.(php|php5)$
{
deny all;
}

正则解释
^/upload/.*.(php|php5)$
开头匹配^ 中间任意匹配.* 点匹配\. (php|php5)php扩展名选择器 结尾匹配$


绕过方法,1.php可以是个目录
/1.php/3038714494.png


2.Nginx下多站点正确限制目录php执行权限
来源http://www.freebuf.com/articles/system/49428.html

location ~ /(ups)/.*\.(php|php5)?$
                       {
                               deny all;
                        }

正则解释
比上面的多了一个?问号,问号代表零次或一次。


绕过方式,同上
/1.php/3038714494.png


3.nginx+cgi解析php容易出现的漏洞
来源 http://www.nginx.cn/316.html

location ~* ^/upload/.*.(php|php5)($|/)
{
    deny all;
}

正则解释
^/upload/.*.(php|php5)($|/)
开始匹配^ 匹配任意多字符.* 匹配任意字符请输入代码.(怀疑此处其实他想匹配点,但是正则中的点代表任意字符) 结束或者目录符号($|/)


此方式解决了上面的绕过问题


缺点,封杀太严格,目录中包含php三个字母就会封杀
/php/3038714494.png


4.关于lnmp目录禁止执行的绕过与正确方法
来源地址 http://zone.wooyun.org/content/16213
谷歌缓存 http://webcache.googleusercontent.com/search?q=cache:g3B4qj-SGXgJ:zone.wooyun.org/content/16213+&cd=1&hl=zh-CN&ct=clnk&gl=cn

location ^~ /upload/ { 
    default_type text/plain; 
    expires 30d; 
} 

解释,这不是正则,却更加有趣
^~表示匹配一次,不再让其他location处理,从而不会匹配到cgi中
这种方式需要的判断最少,是非常好的方式


他只有一点点瑕疵,那就是源码泄漏
如果config.php文件被复制到这个目录下,源码一览无余。因为这个方法只是不让php进入cgi,但是却没有禁止他的解析。


5.我的方法
当你看完上面的内容,相信你已经有了自己的方法了
我这里稍微修改下第三种方法,就是括号里的部分

location ~ (/usr/uploads/|/admin/).*\.(php|php5)($|/) {
    deny all;
}

增加的部分 location ~ (/usr/uploads/|/admin/).*\.(php|php5)($|/)
将从匹配任意字符调整为匹配点,这样就不会拦截包含php字符的目录了,但是依然会拦截
如果出现.php目录,我们可以默认认为他是黑客行为。


小提示,注意(/usr/uploads/|/admin/)和(/usr/uploads|/admin)的区别

0

评论

博主关闭了所有页面的评论