青少年CTFqsnctf的部分WP

CheckMe01

在输入框输入1,获得index.php的源码,进行php代码审计 

问AI

这道题目涉及了一些基本的Web安全知识和PHP代码审计。让我来分步骤解释这个题目的解法:

  1. 页面结构:代码开头通过HTML输出一个表单,要求用户输入一个 "key"。同时,代码会根据用户的输入在后台进行处理。

  2. 表单提交:用户需要在表单中输入一个 "key",然后点击 "Submit" 按钮将数据提交到 index.php 这个页面。

  3. 后端处理:

    • if(!empty($_POST['key'])){}:这个条件语句检查用户是否提交了 "key"。
    • $keys = $_POST['key'];:获取用户提交的 "key" 值。
    • show_source("index.php");:这行代码会输出 index.php 的源代码到页面上,可能是提示玩家审计代码。
    • $keys = base64_decode(urldecode($keys));:对用户输入的 "key" 进行URL解码和Base64解码。
    • if(strlen($keys)==6){}:这个条件语句检查解码后的 "key" 是否长度为6。
  4. 检查 "key":

    • if($keys=="qsnctf"):如果解码后的 "key" 等于 "qsnctf",则进入这个条件。
    • print("<p>You win!</p>");:如果用户输入的 "key" 正确,将输出 "You win!"。
    • include("flag.php");:引入 "flag.php" 文件。
    • print($flag);:输出 flag 值。
  5. 不正确的 "key":

    • 如果解码后的 "key" 长度不为6,将输出 "末心:大漏特漏!此乃九年义务教育漏网之鱼。"

综上所述,要解决这个题目,你需要注意以下几点:

  • 首先,审计代码以了解它的逻辑和漏洞。
  • 代码提示解码过程可能会涉及到URL解码和Base64解码。
  • 在满足长度为6的情况下,如果解码后的 "key" 等于 "qsnctf",就会输出 flag。

因此,你需要在表单中输入经过Base64编码和URL编码的 "qsnctf",并将其解码为长度为6的 "key"。这将会满足条件,触发"win"路径并输出 flag 值。记得在实际比赛中遵循规则和法律,不要进行未经授权的攻击。

所以把qsnctf进行编码

在输入框输入cXNuY3Rm就可以获得flag

CheckMe02

AI说

这段代码看起来非常简单,但也非常危险。这是一个典型的代码注入(Remote File Inclusion)漏洞。恶意用户可以通过操纵 $_GET['url'] 参数来执行任意代码,甚至包括恶意代码,进而对服务器进行攻击。

解决这个题目并不是要利用这个漏洞进行攻击,而是要演示如何修复它,以防止潜在的漏洞利用。通常修复方法包括:

  1. 避免包含用户输入: 不要直接将用户提供的数据(如 $_GET$_POST)用作文件包含的路径。在这个例子中,你可以使用一个固定的、白名单中的文件路径来包含文件,而不是直接使用用户提供的输入。

  2. 验证用户输入: 如果你必须使用用户输入来构造文件路径,那么你需要对用户输入进行验证和过滤,确保只允许特定的文件路径被包含。例如,你可以检查 $_GET['url'] 是否在一个白名单中,只允许特定的文件被包含。

  3. 输入转义或编码: 如果你无法避免使用用户输入,可以对用户输入进行适当的转义或编码,以防止恶意代码的执行。在这个例子中,你可以对 $_GET['url'] 进行URL解码,然后再使用。

  4. 使用安全的替代方案: 在某些情况下,可以考虑使用其他安全性更高的方式来实现你的目标,而不是直接进行文件包含。例如,可以使用文件路径构建函数来确保安全性。

总之,这个题目的解法应该是演示如何修复代码中的漏洞,而不是利用漏洞进行攻击。修复漏洞可以防止未经授权的代码执行,从而提高应用程序的安全性。在现实场景中,避免代码注入漏洞是至关重要的安全实践。

?url=data:text/plain,<?php system('cat /f*');?>

eval 

AI回答

这个题目涉及到了代码注入漏洞,特别是使用 eval() 函数执行用户输入的代码。这是一个非常危险的漏洞,因为攻击者可以通过构造恶意代码来执行任意操作,甚至获取服务器上的敏感信息。

让我来为你解释一下解题思路:

  1. 代码结构: 首先,代码使用 highlight_file(__FILE__); 将自身的源代码输出到页面上,让你可以看到它的结构和逻辑。然后,代码检查是否有 cmd 参数传递给了脚本。

  2. 用户输入执行: 如果有 cmd 参数传递,代码使用 eval($_REQUEST["cmd"]); 来执行用户输入的命令。

解题思路:

题目的目标是在不直接利用 eval() 的情况下,找到一种方法来执行代码,以获取 flag 值。但在实际应用中,避免使用 eval() 是一个更安全的做法。

在这个题目中,你可以通过以下方式来解题:

  1. 使用 echo 来输出代码:通过构造合适的输入,可以让 eval() 执行 echo "Hello, World!";,从而在页面上显示 "Hello, World!"。
http://example.com/index.php?cmd=echo+"Hello,+World%21";

         2. 获取 flag:你可以尝试读取源代码,找到 flag 变量的值。这可以通过 file_get_contents() 函数来实现。

http://example.com/index.php?cmd=echo+file_get_contents("flag");


 

这个错误是由于脚本执行的当前目录可能不是你期望的目录。实际上,这个题目中没有明确指定 flag 的路径,所以系统会尝试从脚本执行的当前目录查找文件。 

解决这个问题的方法取决于 flag文件的位置。

尝试其他相对路径: 如果你不知道 flag 的绝对路径,可以尝试不同的相对路径,以确保能够找到文件。你可以使用 ../ 来尝试向上一级目录查找文件。

用目录穿越的方法获得flag

http://example.com/index.php?cmd=echo+file_get_contents("../../../../flag");

posted @ 2023-08-23 09:56  Fab1an  阅读(64)  评论(0编辑  收藏  举报  来源