文件上传可能存在的漏洞
例如:上传插件,百度编辑器。对图片等文件格式,不是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排名的,应该是竞争对手或对我公司有仇的人干的。