中间件安全配置

原文链接:http://wyb0.com/posts/middleware-security-configuration/

0x00 Apache

  • 服务器安全配置
#查看服务器运行权限
$ ps aux|grep apache|grep -v grep
$ sudo lsof -i:80
COMMAND    PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache2   1377     root    4u  IPv6  12596      0t0  TCP *:http (LISTEN)
apache2  21121 www-data    4u  IPv6  12596      0t0  TCP *:http (LISTEN)
apache2  21122 www-data    4u  IPv6  12596      0t0  TCP *:http (LISTEN)
apache2  21123 www-data    4u  IPv6  12596      0t0  TCP *:http (LISTEN)
apache2  21124 www-data    4u  IPv6  12596      0t0  TCP *:http (LISTEN)
apache2  21125 www-data    4u  IPv6  12596      0t0  TCP *:http (LISTEN)
apache2  24800 www-data    4u  IPv6  12596      0t0  TCP *:http (LISTEN)
apache2 127488 www-data    4u  IPv6  12596      0t0  TCP *:http (LISTEN)

第一行是Apache主进程,以root权限运行的,因为Apache的Web端口是80或443,而在Ubuntu(Linux)中开启小于1024的端口需要root权限,所以主进程必须以root权限运行。
第二行起为Apache子进程,其执行用户为www-data,www-data是Ubuntu中运行Web服务的默认用户,权限较低。

Windows中Apache安装完成后默认是administrator权限,所以需要降权,创建一个用户Apache,用户组为Guests,然后将Apache目录下的日志的可写权限赋给Guests账户。
#目录及文件权限
修改配置文件,vim /etc/apache2/apache2.conf解决目录遍历漏洞
#Options Indexes FollowSymLinks
Options FollowSymLinks

或者使用chmod进行权限限制也可以,比如使用chmod o-r flag.txt命令将www-data的读权限去掉

windows也可以通过配置文件或者权限的设置达到上面设置的效果
#错误重定向
可以通过设置.htaccess文件达到目的
比如:ErrorDocument 404 /404.html

RewriteEngine On:开启跳转,符合正则就跳转
RewriteRule "tttt\.html$"  "404.html"
#隐藏版本号
$ vim /etc/apache2/conf-available/security.conf
ServerTokens Prod
ServerSignature Off
#禁止执行脚本
$ vim /etc/apache2/apache2.conf
<Directory /var/www/html/upload/> #禁止执行php
    php_flag engine off
</Directory>
  • Apache日志格式

vim /etc/apache2/apache2.conf

#access.log格式
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

#第一行是虚拟主机日志格式
#第二行是组合日志格式(Combined Log Format)
#第三行是通用日志格式(Common Log Format)
#access.log日志示例
192.168.228.1 - - [22/Sep/2017:05:26:41 -0700] "GET /flag.txt HTTP/1.1" 403 515 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0"

远端主机:192.168.228.1
远端登录名:-
远程用户名:-
访问时间:[22/Sep/2017:05:26:41 -0700]
HTTP请求:GET /flag.txt HTTP/1.1
HTTP状态码:403
发送的字节数:515
Referer:-
User-Agent:"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0"
#error.log
路径一般为:/var/log/apache2/error.log,notice级别的消息总是会被记录下来,而不能被屏蔽。
日志格式:[日期和时间] [错误等级] 错误消息

0x01 Tomcat

  • 服务器安全配置
#运行权限
Linux中Tomcat的运行权限与Tomcat的启动账户有关,比如以root用户启动,那获取的webshell就也是root权限
Windows权限控制需要进行账户配置,新建一个Tomcat用户,并归属于Guests组,再将账户设置为服务登录账户

webapps为Web站点目录,将其中文件上传的文件夹设置为不可执行。

#服务器后台管理
$ vim /usr/local/tomcat/conf/tomcat-users.xml
  <role rolename="manager-gui"/>
  <user username="tomcat" password="sdkfiewnksdhsfs" roles="manager-gui"/>
  • 服务器访问限制

    • 隐藏版本信息
    $ cd /opt/tomcat/lib
    $ jar -xvf catalina.jar #生成META-INF和org文件夹
    $ vim org/apache/catalina/util/ServerInfo.properties #编辑配置文件,去掉版本信息
    $ jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties #将修改后的文件压回jar包
    $ cd ../bin/
    $ ./startup.sh
    
    • 禁止列目录
    vim /opt/tomcat/conf/web.xml #设置为false即可,默认就是false
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
    
  • 服务日志

$ ll /opt/tomcat/logs
localhost.2017-09-29.log:程序异常没有被捕获的时候抛出的地方
catalina.2017-09-29.log:程序的输出,tomcat的运行日志
manager.2017-09-29.log:manager项目专有的
host-manager.2017-09-29.log:manager项目专有的
localhost_access_log.2017-09-29.txt:访问日志记录

日志有以下7个级别:
SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST 

$ vim conf/logging.properties #修改日志级别
1catalina.org.apache.juli.AsyncFileHandler.level = FINE

0x02 Nginx

  • 隐藏版本号
$ vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;

    server_tokens off; #隐藏版本号
  • 伪造中间件类型和版本号
伪造中间件类型,修改源码然后安装:
$ vim src/http/ngx_http_header_filter_module.c #修改第49行
static char ngx_http_server_string[] = "Server: nginx" CRLF;

伪造版本号,修改源码然后安装:
$ vim nginx-1.9.9/src/core/nginx.h
#define nginx_version      1009009
#define NGINX_VERSION      "1.9.9"
#define NGINX_VER          "nginx/“ NGINX_VERSION

修改fastcgi.conf
$ vim /usr/local/nginx/conf/fastcgi.conf #修改第17行
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
  • 防止钓鱼和XSS
$ vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       80;
        server_name  localhost;

        add_header X-Frame-Options SAMEORIGIN; #在头部添加X-Frame-Options防止被Frame
        add_header X-XSS-Protection "1; mode=block"; #防御XSS

DENY:浏览器拒绝当前页面加载任何Frame页面
SAMEORIGIN:frame页面的地址只能为同源域名下的页面
ALLOW-FROM:origin为允许frame加载的页面地址
  • CRLF注入
案例一:
location /sectest {
  return 302 https://$host$uri; #应将$uri或者$document_uri改为$request_uri
}

案例二:
location / {
    rewrite ^ https://$host/$uri;
}

案例三:
server {
    listen 80 default;

    location ~ /v1/((?<action>[^.]*)\.json)?$ {
        add_header X-Action $action;
        return 200 "OK";
    }
}
  • alias导致的任意文件读取
location /files { #把/files改为/files/即可修复
  alias /home/;
}

当访问http://joychou.me/files/x.txt,即访问服务器上的/home/x.txt文件
当访问http://joychou.me/files../etc/passwd时就读取了passwd文件了
  • 反向代理中的SSRF
反向代理语法:proxy_pass http://ip:port/uri/;
当ip可控时那么反向代理的机器会对该ip发起http请求,即可造成SSRF。
这种场景多出现在云WAF、CDN、高防DDOS等网络产品。
  • add_header重定义
如果location区块有add_header,那么以location为准。
如果location没有add_header,则继承Http和server块的add_header内容。



Reference(侵删):

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容