网站首页 > 博客文章 正文
1.本文为公测版,一旦发现有任何错误内容,会立即进行修复,请持续关注本站。
2.本文在正式版之前会不断的邀请各路黑客大手进行评价测试,欢迎提出异议。
本文仅针对网站部分,本文会对typecho,wordpress进行测试
如果你root端口为22,并且密码是123456,就没必要往下看了。
网站环境为linux tengine/nginx mariaDB,同理,apache也有相关设置,百度实验下即可。
**本文会阐述以下部分
1.基础权限控制
2.执行目录限制
3.PHP的限制
4.webshell写入与执行
5.权限细分,必须写入的目录**
1.基础权限控制
什么叫基础权限?在LNMP架构下,nginx+php-fpm架构需要什么权限?
这里我们先来看一下默认权限
默认我们的nginx运行用户是nginx,而php-fpm的默认用户是apache,默认用户安全吗?
看一下webshell
uid=48(apache) gid=48(apache) groups=48(apache)
很明显,我们的默认用户是apache
我们使用shell新建一个目录,很明显,我们是无法建立文件夹的
mkdir: cannot create directory `1': Permission denied
在网上很多教程会告诉我们,吧nginx和phpfpm改成同样的用户,我们看看会发生什么。
[root@gov 1]# sudo -u nginx mkdir 1
[root@gov 1]# ll
total 4
drwxr-xr-x 2 nginx nginx 4096 Aug 19 18:08 1
没错,这是一项愚蠢的决定!
所以默认权限是安全的吗?并不是,你忘了上传目录,我们看下上传目录的权限
drwxrwx--- 3 nginx apache 4096 Aug 14 17:09 uploads
没错,上传目录的存在就是放大权限,如果php没有写入权限,那么他就无法上传图片。
假设,我们手里有一个0day,现在我要用它来getshell
我会选择uploads目录
-rw-r--r-- 1 apache apache 0 Aug 19 18:11 1.php
完美写入,接着你的站就会被玩坏了,写入shell后我们可以插件数据库链接密码,进网站后台,脱裤,挂黑链等等等等
网站里有几个目录是默认可以写入的?在你的网站目录下执行ls -l
通常plugins themes uploads
这三个目录都是可以写入的。
你还有其他目录可以写入?赶紧修改权限吧!
加入我们的网站在/var/www/html/root
那么下面的命令是极好的,对于必须要有上传权限的uploads目录,我们下面再说
chown -R nginx.apache html
find /var/www/html/root -type d -exec chmod 750 {} \;
find /var/www/html/root -not -type d -exec chmod 640 {} \;
chmod 770 /var/www/html/root/uploads -R
如果你有某些插件也需要写入权限,给他权限,并认真看下面的内容。
2.执行目录限制
我们的apache权限有多大呢?相同的网站拥有相同的权限。
默认情况下,我们的apache权限能浏览大部分目录。最要命的问题在于,他可以跨站执行,从你的网站一直接执行到网站二。
我们需要给他一个限制,每个虚拟主机一个单独的限制,没错就是open_basedir。
这里我们需要特别的技巧,每个虚拟机都要限制
这样虚拟主机将只允许在网站目录和tmp目录执行,而不能穿越到其他目录
在乌云有一篇讨论绕过open_basedir
的文章,所以open_basedir
只能让你更安全而不是彻底安全,所以你还需要往下看。
server {
location ~ .*\.php(\/.*)*$ {
#include pathinfo.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/";
3.PHP的限制
我们想一个另类解决办法,如何限制webshell的执行?
在php.ini里,我们可以选择关闭某些不安全的函数
但是由于php这玩意分之多又复杂,这里只能整理出一部分不安全的函数。
直接添加到php.ini最后面即可
disable_functions=exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,dl,popen,pcntl_exec,socket_accept,socket_bind,socket_clear_error,socket_close,socket_connect,socket_create_listen,socket_create_pair,socket_create,socket_get_option,socket_getpeername,socket_getsockname,socket_last_error,socket_listen,socket_read,socket_recv,socket_recvfrom,socket_select,socket_send,socket_sendto,socket_set_block,socket_set_nonblock,socket_set_option,socket_shutdown,socket_strerror,socket_write,stream_socket_server,disk_total_space,disk_free_space,diskfreespace,getrusage,get_current_user,getmyuid,getmypid,dl,leak,listen,chgrp,link,symlink,dlopen,proc_nice,proc_get_stats,proc_terminate,shell_exec,sh2_exec,posix_getpwuid,posix_getgrgid,posix_kill,ini_restore,mkfifo,dbmopen,dbase_open,filepro,filepro_rowcount,posix_mkfifo,putenv,sleep,chmod,chown,chroot,ini_set,phpinfo,proc_get_status,error_log,syslog,readlink,putenv
在看webshell,我们会发现里面空空如也了,并不能执行命令了。
4.webshell写入与执行
现在我们的网站已经很安全了,他能否更加安全?
现在,我们就要说说我们必须要有执行权限的upload目录了,nginx同样提供了解决方案
location ~ /(usr/uploads)/.*\.(php|php5)?$
{
deny all;
}
这个时候我们打开uploads中的php文件会提示403
403 Forbidden
You don't have permission to access the URL on this server. Sorry for the inconvenience.
我们的效果得到验证,即使写入也不能执行。
5.必须要写入权限但是又包含php文件的目录。
例如我的用的邮件通知插件目录内有cache和和log目录,是必须有写入权限的
这里千万不要犯懒,直接给CommentToMail
写入
location ~ /(usr/uploads|usr/plugins/CommentToMail/cache|usr/plugins/CommentToMail/log)/.*\.(php|php5)?$
{
deny all;
}
既可以实现写入文件,又可以让php无法执行。
总结,上面的所有配置:
用户与PHP运行权限分离
nginx:apache
执行目录限制
open_basedir
PHP函数限制
php.ini
特殊目录关闭PHP解析
deny all
权限细分
xx|xx|xx
欢迎拍砖,同时 起司靶场v2 上线,完全脱离安全锁之类的软件,欢迎测试。
起司靶场v2
猜你喜欢
- 2024-10-02 K8s 网络问题自己能解决吗?(k8s网络不稳定)
- 2024-10-02 重学计算机组成原理(七)- 程序无法同时在Linux和Windows下运行
- 2024-10-02 AOP编程_Android优雅权限框架(2)Demo完全解析
- 2024-10-02 微信小程序云数据库update更新数据为0问题解决
- 2024-10-02 su切换用户:su failed to execute /bin/bash;Permission denied
- 2024-10-02 大数据------安装错误集锦(详细解决教程)
- 2024-10-02 gradle4.1后not resolve com.android.tools.build:gradle:3.0.1
- 2024-10-02 纳税申报系统常见问题(纳税申报系统常见问题有哪些)
- 2024-10-02 mediaDevices.getUserMedia提示DOMException:Permission denied by
- 2024-10-02 终于有人把所有的Java异常处理方法给总结出来了
你 发表评论:
欢迎- 07-08Google Cloud Platform 加入支持 Docker 的容器引擎
- 07-08日本KDDI与Google Cloud 签署合作备忘录,共探AI未来
- 07-08美国Infoblox与Google Cloud合作推出云原生网络和安全解决方案
- 07-08GoogleCloud为Spanner数据库引入HDD层,将冷存储成本降低80%
- 07-08谷歌推出Cloud Dataproc,缩短集群启动时间
- 07-08Infovista与Google Cloud携手推进射频网络规划革新
- 07-08比利时Odoo与Google Cloud建立增强合作,扩大全球影响力
- 07-08BT 和 Google Cloud 通过 Global Fabric 加速 AI 网络
- 最近发表
-
- Google Cloud Platform 加入支持 Docker 的容器引擎
- 日本KDDI与Google Cloud 签署合作备忘录,共探AI未来
- 美国Infoblox与Google Cloud合作推出云原生网络和安全解决方案
- GoogleCloud为Spanner数据库引入HDD层,将冷存储成本降低80%
- 谷歌推出Cloud Dataproc,缩短集群启动时间
- Infovista与Google Cloud携手推进射频网络规划革新
- 比利时Odoo与Google Cloud建立增强合作,扩大全球影响力
- BT 和 Google Cloud 通过 Global Fabric 加速 AI 网络
- NCSA和Google Cloud合作开发AI驱动的网络防御系统,加强泰国网络空间的安全性
- SAP将在沙特阿拉伯 Google Cloud 上推出BTP服务
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)