原文鏈接:http://wyb0.com/posts/middleware-security-configuration/
0x00 Apache
- 服務(wù)器安全配置
#查看服務(wù)器運(yùn)行權(quán)限
$ 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主進(jìn)程,以root權(quán)限運(yùn)行的,因?yàn)锳pache的Web端口是80或443捂襟,而在Ubuntu(Linux)中開啟小于1024的端口需要root權(quán)限蒂萎,所以主進(jìn)程必須以root權(quán)限運(yùn)行。
第二行起為Apache子進(jìn)程贷洲,其執(zhí)行用戶為www-data,www-data是Ubuntu中運(yùn)行Web服務(wù)的默認(rèn)用戶,權(quán)限較低诞仓。
Windows中Apache安裝完成后默認(rèn)是administrator權(quán)限,所以需要降權(quán)速兔,創(chuàng)建一個(gè)用戶Apache墅拭,用戶組為Guests,然后將Apache目錄下的日志的可寫權(quán)限賦給Guests賬戶涣狗。
#目錄及文件權(quán)限
修改配置文件谍婉,vim /etc/apache2/apache2.conf解決目錄遍歷漏洞
#Options Indexes FollowSymLinks
Options FollowSymLinks
或者使用chmod進(jìn)行權(quán)限限制也可以,比如使用chmod o-r flag.txt命令將www-data的讀權(quán)限去掉
windows也可以通過配置文件或者權(quán)限的設(shè)置達(dá)到上面設(shè)置的效果
#錯(cuò)誤重定向
可以通過設(shè)置.htaccess文件達(dá)到目的
比如:ErrorDocument 404 /404.html
RewriteEngine On:開啟跳轉(zhuǎn),符合正則就跳轉(zhuǎn)
RewriteRule "tttt\.html$" "404.html"
#隱藏版本號(hào)
$ vim /etc/apache2/conf-available/security.conf
ServerTokens Prod
ServerSignature Off
#禁止執(zhí)行腳本
$ vim /etc/apache2/apache2.conf
<Directory /var/www/html/upload/> #禁止執(zhí)行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
#第一行是虛擬主機(jī)日志格式
#第二行是組合日志格式(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"
遠(yuǎn)端主機(jī):192.168.228.1
遠(yuǎn)端登錄名:-
遠(yuǎn)程用戶名:-
訪問時(shí)間:[22/Sep/2017:05:26:41 -0700]
HTTP請(qǐng)求:GET /flag.txt HTTP/1.1
HTTP狀態(tài)碼:403
發(fā)送的字節(jié)數(shù):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級(jí)別的消息總是會(huì)被記錄下來穗熬,而不能被屏蔽。
日志格式:[日期和時(shí)間] [錯(cuò)誤等級(jí)] 錯(cuò)誤消息
0x01 Tomcat
- 服務(wù)器安全配置
#運(yùn)行權(quán)限
Linux中Tomcat的運(yùn)行權(quán)限與Tomcat的啟動(dòng)賬戶有關(guān)丁溅,比如以root用戶啟動(dòng)唤蔗,那獲取的webshell就也是root權(quán)限
Windows權(quán)限控制需要進(jìn)行賬戶配置,新建一個(gè)Tomcat用戶,并歸屬于Guests組妓柜,再將賬戶設(shè)置為服務(wù)登錄賬戶
webapps為Web站點(diǎn)目錄箱季,將其中文件上傳的文件夾設(shè)置為不可執(zhí)行。
#服務(wù)器后臺(tái)管理
$ vim /usr/local/tomcat/conf/tomcat-users.xml
<role rolename="manager-gui"/>
<user username="tomcat" password="sdkfiewnksdhsfs" roles="manager-gui"/>
-
服務(wù)器訪問限制
- 隱藏版本信息
$ 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 #設(shè)置為false即可规哪,默認(rèn)就是false <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param>
服務(wù)日志
$ ll /opt/tomcat/logs
localhost.2017-09-29.log:程序異常沒有被捕獲的時(shí)候拋出的地方
catalina.2017-09-29.log:程序的輸出,tomcat的運(yùn)行日志
manager.2017-09-29.log:manager項(xiàng)目專有的
host-manager.2017-09-29.log:manager項(xiàng)目專有的
localhost_access_log.2017-09-29.txt:訪問日志記錄
日志有以下7個(gè)級(jí)別:
SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST
$ vim conf/logging.properties #修改日志級(jí)別
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
0x02 Nginx
- 隱藏版本號(hào)
$ vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; #隱藏版本號(hào)
- 偽造中間件類型和版本號(hào)
偽造中間件類型塌衰,修改源碼然后安裝:
$ vim src/http/ngx_http_header_filter_module.c #修改第49行
static char ngx_http_server_string[] = "Server: nginx" CRLF;
偽造版本號(hào)诉稍,修改源碼然后安裝:
$ 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:瀏覽器拒絕當(dāng)前頁(yè)面加載任何Frame頁(yè)面
SAMEORIGIN:frame頁(yè)面的地址只能為同源域名下的頁(yè)面
ALLOW-FROM:origin為允許frame加載的頁(yè)面地址
- CRLF注入
案例一:
location /sectest {
return 302 https://$host$uri; #應(yīng)將$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導(dǎo)致的任意文件讀取
location /files { #把/files改為/files/即可修復(fù)
alias /home/;
}
當(dāng)訪問http://joychou.me/files/x.txt,即訪問服務(wù)器上的/home/x.txt文件
當(dāng)訪問http://joychou.me/files../etc/passwd時(shí)就讀取了passwd文件了
- 反向代理中的SSRF
反向代理語(yǔ)法:proxy_pass http://ip:port/uri/;
當(dāng)ip可控時(shí)那么反向代理的機(jī)器會(huì)對(duì)該ip發(fā)起http請(qǐng)求最疆,即可造成SSRF杯巨。
這種場(chǎng)景多出現(xiàn)在云WAF、CDN努酸、高防DDOS等網(wǎng)絡(luò)產(chǎn)品服爷。
- add_header重定義
如果location區(qū)塊有add_header,那么以location為準(zhǔn)获诈。
如果location沒有add_header仍源,則繼承Http和server塊的add_header內(nèi)容。
Reference(侵刪):