ctf.bugku-备份是个好习惯

备份是个好习惯 - Bugku CTF

访问页面得到字符串

这串字符串是重复的; d41d8cd98f00b204e9800998ecf8427e

从前端、源码上看,除了这段字符串,没有其他信息;尝试解密,长度32位;各种解密方式试试;

MD5免费在线解密破解_MD5在线加密-SOMD5

解密后是空字符串;没有有用信息;

查看后端:

使用dirsearch 扫描后端服务;

查到一个 index.php.bak 文件  ,代码如下:(注释我自己补上的)

<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

i
<think> 我们被要求分析ctf.bugku的“赛博朋克”题目。但是,我们手头并没有该题目的直接引用内容。然而,根据历史引用,我们有一些关于CTF题目的零散信息。 从引用[1]中我们得知,在pwn2题目中涉及了linux x64的函数调用规则:前6个参数存入寄存器(rdi, rsi, rdx, rcx, r8, r9),其余参数从右往左入栈。 引用[2]中给出了一个PHP代码的题目,要求通过GET和POST传递参数,并且需要满足条件:uname和passwd不同,但它们的sha1值相同,并且id参数为'margin'(但代码中实际判断的是id=='margin',而id是通过GET传递并经过urldecode的)。 引用[3]只是提到了一个POST请求的URL,以及一些PHP的基本知识。 由于没有直接关于“赛博朋克”题目的描述,我们只能根据题目名称和常见的CTF题型进行推测。在CTF中,“赛博朋克”可能涉及二进制漏洞利用(如栈溢出、格式化字符串等)、Web漏洞(如PHP特性利用)、密码学或逆向工程等。 但是,用户特别提到了“审题分析”,因此我们需要从题目给出的信息中找出关键点。 由于我们缺乏该题目的具体内容,这里只能给出一般性的审题步骤和针对常见类型题目的分析思路。 审题分析步骤: 1. 确定题目类型:通过题目名称和描述,以及提供的附件(如果有)判断是Web、Pwn、Reverse、Crypto还是Misc等。 2. 阅读题目描述:题目描述中可能包含关键信息,比如题目场景、目标等。 3. 分析提供的代码或二进制文件:如果题目提供了源代码,仔细阅读代码寻找漏洞;如果是二进制文件,则需要进行逆向分析。 4. 注意题目中的特殊条件:例如引用[2]中的代码,要求同时满足多个条件(参数相等性、哈希相等、特定id值)。 针对可能的“赛博朋克”题目,我们可以假设几种情况: 情况1:Web题目(类似引用[2]) - 题目可能涉及PHP代码审计,寻找漏洞点(如弱类型比较、哈希扩展攻击、变量覆盖等)。 - 例如,引用[2]中的代码就存在一个漏洞:要求两个不同的输入具有相同的sha1值。由于sha1是哈希函数,理论上碰撞困难,但我们可以利用PHP的sha1函数处理数组时的漏洞(返回NULL)来绕过:即传递两个不同的数组,使sha1($_GET['uname'])和sha1($_POST['passwd'])都为NULL,从而满足全等(===)条件。同时,我们还需要传递id参数为'margin'(注意需要url编码)。 情况2:Pwn题目(类似引用[1]) - 可能涉及栈溢出、ROP链构造等。根据x64调用约定,构造payload时需要注意寄存器和栈的布局。 情况3:其他类型 - 如果题目没有提供代码,而是提供了一个服务或二进制文件,则需要通过动态调试和静态分析来解题。 由于没有具体的题目内容,我们无法给出精确的分析。但我们可以根据CTF常见题型,给出一个示例性的审题分析框架。 示例审题分析(以Web题目为例): 假设题目“赛博朋克”是一个Web题目,我们访问后得到类似引用[2]的代码: ```php <?php highlight_file('flag.php'); $_GET['id'] = urldecode($_GET['id']); $flag = 'flag{xxxxxxxxxxxxxxxxxx}'; if (isset($_GET['uname']) and isset($_POST['passwd'])) { if ($_GET['uname'] == $_POST['passwd']) print 'passwd can not be uname.'; else if (sha1($_GET['uname']) === sha1($_POST['passwd']) && ($_GET['id']=='margin')) die('Flag: '.$flag); else print 'sorry!'; } ?> ``` 审题分析: 1. 目标:获取flag,即输出`die('Flag: '.$flag);`。 2. 条件: a. 必须同时通过GET方式传递uname和POST方式传递passwd。 b. uname不能等于passwd(值比较)。 c. uname和passwd的sha1值必须全等(===),并且id(通过GET传递)必须等于'margin'。 3. 难点:如何让两个不同的字符串的sha1值相同?或者利用PHP的特性绕过。 4. 突破口:PHP的sha1函数无法处理数组,如果传入数组,会返回NULL并产生警告。因此,我们可以将uname和passwd都设置为数组,这样它们不相等(满足条件b),而它们的sha1值都是NULL,全等比较通过。同时,我们需要传递id=margin(注意,由于代码中进行了urldecode,如果margin被编码了需要解码,所以我们直接传递margin即可,或者传递编码后的margin,但一般不需要,除非题目有过滤)。 因此,我们可以构造如下请求: - GET请求:`?uname[]=a&id=margin` - POST请求:`passwd[]=b` 这样,条件都满足,即可得到flag。 但是,请注意,这只是一个示例,实际“赛博朋克”题目可能与此不同。 如果用户有具体的题目描述或代码,我们可以更精确地分析。 由于题目信息不足,我们只能给出一般性的审题分析方法。 相关问题: 1.CTF比赛中,如何进行有效的审题? 2. 针对Web题目,常见的PHP漏洞有哪些? 3. 在Pwn题目中,如何利用x64函数调用规则构造ROP链? </think>### CTF.Bugku“赛博朋克”题目审题分析 根据提供的引用信息,对“赛博朋克”题目的分析需结合CTF常见题型和漏洞模式。以下是关键审题点: #### 1. **函数调用规则分析**(基于引用[^1]) - 若题目涉及二进制/Pwn方向: - 需关注x64架构的函数调用约定:前6个参数通过寄存器传递(`rdi`, `rsi`, `rdx`, `rcx`, `r8`, `r9`) - 额外参数按**从右向左**顺序入栈 - 典型的漏洞利用场景:通过栈溢出覆盖返回地址,构造ROP链控制寄存器值 #### 2. **PHP代码审计**(基于引用[^2]和[^3]) 若题目提供类似PHP代码: ```php if (isset($_GET['uname']) && isset($_POST['passwd'])) { if ($_GET['uname'] == $_POST['passwd']) print 'passwd can not be uname.'; else if (sha1($_GET['uname']) === sha1($_POST['passwd']) && ($_GET['id']=='margin')) die('Flag: '.$flag); } ``` 需重点审查: - **弱类型比较**:`==` 可能引发类型转换漏洞(如 `"0e123"=="0e456"`) - **哈希碰撞**:`sha1()` 函数对数组参数返回 `NULL`(可通过传入数组绕过:`?uname[]=a&id=margin` + POST `passwd[]=b`) - **参数注入**:`id` 参数需精确等于 `'margin'`,需检查URL编码绕过可能 #### 3. **赛博朋克题目特征推测** - **混合题型**:可能结合Web漏洞与二进制利用(如通过Web入口获取shellcode执行环境) - **关键突破点**: - 参数传递路径分析(GET/POST/COOKIE) - 非预期输入处理(如数组、超长字符串、特殊字符) - 服务端过滤机制(如 `urldecode()` 的多次调用导致绕过) #### 4. **解题路线建议** ```mermaid graph TD A[获取题目源码/二进制] --> B{判断题型} B -->|Web| C[审计PHP代码] B -->|Pwn| D[分析汇编指令] C --> E[寻找哈希比较漏洞] C --> F[检查参数约束条件] D --> G[构造ROP链控制寄存器] E --> H[使用数组绕过sha1] F --> I[精确满足id='margin'] G --> J[劫持控制流获取shell] ``` #### 5. **常见陷阱** - **哈希严格比较**:`===` 要求值和类型完全一致,但数组输入可使其返回相同的 `NULL` - **寄存器污染**:在Pwn题中,可能需清除寄存器状态后再触发漏洞 - **编码绕过**:`id=margin` 可能需URL编码为 `id=%6d%61%72%67%69%6e`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值