php特性靶场解题

文章详细分析了一系列Web编程挑战题目,涉及源码解析、参数检查、数字转换和字符串操作,以及如何通过输入特定数据绕过安全检查获取flag。
摘要由CSDN通过智能技术生成

web89

分析源码

首先,代码中包含flag.php文件,文件中应该有我们需要得到的flag

其次,通过highlight_file高亮显示文件

然后,检查是否存在名为num的get参数,若存在,则将至赋予变量$num

然后,检查$num中是否只包含了数字,若是,则输出no no no!并停止代码继续运行

然后,将$num转换为整数,若成功转换,则输出flag

通过分析源码,发现只要输入一个不带整数且能转换为整数的值即可

传入一个数组,即可得到flag

web90

分析源码

与上一题不同的是,本题检查$num中是否为4476,若是,则输出no no no!同时停止代码运行

然后将$num转换为整数,如果转换后的整数为4476,则输出flag;如果$num转换后不等于4476,则输出转换后的值

通过分析发现,输入一个不是4476的字符串,但是可以转换为4476的字符串即可

eg:传入4476abc

web91

分析源码

这段代码先将得到的cmd的值赋给了变量a

然后通过正则表达式检查$a中是否只包含了字符串‘php’,若是则执行后续代码

然后又通过一个正则表达式再次检查$a中是否只包含了字符串‘php’,若是则输出hacker

若为假,则输出flag

若外部条件为假,则输出no no no

ps:^php$ 这个正则表达式表示匹配仅包含字符‘php’的字符串

        ^表示字符串的开始,php表示需要匹配度字符序列,$表示字符串的结束

        i 表示匹配时不分大小写

        m表示多行,使得 ^$ 可以匹配每一行的开始和结束位置,而不仅仅是整个字符串的开始和结束位置

通过分析源码得知,传入的值应该是多行且开始位置不是php,结尾为php,因此传入一个两行且首行开始位置不是php,第二行结尾为php的字符串即可

ps:%0a表示换行

web92

分析源码

发现是和90题重复的,则输入?num=4476.1abc即可

web93

分析源码

本题与90和92题不同的地方在于本题多出了验证是否有小写字母,若是则输出no no no!然后停止运行

那么本题输入?num=4476.1这种小数即可

web94

分析源码

本题与93题相比,多出了对数字0的验证,如果不包含数字0,则输出no no no!且终止代码运行

同时使用了严格等于(==)来检查是否等于字符串4476

通过分析源码发现,传入的数据需要满足以下三个条件:

1.不等于4476   2.不包含小写字母   3.包含数字0

由此得知,传入4476.0即可

web95

分析源码

本题与94题的差别在于本题通过松散等于对4476进行验证,还多出了对小数点的验证

通过对源码的分析发现,要想获取flag,需要满足三个条件:

1.不等于4476   2.不包含小数点和小写字母   3.一定包含0

将4476转换为8进制,在8进制前面加一个空格,这样strpos()会返回1

传入?num= 010574即可

web96

分析源码

首先检查是否存在名为u的参数,若是且参数值松散等于flag.php,则输出no no no且停止代码运行

若存在参数u,但不为flag.php,则使用highlight_file($_GET['u'])高亮显示参数u指定文件

通过加上./绕过即可

web97

分析源码

首先检查是否收到了两个post参数a和b

然后检查a和b是否不相等

然后检查a和b两个参数的的MD5哈希是否相等

如果所有条件都满足,则输出 flag,否则输出 wrong

传入a[]=1&b[]=2即可

web98

分析源码

首先检查是否设置$_GET数组,若存在,则赋给$_POST,若不存在,就执行flag

然后检查$_GET数组中键为flag的值是否等于flag,若等于则赋给$_COOKIE,若不等于则执行flag

然后检查$_GET数组中键为flag的值是否等于flag,若等于则赋给$_SERVER,若不等于则执行flag

然后使用highlight_file函数高亮显示php文件内容,将php代码转换为html,使用了一个条件表达式来决定显示那个文件的内容,若$_GET['HTTP_FLAG']的值等于flag,则会显示flag的内容

通过分析源码,可以先发送一个get参数,然后再post上传一个HTTP_FLAG参数并赋值为flag即可

web99

分析源码

首先创建了一个名为allow的空数组,通过循环向其中填充了一些随机值

然后判断是否有一个参数n且参数的值在数组中,代码将会用file_put_contents函数将参数的值写入文件中

可以通过一句话木马来获取flag,传入<?php eval($_POST[1]);?>

web100

分析源码

首先获取v1,v2,v3并赋值

然后判断$v1,$v2,$v3是否都为数字,若都为数字,则继续向后检查,检查v2是否包含分号,若不包含分号,继续向后检查,检查v3是否包含分号,若包含分号,则将v2和v3的值拼接在一起,并执行

通过分析源码发现,要获取 flag,需要绕过给定的输入验证,并成功执行eval()函数中的代码

传入?v1=1&v2=var_dump($ctfshow)&v3=*/;即可

web101

分析源码

本题与上一题相比,过滤掉了许多特殊字符

传入?v1=1&v2=echo new ReflectionClass&v3=;即可

web102

分析源码

首先分别从 POST 和 GET 请求中获取v1,v2,v3的值

然后检查v2,v3是不是数字。若是,则v4为真,若否,则v4为假,代码停止运行

若v4为真,继续运行代码,先从$v2中提取字符串,从位置2开始,然后使用call_user_func函数调用$v1作为函数名,传递$s作为参数,然后将返回的结果储存在$str中,输出$str的值,将内容写入$v3指定的文件中

通过分析源码,v1是hex2bin;v2是两个任意数字然后加上php语句的base64转16进制的内容;v3是php伪协议语句

传入get:  ?v2=11504438395948526859794171594473&v3=php://filter/write=convert.base64-decode/resource=2.php

post:   v1=hex2bin即可

然后访问2.php,查看源码,即可得到flag

web103

分析源码


首先从POST请求中获得一个变量v1,然后从GET请求中获得变量v2和v3

然后检查v2和v3是否都是数字,若不是,输出hacker并结束代码运行

若v2和v3都是数字·,代码会从v2中获取第三个字符开始到最后的字符串,然后用v1指定的函数处理这个子字符串,处理后的字符串保存在$str中,然后输出,若字符串中没有php,则写入$v3指定的文件,若有php。则输出sorry并结束代码运行

与上一题相比,多出了对php的过滤,因此与上一题相同

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值