传统后端漏洞----(Web Server) 解析漏洞

笔记

  • 前言
  • IIS解析漏洞
    • 文件夹解析漏洞
      • 原理
      • 限制条件
    • ";" 分号截断漏洞
      • 原理
    • IIS解析漏洞检测
      • IIS 文件夹解析漏洞检测
      • IIS 分号截断漏洞检测
    • 防御手段
  • Nginx解析漏洞
    • Nginx 文件类型错误解析漏洞导致任意PHP代码执行
      • 原理
      • Nginx 空字节解析漏洞导致任意文件可解析(CVE-2013-4547)
      • 原理
      • 受该漏洞影响的Nginx版本:
    • Nginx解析漏洞检测
    • Nginx 解析漏洞的防御
  • Apache 解析漏洞
    • 配置错误导致的Apache解析漏洞
      • 该漏洞产生原因
    • Apache HTTPD 换行解析漏洞(CVE-2017-15715)
      • 原理
      • 该漏洞产生原因
    • Apache解析漏洞检测
    • Apache解析漏洞的防御
  • 解析漏洞的防御

前言

  • 这几天各种技术面试接踵而至,压得我喘不过气了!然后面试官问了我这个解析漏洞原理和利用方式以及防御手段,当然同时还问了好几个Top10漏洞!

IIS解析漏洞

文件夹解析漏洞

原理

  • 在IIS 5.x 和6.x下,对于目录名称为“x.asp”中的任何内容,包括“1.jpg”这样的图片资源文件,都会被当作ASP文件解析

限制条件

  • 需要同时存在文件夹解析漏洞和网站允许创建恶意文件夹(管理员权限)两个漏洞利用点,缺少任何一个都无法成功利用。

“;” 分号截断漏洞

原理

  • IIS 6.0 下,会将“1.asp;.jpg”这样的文件当作ASP文件解析。
  • 计算机对文件扩展名的理解上来说,文件扩展名是以最后一个“ . ”的后面内容为依据的,这个文件被网站过滤程序理解成了图片
  • IIS 会认为分号即是结尾,后面的内容被“截断”了,认为这是ASP文件,及时使用了“白名单”过滤,也允许可以进行绕过。

IIS解析漏洞检测

IIS 文件夹解析漏洞检测

  • 通过在网站根目录下创建“a.asp”文件夹,并在其中创建“1.jpg”,文件内容填写ASP代码。然后远程访问 http://target.com/a.asp/1.jpg,验证文件是否能够被当作ASP解析,以判断漏洞存在是否

IIS 分号截断漏洞检测

  • 可以上传“1.asp;.jpg” 文件,然后远程访问http://target.com/1.asp;.jpg,验证文件是否能够被当做ASP解析

防御手段

  • 漏洞源于IIS 服务器本身存在缺陷。可以升级IIS 服务器版本和打补丁

Nginx解析漏洞

Nginx 文件类型错误解析漏洞导致任意PHP代码执行

原理

  • 服务器上任意一个已存在的文件,包括用户上传的图片、附件等,都可以被PHP-FPM解析,导致任意PHP代码执行漏洞(国内知名安全团队80sec提出)
    在这里插入图片描述
  • Nginx会将用户请求的HTTP数据包解析生成CGI环境变量,并通过FastCGI协议发送给PHP-FPM的9000端口;PHP-FPM通过这些CGI环境变量,定于到用户需要执行的PHP文件并执行,将返回结果在通过FastCGI协议的返回包返回给Nginx服务器。

Nginx 空字节解析漏洞导致任意文件可解析(CVE-2013-4547)

原理

  • Nginx在遇到“%00空字节”时,与后端FastCGI处理不一致,导致可以在图片中可以嵌入PHP代码,然后通过访问“xxx.jpg%00.php”来执行其中的代码。

受该漏洞影响的Nginx版本:

  • 0.8.41-1.4.3/1.5.0-1.5.7

Nginx解析漏洞检测

  • Nginx 解析漏洞的表现形式就是任意文件都可以让PHP解释器执行。
    通常,可以在目标站点中找到任意一个已知的静态文件,如“/robots.txt”。利用Burp Suite工具可以看到请求和响应的HTTP协议内容。
  • 正常情况下"/robots.txt"的Content-Type是“text/plain”
  • 如果访问“/robots.txt/.php”,其响应头字段Content-Type将变成PHP默认的“text/html”,并会增加PHP的指纹“X-Powered-By”
  • 通过这个特征,可以判断目标网站是否将静态文件分发给PHP执行。
  • 如果目标网站支持上传文件,攻击者用图片的形式上传一个WebShell命名为shell.jpg,并增加“/.php”访问,就成功实现了GetShell

Nginx 解析漏洞的防御

  • Nginx文件类型错误漏洞是由PATH_INFO变量所导致的,如果业务上并没有用到PATH_INFO功能,可以直接在PHP.INI配置文件中关闭fix_pathionfo。
  • 还可以在PHP-FPM中设置security.limit_extensions来限制PHP-FPM执行的PHP文件的扩展名,将其值设置为“.php”,则其他扩展名的文件不再会被作为PHP运行
  • security.limit_extensions = .php
  • 还可以在Nginx的配置文件中增加如下选项
    fastcgi_split_path_info ^(.+.php)(.*) ; N g i n x 将会按照正则表达式 “ ( . + . p h p ) ( . ∗ ) ; Nginx将会按照正则表达式“^(.+.php)(.*) ;Nginx将会按照正则表达式(.+.php)(.)”对,PATH进行分割,匹配到的第一项作为“ f a s t c g i s c r i p t n a m e ” , 第二项作为“ fastcgi_script_name”,第二项作为“ fastcgiscriptname,第二项作为fastcgi_path_info”
  • 对于Nginx空字节解析漏洞,可以通过升级Nginx版本来得到彻底修复

Apache 解析漏洞

配置错误导致的Apache解析漏洞

  • 通常指多扩展名导致任意代码执行的漏洞。类似Nginx解析漏洞,Apache解析漏洞也是由错误配置导致。也是因为这个原因,这个漏洞并不会在Apache核心代码中修复

  • AddHandler application/x-httpd-php .php

  • AddHandler cgi-script .cgi

  • AddHandler 在用户请求某扩展名的文件时,使用某处理器处理

该漏洞产生原因

  • 如果开发者在用户上传文件的时候用黑名单校验文件扩展名,攻击者可以通过上传包含不在黑名单也不被Apache识别的扩展名的文件名(如“sample.php.xyz”)来绕过校验,最后执行任意PHP代码。

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

原理

代码片段
    <FileMatch  "[^.]+.php$">SetHandler application/x-httpd-php<FileMatch>
  • Apache使用的是Perl兼容的正则表达式库PCRE,其文档详细描述了“$”的语法
 $  assert end of string  (or line ,in multiline mode)
$     能够匹配到的三个内容1、一个字符串的结尾2、一个以换行符作为结尾的字符串的结尾部分3、在多行模式开启的情况下,匹配每一行的结尾
  • 不能仅仅将“KaTeX parse error: Undefined control sequence: \n at position 30: …,如果一个文件名是以“.php\̲n̲"结尾,(\n表示换行),他是…”的。

该漏洞产生原因

  • 如果开发者在用户上传文件的时候,以黑名单的形式校验文件扩展名,可以上传一个以“.php\n”为扩展名的PHP文件,这个扩展名可以绕过黑名单校验,同样也会被Apache作为PHP代码解析

Apache解析漏洞检测

利用条件

  • 1、网站存在文件上传的功能点
  • 2、文件上传以黑名单检测
    测试文件上传漏洞的时候,可以测试如下文件
    sample.php.xyz
    sample.php.jpeg
    sample.php\n
  • 上传并访问,如果能够执行PHP代码,则说明目标网站存在Apache 解析漏洞

Apache解析漏洞的防御

  • 1、白名单扩展名检测,并结合文件上传以后将文件重新命
  • 2、只取文件扩展名,对其进行检查,扩展名满足条件的情况下,使用uniqid()生成新文件名,并执行文件移动操作,最后保留在文件系统中的将是一个完全标准化的文件名,不会再触发Apache文件解析漏洞

解析漏洞的防御

  • 1、在选择Web Server 时,一定要使用最新版或确保安全的较新版本
  • 2、对于已经由业务运行,迁移Web Server存在业务中断风险的情况,需要及时打补丁
  • 3、如果要修改Web Server 的默认解析配置,应当充分了解其带来的安全风险的前提下再进行修改
  • 4、删除不必要的解析扩展名(如PHP3,php4等),避免攻击者通过上传可解析为脚本资源的扩展名来获取WebShell权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2157.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【详细分析】thinkphp反序列化漏洞

文章目录 配置xdebug反序列化漏洞利用链详细分析poc1&#xff08;任意文件删除&#xff09;测试pocpoc2&#xff08;任意命令执行&#xff09;poc3&#xff08;任意命令执行&#xff09; 补充代码基础函数trait关键字应用案例优先级多trait 配置xdebug php.ini [Xdebug] zend…

Spring Boot 中的 WebMvc 是什么,原理,如何使用

Spring Boot 中的 WebMvc 是什么&#xff0c;原理&#xff0c;如何使用 介绍 在 Spring Boot 中&#xff0c;WebMvc 是非常重要的一个模块。它提供了一系列用于处理 Web 请求的组件和工具。在本文中&#xff0c;我们将介绍 Spring Boot 中的 WebMvc 是什么&#xff0c;其原理…

“配置DHCP Snooping实验:保护网络中的DHCP服务和防止欺骗攻击“

"配置DHCP Snooping实验&#xff1a;保护网络中的DHCP服务和防止欺骗攻击" 【实验目的】 部署DHCP服务器。熟悉DHCP Snooping的配置方法。验证拓扑。 【实验拓扑】 实验拓扑如图所示。 设备参数如下表所示。 设备 接口 IP地址 子网掩码 默认网关 R1 F0/0 …

vue element UI在button按钮使用 @keyup.enter不生效

如图所示&#xff0c;没效果。在按钮上绑定keyup事件&#xff0c;加上.native覆盖原有封装的keyup事件 解决办法 created () {document.onkeyup e > {if (e.keyCode 13 && e.target.baseURI.match(/login/)) {// 调用登录 验证方法this.submitForm()}}}成功解决&…

MySQL子查询

&#x1f607;作者介绍&#xff1a;一个有梦想、有理想、有目标的&#xff0c;且渴望能够学有所成的追梦人。 &#x1f386;学习格言&#xff1a;不读书的人,思想就会停止。——狄德罗 ⛪️个人主页&#xff1a;进入博主主页 &#x1f5fc;专栏系列&#xff1a;进入MySQL专栏知…

如何使用upupw搭建服务器,并映射外网访问

作为计算机行业从业人员&#xff0c;相信很多人都接触并使用过phpstudy等类似环境集成包&#xff0c;着对于upupw就比较好理解了。UPUPW绿色服务器平台是Windows下很有特色的一款免费服务器PHP套件&#xff0c;UPUPW PHP套件简化了PHP环境搭建步骤&#xff0c;一个压缩包解压到…

【MOOC 作业】第4章 网络层

不是标答也不是参考答案 仅从个人理解出发去做题 1、(20分) 考虑如图示的网络。 a. 假定网络是一个数据报网络。显示路由器 A 中的转发表&#xff0c;其中所有指向主机 H3 的流量通过接口 3 转发。 目的网络链路接口H33 b. 假定网络是一个数据报网络。你能写出路由器 A 中的…

设计模式篇(Java):单例模式

上一篇&#xff1a;设计模式篇(Java)&#xff1a;前言(UML类图、七大原则) 四、单例模式 所谓类的单例设计模式&#xff0c;就是采取一定的方法保证在整个的软件系统中&#xff0c;对某个类只能存在一个对象实例&#xff0c;并且该类只提供一个取得其对象实例的方法(静态方法)…

【Linux系列P5】gccg++与【动静态库】的美妙邂逅

前言 大家好吖&#xff0c;欢迎来到 YY 滴 Linux系列 &#xff0c;热烈欢迎&#xff01;本章主要内容面向接触过Linux的老铁&#xff0c;主要内容含 欢迎订阅 YY 滴Linux专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 订阅专栏阅读&#xff1a;YY的《…

快速部署K8s仪表板,助力管理轻松搞定!

https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/web-ui-dashboard/ Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中&#xff0c;也可以对容器应用排错&#xff0c;还能管理集群资源。 你可以使…

CaffeineCache+Redis 接入系统做二层缓存思路实现(借鉴 mybatis 二级缓存、自动装配源码)

本文目录 前言本文术语本文项目地址设计思路开发思路DoubleCacheAble 双缓存注解&#xff08;如何设计&#xff1f;&#xff09;动态条件表达式&#xff1f;例如&#xff1a;#a.id?&#xff08;如何解析&#xff1f;&#xff09;缓存切面&#xff08;如何设计&#xff1f;&…

async异步任务_同步任务选项

需要先看完上文&#xff1a;async创建异步任务_御坂美琴1的博客-CSDN博客 让类里面的一个成员函数当作线程的参数。 async里面有三个参数&#xff0c;一个是成员函数的地址&#xff0c;第二个是 类&#xff0c;第三个是传入的参数。 接下来介绍async的同步线程创建。 asy…