php特性靶场

php特性靶场

1.web89

首先打开页面查看php源码,分析源码可知:

在这里插入图片描述

  • include(“flag.php”);:意思是该网站包含了名为flag.php的文件
  • highlight_file(FILE);:用于在浏览器中显示当前文件的源代码
  • if (isset($_GET[‘num’])) {…}:这是一个条件语句,检查是否存在名为 “num” 的 GET 参数,如果存在,则继续执行下面的代码
  • $num = $_GET[‘num’];:将 GET 参数num的值赋给变量 $num
  • if (preg_match(“/[0-9]/”, $num)) {…}:这个语句用来检查变量 $num 是否包含0-9中的数字,如果包含数字,则终止程序并输出no no no!
  • if (intval($num)) {…}:如果 $num 能够被转换为整数(通过 intval 函数),则继续执行下面的代码
  • echo $flag;:输出flag

2.web90

首先打开页面查看php源码,分析源码可知:
在这里插入图片描述

  • 前两行与第一题一致便不再赘述
  • if (isset($_GET[‘num’])) {…}:这是一个条件语句,检查是否存在名为 “num” 的 GET 参数,如果存在,则继续执行下面的代码
  • num = $_GET[‘num’];:将 GET 参数num的值赋给变量 $num
  • if ($num === “4476”) {…}:检查变量 $num 是否等于字符串 4476。如果相等则终止程序并输出no no no!
  • if (intval($num, 0) === 4476) {…}:这个条件检查使用 intval 函数将 $num 转换为整数,并与整数值 4476 进行比较。如果相等,则输出flag
  • else {…}:如果上述条件不满足,即用户提供的 num 不等于4476且转换为整数后也不等于 4476,那么程序输出 $num 的整数值

3.web91

首先打开页面查看php源码,分析源码可知:

在这里插入图片描述

  • a = a= a=GET[‘cmd’];:从 $GET 数组中获取名为 “cmd” 的参数,赋值给变量 $a
  • if(preg_match(‘/^php$/im’, $a)){…}:这个条件检查变量 $a 是否匹配以 “php” 开头和结尾的字符串,如果匹配,进入下一级的条件判断
  • if(preg_match(‘/^php$/i’, $a)){…}:在这个条件中,代码检查变量 $a 是否完全匹配字符串 “php”,如果匹配,输出hacker
  • else{…}:如果上述两个条件都不满足,即变量 $a 以 “php” 开头和结尾但不是完全匹配 “php”,则输出 flag
  • else{…}:如果最初的正则表达式匹配失败,即变量 $a 不以 “php” 开头和结尾,则输出 nonononono

4.web92

首先打开页面查看php源码,分析源码可知:
在这里插入图片描述

这道题乍一看与90大差不差,区别主要在于if($num==4476){ … }: 这个条件语句,检查变量 $num 是否等于整数值 4476。如果相等则终止程序并输出 no no no!,所以加字母传入不能使用了,但php有个特殊的字母:e,可以表示科学计数法,但是当intval()读取到e的时候就会停止,所以可以在末尾加e进行传参最终得到flag

5.web93

首先打开页面查看php源码,分析源码可知:
在这里插入图片描述

这道题也与上一题大体上类似,区别在于新加了if(preg_match(“/[a-z]/i”, $num)){
die(“no no no!”);}来检查 $num 是否包含任何字母,如果存在字母则终止程序并输出 no no no!,所以我们使用八进制的方法得到flag

6.web94

首先打开页面查看php源码,分析源码可知:
在这里插入图片描述

这道题比起上一题多了if(!strpos($num, “0”)){ die(“no no no!”); }来检查是否包含数字0,如果存在字母则终止程序并输出 no no no!,所以我们使用小数点在通过intval转换来绕过

7.web95

首先打开页面查看php源码,分析源码可知:
在这里插入图片描述

这道题在if(preg_match(“/[a-z]|./i”, $num)){
die(“no no no!!”);}语句中也禁用了.,但我们只需要让八进制前面没有0即可绕过得到flag

8.web96

首先打开页面查看php源码,分析源码可知:
在这里插入图片描述

  • if(isset($_GET[‘u’])){:检查GET请求中是否存在u参数
  • if($_GET[‘u’]==‘flag.php’){die(“no no no”); }:如果u存在,检查它的值是否为flag.php,如果’u’的值是flag.php,脚本终止并输出消息 no no no
  • else{:如果’u’的值不是flag.php,则继续执行
  • highlight_file($_GET[‘u’]);:输出flag

所以我们使用./修饰得到flag

9.web97

首先打开页面查看php源码,分析源码可知:
在这里插入图片描述

  • if (isset( P O S T [ ′ a ′ ] ) a n d i s s e t ( _POST['a']) and isset( POST[a])andisset(_POST[‘b’])) {:检查是否设置了名为 a 和 b 的POST参数
  • if ($_POST[‘a’] != $_POST[‘b’]) {:如果 a 和 b 的值不相等
  • if (md5( P O S T [ ′ a ′ ] ) = = = m d 5 ( _POST['a']) === md5( POST[a])===md5(_POST[‘b’])) {:如果 a 的MD5哈希值等于 b 的MD5哈希值
  • echo $flag;:如果条件满足,输出flag
  • else { print ‘Wrong.’; }:如果 a 和 b 的值不相等,且它们的MD5哈希值也不相等,输出 Wrong

这是使用了MD5的加密方法,我们可以通过数组绕过

10.web98

首先打开页面查看php源码,分析源码可知:
在这里插入图片描述

  • $GET ? KaTeX parse error: Expected 'EOF', got '&' at position 7: GET = &̲POST : ‘flag’;:这行代码似乎是在检查是否有 GET 请求,并将 $GET 设置为引用 $POST。如果没有 GET 请求,它会将字符串 flag 分配给 $GET
  • $GET[‘flag’] == ‘flag’ ? KaTeX parse error: Expected 'EOF', got '&' at position 7: GET = &̲_COOKIE : ‘flag’;:这行代码尝试检查 $GET 数组中的 flag 是否等于 flag,如果是,则将 $GET 设置为 $COOKIE。否则,它会将字符串 flag 分配给 $GET
  • $GET[‘flag’] == ‘flag’ ? KaTeX parse error: Expected 'EOF', got '&' at position 7: GET = &̲_SERVER : ‘flag’;:与前一行类似,但是这一行尝试将 $GET 设置为引用 $SERVER
  • highlight_file($_GET[‘HTTP_FLAG’] == ‘flag’ ? $flag : FILE);:输出flag

这是三元运算符配合引用传递,get随便传一个然后post一个传的那个参数=alag即可得到flag

11.web99

首先打开页面查看php源码,分析源码可知:
在这里插入图片描述

  • for ($i = 36; $i < 0x36d; KaTeX parse error: Expected '}', got 'EOF' at end of input: …) { array_push(allow, rand(1, $i)); }:在循环中,从 36 开始到 0x36d(十进制为 877),向数组 $allow 中添加了随机数
  • if (isset(KaTeX parse error: Expected 'EOF', got '&' at position 12: _GET['n']) &̲& in_array(_GET[‘n’], $allow)) {:检查是否存在 GET 参数 n,并且该参数的值在 $allow 数组中
  • file_put_contents($_GET[‘n’], $_POST[‘content’]);:如果条件满足,将使用 POST 请求中的 content 数据写入到以 n 命名的文件中

12.web100

首先打开页面查看php源码,分析源码可知:
在这里插入图片描述

  • $ctfshow = new ctfshow();
    $v1 = $GET[‘v1’];
    $v2 = $GET[‘v2’];
    $v3 = $_GET[‘v3’];:创建了一个名为 $ctfshow 的对象,该对象是类 ctfshow 的实例。然后通过 $_GET 获取了三个变量 v 1 、 v1、 v1v2 和 $v3
  • v 0 = i s n u m e r i c ( v0 = is_numeric( v0=isnumeric(v1) and is_numeric( v 2 ) a n d i s n u m e r i c ( v2) and is_numeric( v2)andisnumeric(v3);:这行代码尝试检查 v 1 、 v1、 v1v2 和 $v3 是否都是数字。由于 PHP 中逻辑运算符的优先级,它实际上只检查了 $v1 是否为数字
  • if ($v0) {:如果 $v0 为真,即 $v1 是数字,则继续
  • if (!preg_match(“/;/”, $v2)) {:检查 $v2 是否不包含分号 “;”
  • if (preg_match(“/;/”, $v3)) {:检查 $v3 是否包含分号 “;”
  • 如果 $v2 不包含分号且 v 3 包含分号,就执行 e v a l ( " v3 包含分号,就执行 eval(" v3包含分号,就执行eval("v2(‘ctfshow’)$v3");

“;”

  • if (preg_match(“/;/”, $v3)) {:检查 $v3 是否包含分号 “;”
  • 如果 $v2 不包含分号且 v 3 包含分号,就执行 e v a l ( " v3 包含分号,就执行 eval(" v3包含分号,就执行eval("v2(‘ctfshow’)$v3");

本题对v1v2v3都做了限定,可以使用使用反射类new ReflectionClass(“类名”),获得这个类的信息得到flag

  • 31
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
靶场,是指为信息安全人员提供实战演练、渗透测试和攻防对抗等训练环境的虚拟或实体场地。在不同的领域中,靶场扮演着重要的角色,尤其是在网络安全领域,靶场成为培养和提高安全专业人员技能的重要平台。 首先,靶场为安全从业者提供了一个模拟真实网络环境的平台。通过构建类似实际网络的拓扑结构、部署各种安全设备和应用,靶场可以模拟出多样化的网络攻防场景。这使得安全人员能够在安全的环境中进行实际操作,全面提升其实战能力。 其次,靶场是渗透测试和漏洞攻防演练的理想场所。在靶场中,安全专业人员可以模拟攻击者的行为,发现系统和应用的漏洞,并进行渗透测试,从而及时修复和改进防御机制。同时,这也为防御方提供了锻炼机会,通过对抗攻击提高防御能力。 靶场的搭建还促进了团队协作与沟通。在攻防对抗中,往往需要多人协同作战,团队成员之间需要密切配合,共同制定攻击和防御策略。这有助于培养团队合作意识,提高协同作战的效率。 此外,靶场为学习者提供了一个安全的学习环境。在靶场中,学生可以通过实际操作掌握安全知识,了解攻击技术和防御策略。这样的学习方式比传统的理论课程更加生动直观,有助于深化对安全领域的理解。 最后,靶场也是安全社区交流的平台。在靶场中,安全从业者可以分享攻防经验,交流最新的安全威胁情报,共同探讨解决方案。这有助于建立更广泛的安全社区,推动整个行业的发展。 总体而言,靶场在信息安全领域具有重要地位,为安全专业人员提供了实战演练的机会,促进了团队协作与沟通,为学习者提供了安全的学习环境,同时也是安全社区交流的重要平台。通过靶场的实践操作,安全从业者能够更好地应对不断演变的网络威胁,提高整体的安全水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值