目录:
- Apache详解
- 一、配置文件详解
- 1、默认配置
- 2、访问控制和网站首页配置
- 3、日志文件配置
- 4、类型配置
- 二、作业+基于目录的访问控制
- 三、Apache设置虚拟主机
- 一、配置文件详解
- APAche漏洞复现
- 一、Apache多后缀解析漏洞
- 1、后缀解析的原理:
- 2、漏洞复现
- 3、漏洞防御
- 二、Apache换行解析漏洞复现(CVE-2017- 15715)
- 1、漏洞原理
- 2、漏洞复现
- 3、漏洞防御
- 三、CVE-2021-41773 漏洞复现
- 1、漏洞原理
- 2、漏洞复现
- 3、漏洞防御
- 四、CVE-2021-42013 漏洞复现
- 1、漏洞原理
- 2、漏洞复现
- 3、漏洞防御
- 一、Apache多后缀解析漏洞
Apache详解👀
yum install httpd -t 安装Apache
/etc/httpd/conf/httpd.conf Apache默认配置文件
/var/www/html/ Apache的默认根目录
一、配置文件详解
1、默认配置
ServerRoot "/etc/httpd" #apache服务的根目录
Listen 80 #默认监听的端口
Include conf.modules.d/*.conf #包含.conf结尾的文件,如果没有就会报错
User apache #指定运行apache的用户
Group apache #指定运行apache的属组
ServerAdmin root@localhost #邮箱地址
<Directory /> #httpd根目录的配置文件
AllowOverride none #不允许当前目录下的.hatccess文件生效
Require all denied #拒绝所有访问
</Directory>
2、访问控制和网站首页配置👀
DocumentRoot "/var/www/html" #指定网站的根目录
<Directory "/var/www"> #对于www目录做一个配置允许所有
AllowOverride None #不允许当前目录下的.hatccess文件生效
Require all granted #允许所有访问
</Directory>
<Directory "/var/www/html"> #对html开启首页配置文件
Options Indexes FollowSymLinks #Indexes在没有默认索引文件时列出目录内容,FollowSymLinks允许跟随符号链接到其他文件或目录
AllowOverride None #不允许当前目录下的.hatccess文件生效
Require all granted #这个设置是允许客户端访问当前目录下的所有文件和子目录
</Directory>
<IfModule dir_module>
DirectoryIndex index.html #设置默认首页文件为index.html
</IfModule>
<Files ".ht*"> #只要被访问到.ht开头的文件就会被拒绝访问
Require all denied
</Files>
3、日志文件配置👀
ErrorLog "logs/error_log" #错误日志存放位置
LogLevel warn #设置日志级别
<IfModule log_config_module> #log_config_module启动两种日志格式combined和common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined #访问日志记录位置
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" #设置别名(重定向)
4、类型配置👀
</IfModule>
<Directory "/var/www/cgi-bin"> #对cgi-bin的配置
AllowOverride None
Options None
Requireall granted
</Directory>
<IfModule mime_module> #用于处理http的mime类型
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8 #默认指定的字符编码
<IfModule mime_magic_module> #启用这个魔术模块的话检测文件类型
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on #开了这个会加快传输速度
IncludeOptional conf.d/*.conf #把conf结尾的文件包含进来,不包含也不会影响apache
二、基于目录的访问控制👀
<RequireAll>
require all granted #允许所有访问
require all denied #拒绝所有访问
</RequireAll>
<RequireAll>
require ip 192.168.1.1 #仅允许192.168.1.1的主机访问
</RequireAll>
<RequireAll>
require all granted
require not ip 192.168.1.2 #仅拒绝192.168.1.2的主机访问
</RequireAll>
当 Indexes 关键字被包含在 Options 指令中时,它告诉 Apache 当请求的目录下没有默认索引文件(如 index.html, index.php 等)时,应该生成并显示一个目录内容的列表。换句话说,它允许用户浏览该目录下的文件和子目录。这对于调试或测试环境可能是有用的,但在生产环境中通常会被禁用,因为暴露目录结构可能构成安全风险
FollowSymLinks 允许 Apache 解析和跟随符号链接。这意味着如果请求的文件是一个符号链接,服务器将会跟随这个链接并返回指向的实际文件。这对于使用符号链接组织文件结构的情况非常有用,但同样需要注意安全性和性能影响,因为跟随符号链接可能会导致意外的文件访问或增加服务器负载。
在Apache网站根目录新建一个名为admin的目录,并新建默认首页文件,文件内容为This is admin。
创建tom和jary账户,由于jary前面创建过找不到记录,就只重新创建了tom
由于登入的时候被cookie记录了缓存,后面访问就不需要登入了,所有jary就没有登入
补充:
前面漏了一步设置首页文件
三、Apache设置虚拟主机👀
1、基于域名:每个主机使用不同的域名,但是IP相同,使用最为普及的方式
APAche漏洞复现👀
一、Apache多后缀解析漏洞
1、后缀解析的原理:
运维人员配置了某个后缀的优先级为最高,只要出现了指定的后缀,不管文件是什么类型的都会被当作那个指定的文件来解析;如果运维人员给.php后缀的文件添加了处理程序 AddHandler application/x-httpd-php .php 那么在有多个后缀的情况下,只要文件含有.php后缀那么该文件就会被识别为PHP文件进行解析。
如:index.php.jpeg 这个文件在前端会被当做图片的格式上传成功,但上传到服务器里会当做php文件来解析
2、漏洞复现
进入相应的漏洞目录/vulhub-master/httpd/apache_parsing_vulnerability/
启动成功默认映射端口是80
因为这个漏洞是多后缀解析,我采用的方式是以图片后缀为结尾绕过白名单,前面加个.php用于被解析
到这一步基本已经控制了web服务器了,可以写报告了,也可以继续内网渗透
3、漏洞防御👀
①在配置文件中添加如下内容,匹配样式为 .php. 的文件并拒绝访问
②将原本的 AddHandler application/x-httpd-php .php 注释掉,然后为以.php结尾的文件添加处理程序
验证防御效果
防御成功
二、Apache换行解析漏洞复现(CVE-2017- 15715)👀
1、漏洞原理
在Apache 2.4.0-2.4.29当中存在,在上述版本当中,Apache开启了正则表达式的多行属性,在匹配.php$文件时除了会匹配到的.php结尾的文件还会匹配到.php\0a结尾的文件,在业务环境中.php结尾的文件会交由PHP解释器执行,所以黑客可以上传.php\0a结尾对的文件来绕过上传限制,并且让文件中的内容按照PHP代码来执行
2、漏洞复现
①进入到CVE-2017-15715漏洞目录,执行docker-compose up -d启动漏洞环境并后台允许
启动成功,centos7端口是8080,docker容器是80,8080映射80端口
发现上传的文件会被重命名php的文件
换行绕过:
1、改16进制,在php后面插入0a,0a十六进制表示换行
2、直接在文件后面按回车也可以
改十六进制
3、漏洞防御👀
①升级到无漏洞的版本
②对上传的文件进行重命名
③上传时采用白名单的验证方式
三、CVE-2021-41773 漏洞复现👀
1、漏洞原理
Apache httpd Server 2.4.49 版本引入了一个新的函数,在对路径参数进行规范化时会先进行url解 码,然后判断是否存在../的路径穿越符,当检测到路径中存在%字符时,如果紧跟的2个字符是十六进制字符,就会进行url解码,将其转换成标准字符,如%2e->.,转换完成后会判断是否存在../。如果路径中 存在%2e./形式,就会检测到,但是出现.%2e/这种形式时,就不会检测到,原因是在遍历到第一个.字符 时,此时检测到后面的两个字符是%2而不是./,就不会把它当作路径穿越符处理,因此可以使用.%2e/或 者%2e%2e绕过对路径穿越符的检测。
2、漏洞复现👀
进入漏洞环境并启动后台运行
查看是否启动成功
访问漏洞网站
打开burp抓包并发送到重放模块
远程命令执行:1、需要在根指定cgi-bin目录菜才能执行命令 2、切换POST格式
反弹,半shell,打开攻击机kali
反弹shell需要注意的点:1、先检查语法格式是否正确 2、再检查检查员是否和响应体里的内容一样👀
升级反弹shell
进入bash终端,在bash终端监听目标机,监听成功之后再利用python启动目标机的终端
CTRL+Z:将当前的进程发送到后台
stty raw -echo:改变终端模式,使其进入“原始”模式,并关闭回显。
fg:将之前已经发送到后台的进程带回到前台;注意在输入fg的时候是看不见的
reset:重置和初始化终端
export SHELL=“bash”:设置使用shell为bash
到这一步就已经完成反弹shell升级的交互了
3、漏洞防御
①更新版本,打补丁
②根权限设置为require all denide
四、CVE-2021-42013 漏洞复现👀
1、漏洞原理
Apache HTTP Server 2.4.50版本对CVE-2021-41773的修复可以避免一次url编码导致的路径穿越,
但是由于在请求处理过程中,还会对参数再次进行解码,仍然会导致路径穿越。
2、漏洞复现👀
进入到漏洞环境目录,启动并查看启动状态和端口
%25%32%65%25%32%65/ = %2e%2e/ = ../
3、漏洞防御
升级版本,或者打补丁
Apache 基线检查👀
一、确保OS根目录禁用覆盖
当AllowOverride设置为None时,.htaccess文件不具有访问上下文权限。当此指令设置为All时,任何具有.htaccess文件中允许使用上下文。开启时增加了更改或查看配置的风险。
二、确保默认情况下拒绝访问OS根目录👀
通过禁止访问OS根目录,限制直接访问服务器内部文件的行为 使得运行web的服务器更加安全
三、确保禁用http跟踪方法👀
TRACE方法不需要,并且很容易受到滥用,因此应该将其禁用。
四、确保web根目录的选项受到限制 禁止Apaceh列表显示文件👀
Web根目录或文档根目录级别的Options指令应限于所需的最少选项。
五、配置专门用户账户和组用于运行Apache👀
为服务器应用程序创建一个唯一的,没有特权的用户和组。
六、确保Apache用户具有无效的shell👀
apache帐户不得用作常规登录帐户,因此应为其分配一个无效或nologin Shell,以确保无法用于登录
看到nologin表示已经配置了命令: chsh -s /sbin/nologin apache
七、确定已锁定Apache用户账户👀
Apache运行下的用户帐户不应该具有有效的密码,应该被锁住。
八、授权设置, 严格控制Apache服务主目录的访问权限, 非超级用户不能修改该目录中的内容👀
Apache的主目录对应于 配置文件 httpd.conf 中的 Server Root 控制项 ,该目录属主应为root用 户,其它用户不能修改该目录中的文件。默认设置一般即符合要求。
严格设置配置文件和日志文件的权限,防止未授权访问。
/etc/httpd/conf/httpd.conf 配置文件的默认权限是 644,可根据需要修改权限为600。
/var/log/httpd/*.log 日志文件的默认权限为 644,默认设置即符合要求
九、确保超时设置正确👀
DoS的一种常用技术,常见的是发起与服务器的连接。 通过减少旧连接超时后,服务器可以更快, 更多地释放资源反应灵敏。 通过提高服务器效率,它将对DoS攻击的抵御性更好
十、确保keepAlive已启用👀
允许每个客户端重用TCP连接,减少了系统和网络请求所需的资源。 这种效率提高可以提高服务器 对DoS攻击的抵御性
找到 KeepAlive 将其设置为 KeepAlive On 如没有,请增加该项
十一、确保正确设置KeepAliveTimeout👀
KeepAliveTimeout指令指定Apache等待等待的秒数在关闭保持活动的连接之前的后续请求。减少 Apache HTTP服务器保留未使用资源的秒数分配的资源将增加服务其他请求的资源的可用性。 这个效率 收益可能会提高服务器抵御DoS攻击的能力。
找到 KeepAliveTimeout 将其设置为 KeepAliveTimeout 15 如没有,请增加
十二、确保MaxKeepAliveRequests设置为适当值👀
MaxKeepAliveRequests指令限制每个连接允许的请求数,打开KeepAlive时,如果将其设置为0, 则将允许无限制的请求。 推荐将MaxKeepAliveRequests指令设置为100,以防患DoS攻击
找到 MaxKeepAliveRequests 将其设置为 MaxKeepAliveRequests 100 如没有,请增加
十三、隐藏Apache的版本号及其它敏感信息👀
修改 httpd.conf 配置文件,找到下列两项并将他们改为如下的样式,如果配置文件中不存在下列两 项,那么直接在文件末尾添加下方的内容即可