apache mod_proxy简要分析

apache 模块编写(c++) 注:路径为:/home/xxx/工具为:apxs框架搭建:1、准备工作:安装apache对应的httpd-devel,主要是为了安装apxs。2、生成一个apache的模块框架:cd /home/xxx/; apache module:apxs -g -n mytest这里的mytest就是apache模块的名字,但是实际生成的so名为:mod_mytest.so3、编译apache模块:使用c++语言编写apache模块,网上有说使用extern"C"的方法(见http://hi.baidu.com/zh 阅读详情
看到mod_proxy的漏洞公告,就下载apache的代码看了看,度过了漫长的听人废话的时间。大致的过程如下:

首先看漏洞公告说的,漏洞出现在ap_proxy_date_canon函数里面,公告这这里, http://secunia.com/advisories/26636/。直接搜索函数名,定位到如下地址:modules/proxy/proxy_util.c的第293行,代码比较长:
代码:

PROXY_DECLARE(const char *)
     ap_proxy_date_canon(apr_pool_t *p, const char *x1)
{
    char *x = apr_pstrdup(p, x1);
    int wk, mday, year, hour, min, sec, mon;
    char *q, month[4], zone[4], week[4];

    q = strchr(x, ',');
    /* check for RFC 850 date */
    if (q != NULL && q - x > 3 && q[1] == ' ') {
    *q = ' / 0 ';
    for (wk = 0; wk < 7; wk++)
        if (strcmp(x, lwday[wk]) == 0)
        break;
    *q = ',';
    if (wk == 7)
        return x;       /* not a valid date */
    if (q[4] != '-' || q[8] != '-' || q[11] != ' ' || q[14] != ':' ||
        q[17] != ':' || strcmp(&q[20], " GMT") != 0)
        return x;
    if (sscanf(q + 2, "%u-%3s-%u %u:%u:%u %3s", &mday, month, &year,
           &hour, &min, &sec, zone) != 7)
        return x;
    if (year < 70)
        year += 2000;
    else
        year += 1900;
    }
    else {
/* check for acstime() date */
    if (x[3] != ' ' || x[7] != ' ' || x[10] != ' ' || x[13] != ':' ||
        x[16] != ':' || x[19] != ' ' || x[24] != ' / 0 ')
        return x;
    if (sscanf(x, "%3s %3s %u %u:%u:%u %u", week, month, &mday, &hour,
           &min, &sec, &year) != 7)
        return x;
    for (wk = 0; wk < 7; wk++)
        if (strcmp(week, apr_day_snames[wk]) == 0)
        break;
    if (wk == 7)
        return x;
    }

/* check date */
    for (mon = 0; mon < 12; mon++)
    if (strcmp(month, apr_month_snames[mon]) == 0)
        break;
    if (mon == 12)
    return x;

    q = apr_palloc(p, 30);
    apr_snprintf(q, 30, "%s, %.2d %s %d %.2d:%.2d:%.2d GMT", apr_day_snames[wk],
       mday, apr_month_snames[mon], year, hour, min, sec);
    return q;
}


粗略的看一遍,没发现啥大的问题。决定先看看apr_pstrdup函数,因为从这上面的代码来看,apr_pstrdup应该是在分配内存。这里有一个小的tips,怎么样搜索到函数的定义。
代码:

grep -r apr_pstrdup * | grep -v "=" | grep -v "return" | grep -v "Binary" | grep -v "(apr_pstrdup" | grep -v ", apr_pstrdup" | grep -v ";"

首先在当前目录和子目录中查找所有包含这个字符串的行,然后去掉有=的,去掉有return的,去掉二进制文件,去掉前面有(的,去掉前面有,空格的,去掉有;的,剩下的就是函数的定义了。这个查找根据不同的代码风格,灵活的去写。

apr_pstrdup函数是在srclib/apr/strings/apr_strings.c中的第69行定义的,代码很简单,就是拷贝了一下字符串,而且注意了长度,没什么还利用的。只是其中又调用了另外一个函数apr_palloc,利用上面同样的办法,定位到srclib/apr/memory/unix/apr_pools.c的594行,这个代码比较复杂,我没有仔细去看就判断它没问题。因为这个是很底层的内存池的函数,调用很频繁,如果有安全问题就不会仅仅是ap_proxy_date_canon出现问题了,而是整个apache都会有问题。

这样看来,想在ap_proxy_date_canon中找个可利用的溢出是不可能的了,唯一可能的地方是apr_palloc(p, 30)这里,但是下面用apr_snprintf做了限制,于是就开始看别的方面。

最终发现函数中有这样的片段:
代码:

char *q, month[4], zone[4], week[4];

    q = strchr(x, ',');
    /* check for RFC 850 date */
    if (q != NULL && q - x > 3 && q[1] == ' ') {
    *q = ' / 0 ';
    for (wk = 0; wk < 7; wk++)
        if (strcmp(x, lwday[wk]) == 0)
        break;
    *q = ',';
    if (wk == 7)
        return x;       /* not a valid date */
    if (q[4] != '-' || q[8] != '-' || q[11] != ' ' || q[14] != ':' ||
        q[17] != ':' || strcmp(&q[20], " GMT") != 0)
        return x;
.................

这里取出了时间之后,通过确定,的位置来判断时间的格式,但是后面没有计算q的长度就直接读取q[8],q[11]等等,类似Last-Modified字段出现Wed, 05 Sep这样的字符串,会导致数组读取越界。这个是从代码推测的,我并没有去测试。

现在看看这个函数是如何调用的,先从如何写apache的mod入手。首先申明结构体module AP_MODULE_DECLARE_DATA,这个结构体的最后一个成员指针,指向了该module的注册函数。在注册函数里面关联需要处理的时间,触发功能函数。mod_proxy结构如下:
代码:

static void ap_proxy_http_register_hook(apr_pool_t *p)
{
    proxy_hook_scheme_handler(proxy_http_handler, NULL, NULL, APR_HOOK_FIRST);
    proxy_hook_canon_handler(proxy_http_canon, NULL, NULL, APR_HOOK_FIRST);
}

module AP_MODULE_DECLARE_DATA proxy_http_module = {
    STANDARD20_MODULE_STUFF,
    NULL,              /* create per-directory config structure */
    NULL,              /* merge per-directory config structures */
    NULL,              /* create per-server config structure */
    NULL,              /* merge per-server config structures */
    NULL,              /* command apr_table_t */
    ap_proxy_http_register_hook/* register hooks */
};

注册了proxy_http_handler函数和proxy_http_canon函数来处理一些请求。最终有问题函数的调用流程如下:
proxy_http_handler---->ap_proxy_http_process_response---->ap_proxy_read_headers---->process_proxy_header---->ap_proxy_date_canon

这样看来,只是在apache作为正向代理或者反向代理,处理real server返回的数据,在解析http头中的"Date", "Expires", "Last-Modified"等三个字段的时候,遇到畸形的时间结构,mod_proxy模块发生数组访问越界。就攻击而言,反向代理无法攻击,除非能控制到real server。如果是正向代理,到是可以自己伪造一个web服务器,然后设置apache为代理去访问伪造的web server,返回畸形的时间头给apache代理尝试攻击。 
2021最新Apache漏洞分析 0x01 漏洞简介 2021年9月16日,Apache官方发布了Apache httpd mod_proxy SSRF漏洞CVE-2021-40438,影响v2.4.48及以下版本。该漏洞影响范围较广,危害较大,利用简单,不得不引起重视。 0x02 漏洞搭建 docker部署详见https://github.com/BabyTeam1024/CVE-2021-40438 开启mod_proxy模块 启用vhost配置文件 /etc/httpd/extra/httpd-vhosts.conf 配置文件内容 阅读详情

相关推荐

Apache mod_proxy生产级反向代理配置实战指南

反向代理是现代Web架构的核心组件,其本质是HTTP请求的智能路由与协议转换中间件。它通过拦截客户端请求、重写URL路径、修正响应头(如Location、Set-Cookie)、透传元信息(X-Forwarded-*)等机制,实现前后端解耦与流量治理。技术价值在于统一入口管理、HTTPS卸载、负载均衡及安全策略收敛。典型应用场景包括Java/Tomcat集群前置路由、多租户子域名分发、新老系统共存迁移、微服务网关轻量化部署等。Apache mod_proxy凭借对HTTP协议状态机的深度支持(如ProxyP

weixin_34184158的博客 529

apr---接口篇

apr : Apache Portable Runtime apr 接口详见:http://apr.apache.org/docs/apr/2.0/group__apr__thread__proc.html#ga1426acc5bdd96385769e7b42bfa6ebbd Library initialization and termination : 1.apr_statu...

幽雨雨幽 3110

Debian 8 Apache反向代理排障指南:模块加载、请求头与连接复用

反向代理是Web架构中实现负载分担、SSL卸载和协议适配的核心技术,其本质是HTTP请求的协议翻译与链路中继。Apache作为经典Web服务器,通过mod_proxy模块提供反向代理能力,但实际部署中需深入理解模块依赖机制、请求头传递规范(如X-Forwarded-For、Host)、以及MPM工作模式对连接复用的影响。在Debian 8这类老旧发行版中,因Apache 2.4.10默认启用mpm_event、mod_proxy_http未自动加载、且对HTTP/1.0请求头处理存在兼容性缺陷,导致常见问题

fanjava 456

apache c语言源码,Apache模块开发/用C语言扩展apache(2:APR编程介绍)

Apache模块开发/用C语言扩展apache(2:APR编程介绍)bylinux_prog可以看到apache代码中使用了大量的以apr_开头的结构或者函数,这些其实是APR.什么是apr我的理解是apache工作小组在编写apache等C程序过程中所积累的一套编程框架,里面提供比较先进的内存管理模式和常用的数据结构,另外根据各种平台作了一些不同的宏定义,让代码做到平台无关性。由于做得不错,...

weixin_33182922的博客 644

文本为空排查指南:从空字符串判断到字符编码的完整解析

在程序开发中,空字符串与空值处理是常见却易误判的问题。许多系统提示“未检测到文本”,往往源于字符编码、不可见字符或业务校验逻辑,并非简单判空。本文从文本进入系统的完整链路入手,分析 null、空字符串、纯空白与零宽字符的区别,结合 OCR 识别、文档解析等高频场景,讲解如何从输入来源、编码解析、文本清洗到内容校验逐层排查。通过统一的清洗入口和结构化检测报告,开发者可以快速定位“看起来为空”的真实原因,避免重复调试。文章包含 Java、Python 示例,覆盖 BOM、Unicode 不可见字符等边界情况,为

weixin_34318326的博客 406

apr-util 1.5.3:跨平台系统接口的开源库详解

apr-util库是Apache Portable Runtime (APR)项目的一个子项目,旨在为使用APR的应用提供额外的功能和便利。APR本身提供了对操作系统核心功能的抽象层,而apr-util则在此基础上提供了一系列实用工具和数据处理功能,包括数据库连接、内存池管理和字符串操作等。apr-util库支持多种数据库,使得开发者可以轻松地为应用程序添加数据库连接功能。支持的数据库类型包括但不限于:MySQL, PostgreSQL, Oracle, SQLite等。

weixin_28931449的博客 858

Apache数组创建、使用的过程分析

1.这里我们以main函数中数组的使用为例: ap_server_pre_read_config = apr_array_make(pcommands, 1, sizeof(char *)); ap_server_post_read_config = apr_array_make(pcommands, 1, sizeof(char *)); ap_sever_config_defines =

u014398664的博客 549

高通 Gen AI 推理扩展 (GENIE)(5):实战指南与Engine API深度解析

本文深入解析高通Gen AI推理扩展(GENIE)的Engine API核心功能与实战应用,涵盖引擎实例化、多引擎动态切换、性能调优及跨平台部署等关键技巧。通过详细代码示例和性能数据,帮助开发者高效利用GENIE进行AI推理,提升应用性能与稳定性。

weixin_29065959的博客 465

Apache mod_proxy SSRF(CVE-2021-40438)的一点分析和延伸

周五晚上开始学习Apache HTTP Server(后文简称为Apache)mod_proxy的SSRF漏洞(CVE-2021-40438),并在星球简单介绍了一下编译、调试Apache...

离别歌 7042

ifix5.8连接ab plc的点-通过rslinx

以ifix连接ab plc的点为例 1.先在rslinx上把plc的点导出为opc server 2.使用opc power tool 作为opc client 去连接 3.保存到项目的PDB文件夹下面,并且以节点名命名。 也可以不以节点名命名,系统自动会生成一个以节点名命名的这种文件,就显得很乱。 同时,项目的PDB目录下面必须还得拷过来一个de...

中国智造2025 4115

别再怕ADRC调参了!手把手教你用MATLAB/Simulink搞定TD、ESO、NLSEF(附完整参数表)

本文详细解析了ADRC(自抗扰控制)的调参方法,通过MATLAB/Simulink实战演示,帮助工程师快速掌握TD、ESO和NLSEF模块的参数整定技巧。文章提供了完整的参数表和调参指南,解决ADRC调参难题,提升控制系统的鲁棒性和性能。

weixin_30252709的博客 178

Apache HTTP Server 2.4.48 mod_proxy SSRF漏洞(CVE-2021-40438)

Apache HTTP Server 2.4.48 mod_proxy SSRF漏洞(CVE-2021-40438)

weixin_44047654的博客 2571

国产服务器系统的PXE无人值守自动化安装部署——以银河麒麟、统信UOS、OpenEuler这三类服务器系统为例

本文详细介绍了三种国产服务器系统(银河麒麟、统信UOS、OpenEuler)的PXE无人值守自动化安装方法。主要内容包括:1)从系统ISO镜像中提取内核文件和根系统文件;2)编写GRUB菜单引导文件;3)配置自动应答文件实现自动化安装;4)重启PXE服务并测试安装过程。文章特别强调了硬盘容量需≥100GB、UEFI模式设置等注意事项,并提供了root密码重置方法。对于x86架构Windows上模拟ARM架构系统安装也给出了具体命令。通过完整的配置流程,可实现国产服务器系统的快速批量部署。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1473

用 Apache Proxy 的指令(mod_proxy)改进 LAMP 安全性

 Apache Software Foundation 的 HTTP 服务器项目(通常称为 Apache)是当今互联网上占据优势的 Web 服务器,它占据了 60% 以上的市场份额。Apache 服务器是日渐流行的 LAMP 软件配置的一部分。LAMP 是一套免费软件程序,是在 Linux®、Apache、MySQL 和 PHP 等开放源码技术之上构建的 Web 平台。在本文中,您将学习一种使用

IBM技术期刊 740

使用MATLAB的COMSOL LiveLink:实时连接和数据传输

COMSOL LiveLink是一种功能强大的MATLAB工具包,它允许用户在MATLAB环境中与COMSOL Multiphysics软件进行实时连接和数据传输。COMSOL LiveLink是一种功能强大的MATLAB工具包,它允许用户在MATLAB环境中与COMSOL Multiphysics软件进行实时连接和数据传输。使用COMSOL LiveLink,你可以进行更复杂的模型设置和数据传输使用MATLAB的COMSOL LiveLink:实时连接和数据传输。

PixelNinja的博客 2098

用 SAP S/4HANA Configure Predefined Custom Fields 玩转预定义自定义字段:从概念到实战

SAP预定义自定义字段配置指南:安全扩展业务模型的云原生方案 摘要: 本文系统介绍SAP S/4HANA Cloud中预定义自定义字段的配置方法,对比普通自定义字段与预定义字段的区别,阐述其技术特点与业务价值。重点解析"Configure Predefined Custom Fields"应用的核心功能,包括字段元数据配置、多语言支持、UI集成等能力,并通过业务伙伴扩展案例演示完整实施流程。文章指出预定义字段方案在云环境下的独特优势:既满足业务扩展需求,又能保证系统可升级性,是SaaS环

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 81

Apache2.2模块mod_proxy和mod_jk比较/区别

mod_proxy和mod_jk比较/区别介绍Apache2.2 本身拥有如mod_proxy这样一系列优秀的模块,它们拥有一部分和mod_jk一样的功能(AJP Protocol),也能整合实现负载均衡。AJP (Apache Jserv Protocol) 当前版本是1.3,是一个持久性的二进制协议。持久性指web server 和application server 直...

weixin_34307464的博客 223

YOLOv11改进策略【卷积层】| ICCV-2023 LSK大核选择模块 包含二次独家创新

LSK module是。

Limiiiing的博客 1388

Apache mod_proxy SSRF CVE-2021-40438

php底层对unix反代请求的解析代码里有一个fix_uds_filname的函数,传入参数r中filename,它来自于proxy_http_cannon函数,在这个函数中它首先获取到组成URL变量,然后将其拼接。第二个则是unix套接字语句,将网站根目录内容反代到unix的/var/run/,www.sock文件通过管道符传输给http://localhost:8080。因此由于fix_uds_filename函数缺陷,通过人为的写入path或者search ,就可以控制反代的后端地址。

m0_55641973的博客 777

小目标检测难题终结:YOLOv11 + 注意力机制,精度直接拉满

如果你在实操中遇到精度提升不明显或速度下降过多的问题,不妨尝试调整注意力模块的类型(如替换为CA)或插入层级,或针对性优化小目标的数据集增强策略。记住,小目标检测的核心是“特征强化与空间定位”,只要结合业务场景灵活调整注意力模块的组合,你也能让YOLOv11在小目标识别任务中脱颖而出。接下来,我们从模块选型到代码落地,一步步带你打造“小目标检测专精版”YOLOv11,真正帮你解决工业场景中(如安防、质检)的小目标识别痛点。在城市安防场景中,改进后的YOLOv11对远处行人、车辆(小目标)的识别准确率提升。

m0_64661770的博客 199

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Apache HTTP Server 从零安装到生产环境配置实战指南

Web服务器是承载网站和网络应用的基础软件,负责处理HTTP请求并返回响应。其工作原理是通过监听网络端口,接收客户端请求,并根据配置的规则将请求映射到服务器上的资源或后端应用。作为互联网基础设施的核心组件,Web服务器的稳定性和性能直接影响在线服务的可用性与用户体验。Apache HTTP Server凭借其成熟稳定、功能全面和模块化架构,在众多企业级应用、内容管理系统(如经典的LAMP栈)和内部管理后台中依然是可靠的选择。本文将从包管理器与源码编译两种安装方式切入,详细解析httpd.conf主配置文件、

weixin_30325971的博客 390

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

最新Apache漏洞分析

2021年9月16日,Apache官方发布了Apache httpd mod_proxy SSRF漏洞CVE-2021-40438,影响v2.4.48及以下版本。该漏洞影响范围较广,危害较大,利用简单,不得不引起重视。该ssrf代理访问漏洞适用于apache的绝大多是版本,相对来说漏洞原理比较简单,隐藏了多年也是很不容易了,至于危害的话,笔者认为危害还是挺大的,可以访问到服务器内部一些不对外开放的http端口及uds文件。

二狗的博客 3397

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Apache2模块化WebSocket服务器:从原理到生产环境部署指南

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960137的博客 274

三种Tomcat集群方式的优缺点分析

三种Tomcat集群方式的优缺点分析 2009-09-01 10:00 kit_lo kit_lo的博客字号:T|T 本文对三种Tomcat集群方式的优缺点进行了分析。三种集群方式分别是:使用DNS轮询,使用Apache R-proxy方式,以及使用Apache mod_jk方式。 AD:WOT2014课程推荐:实战MSA:用开源软件搭建微服务系统 ...

weixin_30273501的博客 152

2024全网最全面及最新且最为详细的网络安全技巧五 之 SSRF 漏洞EXP技巧,典例分析以及 如何修复 (上册)———— 作者:LJS

SSRF漏洞 EXP技巧,典例分析以及 如何修复 魔幻思路同时涉及C,Python,和php代码分析

跟我加入白帽大家庭,共捍亿万互联网用户安全! 1444

Apache配置文件从入门到精通:核心指令、模块化配置与性能调优实战

Web服务器配置是网站部署与运维的基础,其核心在于理解服务器如何解析指令、处理请求并响应客户端。Apache HTTP Server作为历史最悠久、应用最广泛的开源Web服务器之一,其强大功能与高度灵活性正是通过一套声明式的配置文件系统实现的。掌握这套配置系统的原理,不仅能精准控制服务器行为、优化性能与安全,更是从被动运维转向主动架构管理的关键。本文以Apache配置文件为核心,系统解析了从主配置文件(httpd.conf/apache2.conf)、模块化目录(mods-available/enabled

422
上一篇: 重装windows update服务和BITS服务
下一篇: 如何进行https中间人攻击
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值