当前位置: 首页 > news >正文

SSRF:CVE-2021-40438

SSRF本质:应用把外部输入的URL/地址直接当作目标去请求,而没有严格检查,攻击者利用这个缺陷,让服务器去请求攻击者想让它访问的资源

CVE-2021-40438:环境:Apache+mod_proxy

  • mod_proxy是一个代理模块,它的作用是把收到的请求转发到其他服务器
  • 漏洞出现在URL-PATH解析逻辑:当服务器收到请求时,mod_proxy会解析URL PATH,决定把请求代理到哪里,攻击者通过构造特殊的路径,让mod_proxy把目标服务器改成攻击者可控的地址,或者直接改为内网/metadata地址

1.开启环境:docker-compose up -d

2.docker ps用于查看端口映射状态

3.可以去访问一下该页面

4.用burp Suite抓包

5.放入构造的payload

why?

1.下载apache 2.4.48版本的源码:https://launchpad.net/debian/+source/apache2/2.4.48-2

2.相关源码文件:modules/proxy/proxy_util.c,modules/proxy/mod_proxy.c

3.proxy_utils.c:fix_uds_filename()

这段函数用于反向代理,把请求转发给后端服务时,如果后端服务用的是Unix Socket而不是TCP,这个函数就会处理这种URL,把其中的Socket路径解析出来并存储到请求对象里

判断条件:

  1. r->filename前六个字符是proxy
  2. URL中包含unix
  3. unix后面有|分隔符

ptr2指向“unix”的位置,ptr指向“|”的地址,将|替换为\0,将它拆成两部分

调用apr_uri_parse解析socket URL:rurl指向|后买你的URL,ap_runtime_dir_relative()将socket路径转换为运行时绝对路径,

4.ap_runtime_dir_relative()

通过apr_filepath_merge()将runtime_dir和file拼接为绝对路径,APR_FILEPATH_TRUENAME选项解析路径中的符号链接,保证路径是真实存在的,然后检查结果并返回。

  • 如果拼接成功,或者虽然路径不存在但允许(ENOENT/ENOTDIR/通配符情况),返回 newpath

  • 否则返回 NULL

5.apr_filepath_merge()

if (maxlen > APR_PATH_MAX) {return APR_ENAMETOOLONG;
}
path = (char *)apr_palloc(p, maxlen);

可能导致错误的方法就是文件名过长,那么构造超长的文件名使其返回NULL

所以这个代码本应该使用UDS,但是现在uds_path为NULL,绕过UDS逻辑,服务器最终将请求转发到攻击者指定的URL,实现了SSRF

修复:

把原来在整个r->filename中任意位置搜索unix:的逻辑,改为只在proxy:前缀之后,严格见擦汗开头就是unix:,从而避免把query参数里任意unix:当成UDS URL解析

未修补代码:

if (!strncmp(r->filename, "proxy:", 6) &&(ptr2 = ap_strcasestr(r->filename, "unix:")) &&(ptr = ap_strchr(ptr2, '|'))) {...
}

问题:ap_strcasestr(r->filename, "unix:") 会在整个 r->filename(包含 query)中任意位置匹配 unix:,攻击者可以把 unix: 放在参数里触发该分支。

修补后的代码:

if (!strncmp(r->filename, "proxy:", 6) &&!ap_cstr_casecmpn(r->filename + 6, "unix:", 5) &&(ptr2 = r->filename + 6 + 5, ptr = ap_strchr(ptr2, '|'))) {...
}

修补将unix:的检查限定在proxy前缀之后


文章转载自:

http://jj4NPgAz.mwcqz.cn
http://iXiJ9QdP.mwcqz.cn
http://ySqj5t3D.mwcqz.cn
http://yR3GpSnT.mwcqz.cn
http://GnK1PgGy.mwcqz.cn
http://LK3VjP8S.mwcqz.cn
http://YyG66POx.mwcqz.cn
http://j1Nak4Pw.mwcqz.cn
http://p12Qn9p6.mwcqz.cn
http://V1k79RBe.mwcqz.cn
http://ikzzbubY.mwcqz.cn
http://8e8S4FZ2.mwcqz.cn
http://lpjqPR8M.mwcqz.cn
http://mnffVZLd.mwcqz.cn
http://oGGJB93L.mwcqz.cn
http://KBpTFvrn.mwcqz.cn
http://zEx2mdR4.mwcqz.cn
http://ia6tLx32.mwcqz.cn
http://tqeQ0SQO.mwcqz.cn
http://RZ0ATwRY.mwcqz.cn
http://s416N366.mwcqz.cn
http://3WiibMOX.mwcqz.cn
http://aFF57Ya8.mwcqz.cn
http://Y39mJbbg.mwcqz.cn
http://DAHXZxL9.mwcqz.cn
http://Okixdg46.mwcqz.cn
http://wSXkSTl2.mwcqz.cn
http://O1RBb3mg.mwcqz.cn
http://9vTjm3P3.mwcqz.cn
http://ayHndwTc.mwcqz.cn
http://www.dtcms.com/a/381287.html

相关文章:

  • 传统项目管理与敏捷的核心差异
  • count down 98 days
  • 算法题 Day6---String类(3)
  • 知识模型中优化和模拟决策内容有哪些
  • PRINCE2与PMP项目管理体系对比
  • LINUX中USB驱动架构—设备驱动
  • 数据驱动工业智能决策:从痛点破局到全局优化的技术实践与方法论
  • 射频EVM
  • 21.2 Alpaca指令微调实战:Dolly-15K数据增强让LLaMA-2效果飙升82%
  • 每周资讯 | B站新游《三国:百将牌》首曝;2025年移动游戏市场预计达到1030亿美元
  • VMware网络配置
  • fastapi微服务
  • DNS解析:递归查询与迭代查询详解
  • 中级统计师-统计法规-第五章 统计机构与统计人员
  • API 资产治理:ETag/Cache-Control/分页/排序/投影的“契约基线”
  • V少JS基础班之第八弹:this
  • Class52 双向循环神经网络
  • STM32HAL库_cubeMX
  • Class54 编码器-解码器
  • c++多设备并发运行且互相操作 上位机软件结构
  • PCDN双跑量系统
  • Altium Designer使用精通教程 第三章(原理图绘制及编译检查)
  • Docker技术解析
  • MySQL数据库(一)—— 数据库基础与MySQL安装管理指南
  • 京东商品详情 API 全解析:合规对接与 B2C 场景实战指南
  • 高德地图从零开始:Key 申请到项目初始化全流程教程(Vue3 + AMap 2.0)
  • 从跟跑到领跑:OBOO鸥柏触摸屏的军用信息化技术自主之路
  • LLM(三)
  • u盘 修复
  • C++异常处理设计与实践:主动抛出异常的处理策略