文件上传可能存在的漏洞

例如:上传插件,百度编辑器。对图片等文件格式,不是100%,安全。对于http content-type。是可以绕过的。或者文件格式和提交的额数据非法字符进行绕过。

具体可以搜索uploadify的上传漏洞,和百度编辑器的漏洞。

在放上查找资料的时候。发现百度编辑器的上传demo。已经不提供了。

http://www.moonsec.com/post-229.html 这篇文章上面有提到上传的非法字符。

我的思路是在最后一道代码前解决。如果是php执行环境。那么他要访问一定是.php后缀的文件。需要经过http或https访问的。只需要在输出上传成功的文件路径上对文件进行类型判断。有的上传插件的.php不严谨。例如test.php.jpg文件。是一个php文件只不过是改了后缀而已。

还有文件校验绕过。具体文章:https://blog.csdn.net/qq_26090065/article/details/82715361

php服务器代码运行环境存在的漏洞。

例如一下执行shell环境的函数。和eval这种强大的函数。在thinkphp5的框架是不存在的,还有exec。等函数。

具体方法在我的php编译安装里面有介绍。

thinkphp3.2.3文件模板存在的漏洞

模板缓存。主页执行正常的post的请求。因为有模板缓存的东西存在。post请求包含不合法的字符串。被解析。写入了缓存中。包含了非法代码。正确的框架目录格式可以避免的。

而且因为index.php和其他框架配置文件等在同一文件夹能。所有的php文件和目录架构都可以看的见,包括了数据库配置文件,如果你的3306端口对外开放的话。那么数据丢失了。这个是和eval函数也有点关联,补全这篇文章的时候,攻击脚本已经配我删除了。当然被攻击的问题已经全部解决。

图

图

图

nginx配置不当可能导致的

添加清除header头模块和安装nginx的链接https://blog.csdn.net/chunyuan314/article/details/81737303

还有一点是框架本身的入口文件和其他框架目录平级。而thinkphp5的入口则在public下。里面只包含静态文件资源。

try_files $uri =404; 这条nginx代码很有用,为什么这么说,如果服务器不存在php文件,会报出404。thinkphp则有条路由重写的规则就是。

   if (!-e  $request_filename) {
        rewrite ^/(.*)$ /index.php?s=$1 last;
    }

例如:/xxx.php没有这个文件,他会进入index.php当做路由请求。那么解析的是php,不是nginx。这样会给人可乘之机,继续往框架的缓存模板里面写入代码。因为其他的请求里面有的是包含参数的,或者数据查询,因为包含的模板的php代码没有变是不会生成新的模板缓存。

server {
        listen 80;
        #需要在域名解析哪里设置解析才行,301永久跳转。不影响seo。优化
        #307属于临时跳转。对SEO还是有影响的。
        server_name bjpowernode.com;
        return   301 http://www.bjpowernode.com;
    }


server {
    listen       80;
    server_name  www.bjpowernode.com  m.bjpowernode.com;

    #非插件的上传脚本禁止访问php文件。原因可能存在恶意脚本
    location ~ ^/static/uploads/.*\.php$ {
        return 404;
    }

    location ~ ^/Application/.*\.php$ {
        return 404;
    }
    
    location ~ ^/ThinkPHP/.*\.php$ {
        return 404;
    }
    location ~ ^/rsync_backup/.*\.php$ {
        return 404;
    }
     
    location ~ ^/Conf/.*\.php$ {
        return 404;
    }

    location ~ ^/script/.*\.php$ {
        return 404;
    }

    location ~ ^/ueditor/.*\.php$ {
        return 404;
    }
    #禁止生成关于图片和静态资源的请求日志。并且进行缓存
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|JPG|ico|mp4|MP4|JPG|PNG)$ {
        expires     1d;
        access_log off;
    }
    location ~ .*\.(js|css)$ {
        expires     1d;
        access_log off;
    }
    #日志的名称
    access_log  logs/access_www.log  main ;
    error_log  logs/error_www.log;

    root /data/sites/www.bjpowernode.com;

    
    location / {
        index  index.php;
        if (!-e  $request_filename) {
            rewrite ^/(.*)$ /index.php?s=$1 last;
        }
    
             #### 密码访问 ####
#           auth_basic "test posernode";
#           auth_basic_user_file /usr/local/nginx/conf/vhost/password;
#           autoindex on;
    
    }

        error_page  404              /404.html;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        
        }
        #设置404.html出错的静态页面地址。
        location = /404.html {
             root /data/sites/www.bjpowernode.com;
        }

        location ~ .+\.php.*$ {
            #try_files如果php文件不存在直接返回404错误码,而不是走location  
            #rewrite ^/(.*)$ /index.php?s=$1 last;路由重写,通过php框架中报错的404。
            #可以直接返回404.html页面
            try_files      $uri =404;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME  $request_filename;
            include        fastcgi_params;
         }

    }

写完这篇文章的时候,发现连续10天的攻击,捣乱的家伙已经放弃了。所有漏洞只差一个evel函数没有禁用。当时看了一下nginx日志。访问官网的上一个地址是www.link114.com大体看了一下,差seo排名的,应该是竞争对手或对我公司有仇的人干的。

Last modification:January 31, 2020
如果觉得我的文章对你有用,请随意赞赏