[极客大挑战 2019]Havefun题解,思路及补充知识点

题目:

查看网页源代码:(ctrl+U或F12)

发现最后出现一段被注释的php代码:

代码拆解解析

1. 核心参数接收:$cat = $_GET['cat'];

  • $_GET:PHP 内置的「超全局数组」,专门用来接收通过 URL 传参 提交的数据(传参格式是 URL?参数名=参数值,比如 xxx.php?cat=dog)。
  • ['cat']:数组的「键名」,对应 URL 中参数的名称(这里就是 cat 参数),意思是 “从 URL 传参里取出名为 cat 的值”。
  • $cat:自定义的 PHP 变量,用来存储从 URL 中获取到的 cat 参数值(变量名前必须加 $,这是 PHP 语法要求)。
  • 整体作用:把 URL 中 cat 参数的值,赋值给变量 $cat,方便后续使用。

2. 输出参数值:echo $cat;

  • echo:PHP 中最常用的「输出语句」,作用是把后面的内容(字符串、变量等)输出到页面(最终会变成 HTML 响应的一部分)。
  • $cat:就是上面接收的参数变量,这里直接输出它的值。

3. 条件判断:if($cat == 'dog'){ ... }

  • if(...):PHP 的「条件判断语句」,括号里是 “判断条件”,如果条件成立(结果为 true),就执行大括号 {} 里的代码;如果不成立(结果为 false),就跳过大括号里的代码。
  • $cat == 'dog':判断条件(== 是「等于比较运算符」,用来判断左右两边的值是否相等):
    • 左边:变量 $cat 的值(URL 传过来的参数);
    • 右边:字符串 'dog'(固定值,用单引号包裹表示字符串类型);
    • 整体意思:“判断 URL 传过来的 cat 参数值,是否等于字符串 dog”。
  • 大括号 { echo 'Syc{cat_cat_cat_cat}'; }:条件成立时执行的代码:
    • 还是 echo 输出语句,输出固定字符串 'Syc{cat_cat_cat_cat}'

因此,我们只需要在网页的url后面添加/?cat=dog来触发这段php代码

得到flag.

这段php代码明明被注释掉了,为什么 还能触发呢?

很多人以为 <!-- --> 会屏蔽 PHP 代码,但实际是:

  • PHP 是服务器端脚本:服务器处理 .php 文件时,会先扫描所有 <?php ?> 标签,优先执行里面的代码,完全忽略外面的 HTML 注释(<!-- --> 是给浏览器看的,服务器根本不识别)。
  • HTML 注释的作用:只是让 PHP 的执行结果被浏览器隐藏(不显示在页面上),但 PHP 代码本身已经在服务器端执行完了!

补充知识点:

1.Payload(有效载荷)

定义:在网络安全、编程或数据传输场景中,指传输数据中 “有实际意义的部分”(即除去协议头、校验等辅助信息后,真正要传递或执行的内容)

sql注入中的注入语句就是pyload.

2.URL(统一资源定位符)

定义:是互联网上定位资源的 “地址”,用于明确告诉浏览器或客户端 “去哪里获取资源”

结构(以https://www.example.com/index.php?cat=dog为例)

https协议(传输数据的规则,常见还有httpftp等);

www.example.com域名(资源所在的服务器地址);

index.php资源路径(要访问的文件)

?cat=dog查询参数(向资源传递的额外信息,如前面 PHP 代码中$_GET接收的参数)。

3.PHP(超文本预处理器)

定义:是一门服务器端脚本语言,专门用于开发动态网页(在服务器上执行,把结果生成 HTML 返回给浏览器)。

PHP 基于 C 语言开发:PHP 的底层内核是用C 语言编写的,这让 PHP 具备了高性能和接近底层的执行能力。

更多CTF与实战攻防工具参见:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值