CVE-2013-4547 文件名逻辑漏洞

搭建环境,访问 8080 端口

漏洞说明:

Nginx: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

影响版本:0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

原理:
此漏洞可导致目录跨越及代码执行, 其主要原因是错误地解析了请求的URI,
错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。
举个例子,比如,Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见的写法下:

location ~ \.php$ {include        fastcgi_params;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;fastcgi_param  DOCUMENT_ROOT /var/www/html;
}

正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。而存在
CVE-2013-4547的情况下,我们请求 1.gif[0x20][0x00].php ,这个URI可以匹配上正则 .php$,
可以进入这个Location块;但进入后,由于fastcgi在查找文件时被\0截断,Nginx却错误地认为
请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。

fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。
所以,我们只需要上传一个空格结尾的文件,即可使PHP解析之。
再举个例子,比如很多网站限制了允许访问后台的IP
location /admin/ { allow 127.0.0.1; deny all;}
我们可以请求如下URI:/test[0x20]/…/admin/index.php,这个URI不会匹配上location后面的/admin/,
也就绕过了其中的IP验证;但最后请求的是 /test[0x20]/…/admin/index.php 文件,也就是/admin/index.php,
成功访问到后台。(这个前提是需要有一个目录叫test:这是Linux系统的特点,如果有一个不存在的目录,
则即使跳转到上一层,也会爆文件不存在的错误,Windows下没有这个限制)

当我们通过例如下列方式进行 URL 访问限制的时候,如果攻击者使用一些没经过转义的空格字符(无效的 HTTP 协议,但从 Nginx 0.8.41 开始因为考虑兼容性的问题予以支持)那么这个限制可能无效:

location /protected/ {deny all;}

当请求的是 “/foo /…/protected/file” 这样的 URL (静态文件,但 foo 后面有一个空格结尾) 或者是如下的配置:

location ~ \.php$ {fastcgi_pass ...}

当我们请求 “/file \0.php” 时就会绕过限制。

漏洞复现:

上传一个php文件:由于环境对php文件有黑名单过滤
会显示文件类型不支持
在这里插入图片描述
利用CVE-2013-4547 ,上传一个jpg,注意后缀名带空格

在这里插入图片描述上传成功,接下来构造00截断来构造Nginx解析漏洞,将shell.jpg 解析成php文件,

访问

http://【IP】:8080/uploadfiles/shell.jpg .php

结果是访问不到
在这里插入图片描述
原因在于将空格编码成了 %20 ,服务器没有shell.jpg%20 这个文件

在这里插入图片描述
在16进制下将第二个空格改为00,即 “空格” -> “\0”

在这里插入图片描述
就会执行 命令

防护:

该问题已经在 Nginx 1.5.7 和 1.4.4 版本中修复。

补丁程序在:
http://nginx.org/download/patch.2013.space.txt

--- src/http/ngx_http_parse.c
+++ src/http/ngx_http_parse.c
@@ -617,6 +617,7 @@ ngx_http_parse_request_line(ngx_http_reqdefault:r->space_in_uri = 1;state = sw_check_uri;
+                p--;break;}break;
@@ -670,6 +671,7 @@ ngx_http_parse_request_line(ngx_http_reqdefault:r->space_in_uri = 1;state = sw_uri;
+                p--;break;}break;

配置上临时的解决办法是:

if ($request_uri ~ " ") {return 444;}

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

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

相关文章

CMake指令入门 ——以构建OpenCV项目为例

CMake指令入门 ——以构建OpenCV项目为例 转自:https://blog.csdn.net/sandalphon4869/article/details/100589747 一、安装 sudo apt-get install cmake安装好后,输入 cmake -version如果出现了cmake的版本显示,那么说明安装成功 二、c…

CVE-2017-7529Nginx越界读取缓存漏洞POC

漏洞影响 低危,造成信息泄露,暴露真实ip等 实验内容 漏洞原理 通过查看patch确定问题是由于对http header中range域处理不当造成,焦点在ngx_http_range_parse 函数中的循环: HTTP头部range域的内容大约为Range: bytes4096-81…

Linux命令行性能监控工具大全

Linux命令行性能监控工具大全 作者:Arnold Lu 原文:https://www.cnblogs.com/arnoldlu/p/9462221.html 关键词:top、perf、sar、ksar、mpstat、uptime、vmstat、pidstat、time、cpustat、munin、htop、glances、atop、nmon、pcp-gui、collect…

Weblogic12c T3 协议安全漏洞分析【CVE-2020-14645 CVE-2020-2883 CVE-2020-14645】

给个关注?宝儿! 给个关注?宝儿! 给个关注?宝儿! 关注公众号:b1gpig信息安全,文章推送不错过 ## 前言 WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAV…

Getshell总结

按方式分类: 0x01注入getshell: 0x02 上传 getwebshell 0x03 RCE getshell 0x04 包含getwebshell 0x05 漏洞组合拳getshell 0x06 系统层getcmdshell 0x07 钓鱼 getcmdshell 0x08 cms后台getshell 0x09 红队shell竞争分析 0x01注入getshell:…

编写可靠bash脚本的一些技巧

编写可靠bash脚本的一些技巧 原作者:腾讯技术工程 原文链接:https://zhuanlan.zhihu.com/p/123989641 写过很多 bash 脚本的人都知道,bash 的坑不是一般的多。 其实 bash 本身并不是一个很严谨的语言,但是很多时候也不得不用。以下…

python 到 poc

0x01 特殊函数 0x02 模块 0x03 小工具开发记录 特殊函数 # -*- coding:utf-8 -*- #内容见POC.demo; POC.demo2 ;def add(x,y):axyprint(a)add(3,5) print(------------引入lambad版本:) add lambda x,y : xy print(add(3,5)) #lambda函数,在lambda函数后面直接…

protobuf版本常见问题

protobuf版本常见问题 许多软件都依赖 google 的 protobuf,我们很有可能在安装多个软件时重复安装了多个版本的 protobuf,它们之间很可能出现冲突并导致在后续的工作中出现版本不匹配之类的错误。本文将讨论笔者在使用 protobuf 中遇到的一些问题&#…

CMake常用命令整理

CMake常用命令整理 转自:https://zhuanlan.zhihu.com/p/315768216 CMake 是什么我就不用再多说什么了,相信大家都有接触才会看一篇文章。对于不太熟悉的开发人员可以把这篇文章当个查找手册。 1.CMake语法 1.1 指定cmake的最小版本 cmake_minimum_r…

CVE-2021-41773 CVE-2021-42013 Apache HTTPd最新RCE漏洞复现 目录穿越漏洞

给个关注?宝儿! 给个关注?宝儿! 给个关注?宝儿! CVE-2021-41773漏洞描述: Apache HTTPd是Apache基金会开源的一款流行的HTTP服务器。2021年10月8日Apache HTTPd官方发布安全更新,披…

SSRF,以weblogic为案例

给个关注?宝儿! 给个关注?宝儿! 给个关注?宝儿! 复习一下ssrf的原理及危害,并且以weblog的ssrf漏洞为案例 漏洞原理 SSRF(Server-side Request Forge, 服务端请求伪造) 通常用于控制web进而…

C++11 右值引用、移动语义、完美转发、万能引用

C11 右值引用、移动语义、完美转发、引用折叠、万能引用 转自:http://c.biancheng.net/ C中的左值和右值 右值引用可以从字面意思上理解,指的是以引用传递(而非值传递)的方式使用 C 右值。关于 C 引用,已经在《C引用…

C++11 std::function, std::bind, std::ref, std::cref

C11 std::function, std::bind, std::ref, std::cref 转自&#xff1a;http://www.jellythink.com/ std::function 看看这段代码 先来看看下面这两行代码&#xff1a; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::function<void(Ev…

Java安全(一) : java类 | 反射

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.java基础 Java平台共分为三个主要版本Java SE&#xff08;Java Platform, Standard Edition&#xff0c;Java平台标准版&#xff09;、Java EE&#xff0…

LeetCode-287 寻找重复数 二分法

LeetCode-287 寻找重复数 二分法 287. 寻找重复数 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 1 到 n 之间&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;找出 这个重复的数 。…

对某公司一次弱口令到存储型xss挖掘

转自我的奇安信攻防社区文章:https://forum.butian.net/share/885 免责声明: 渗透过程为授权测试,所有漏洞均以提交相关平台,博客目的只为分享挖掘思路和知识传播** 涉及知识: xss注入及xss注入绕过 挖掘过程: 某次针对某目标信息搜集无意发现某工程公司的项目招标平台 …

C++11新特性选讲 语言部分 侯捷

C11新特性选讲 语言部分 侯捷 本课程分为两个部分&#xff1a;语言的部分和标准库的部分。只谈新特性&#xff0c;并且是选讲。 本文为语言部分笔记。 语言 Variadic Templatesmove semanticsautoRange-based for loopInitializer listLambdas… 标准库 type_traitsunodered…

java安全(二):JDBC|sql注入|预编译

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1 JDBC基础 JDBC(Java Database Connectivity)是Java提供对数据库进行连接、操作的标准API。Java自身并不会去实现对数据库的连接、查询、更新等操作而是通…

java安全(三)RMI

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.RMI 是什么 RMI(Remote Method Invocation)即Java远程方法调用&#xff0c;RMI用于构建分布式应用程序&#xff0c;RMI实现了Java程序之间跨JVM的远程通信…

LeetCode-726 原子的数量 递归

LeetCode-726 原子的数量 递归 题目链接&#xff1a;LeetCode-726 原子的数量 给你一个字符串化学式 formula &#xff0c;返回 每种原子的数量 。 原子总是以一个大写字母开始&#xff0c;接着跟随 0 个或任意个小写字母&#xff0c;表示原子的名字。 如果数量大于 1&#xf…