php特性靶场的一些题目

web89

我们看到题目中包含了一个flag文件,并且用get传参传入一个零到九的数字并赋值给num,preg_math是php中一个函数,用于执行正则表达式的匹配,原型为:

int preg_match ( string $pattern , string $subject [, array &$matches = NULL ] ),

函数返回一个整数值,具体含义如下:

  • 0:如果模式与字符串不匹配。
  • 1:如果模式与字符串完全匹配。
  • >1:如果模式与字符串部分匹配。

之后用intval()函数进行判断,intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于数组,否则会产生 E_NOTICE 错误并返回 1 。 故此传入?num[]=1,产生错误返回1。 

当我们直接输入一个数字时,程序会无法通过检验而终止,所以,当num通过正则表达式后,我们就可以继续进入到下一步,所以我们向其传入一个数组,即可通过一二步检查而获得flag,向其传入?num[]=1;

web90

这段代码会检查变量num是否等于4476,如果等于4476,程序会直接输出no no no !,否则的话程序会使用intval()函数进行转换,将num转化为一个整数,后边的0则代表其将num转化为十进制,如果转化后的数字等于4476的话,程序将会输出flag的信息,不等于则直接输出数字。

所以我们输入小数形式的4476,即4476.0,它不等于4476的同时,转化为整数是4476,所以我们传入?num=4476.0,即可获得flag。

web91

这段代码用GET获得了cmd的值,并将其复制给a,再通过preg_match()函数来对a进行判断,首先检查a是否以php开头,^表示以什么开头,im其中的i表示ignore不区分大小写,m表示more多行匹配。然后其再次使用了一个相似的代码来再次检验,但是这行代码缺少了多行检验,所以我们可以向其传入多行的表达式,使第一行不满足条件,而第二行满足,则可绕过第二层检验

?cmd=x%0aphp

web92

这道题与之前的题目类似,我们可以换一种其他做法,其将我们输入的值转化为十进制数,我们可以向其传入4476的其他进制形式,如16进制数0x117c,0x为十六进制数的标志,所以我们传入

?num=0x117c

即可获得flag

web93

这道题目再次使用了preg_match来判断num,这段代码主要检查num中是否含有小写字母,如果含有的话其将直接中止运行,所以我们将不能使用十六进制数,我们向其输入4476.1,在强制转化是系统会将我们的小数部分抹去,所以我们输入

?num=4476.1

就能绕过检查得到flag

web94

这道题目中含有一个判断$num==="4476",严格比较了num的值与4476是否相等,strpos是一个PHP函数,用于查找一个字符串在另一个字符串中第一次出现的位置。如果找到子串,则返回它在父串中的位置(从0开始计数),如果没有找到,则返回false。这个函数是大小写敏感的,并且是二进制安全的。

函数的基本语法如下:strpos(string $haystack, mixed $needle, int $offset = 0): int|false

这段代码中的strpos前有取反!符号,所以说我们传入的式子中必须含有0

所以我们继续传入4476.0来通过严格等于,所以我们传入?num=4476.0即可获得flag。

web95

此题与上题类似,,但是num不能等于4476,这次系我们使用八进制数,并在前面加空格来绕过判断,传入

?num= 010574,即可获得flag。

web96

isset是一个用来检测变量是否已设置并且非NULL的关键字或函数。它通常用于判断变量是否存在,并可以避免在使用变量之前出现错误。

如果变量存在且其值不为NULL,isset()函数返回真,否则返回假。这道题我们在需要向u传入flag文件,并且u不能等于flag.php,所以我们加入当前文件目录./来绕过。

web97

此题是post传参并且需要a与b的值不同,但是通过md5加密后的结果要相同,所以我们使用传入数组的方式来使加密同时返回NULL,使其相同,所以向post传入

a[]=1&b[]=2,即可获得flag

web98

这道题使用了运算符? :来对get与post惊醒判断,如果存在get传参,则会被post所覆盖,所以我们只需要保证存在get,并且使post传入的参数满足最后的判断条件即可绕过,所以随意传入一个get值,再向post传入HTTP_FLAG=flag,获得flag

web100

这段代码创建了一个名为 $ctfshow 的对象,从 GET 请求参数中获取数据,并将其存储在变量 $v1, $v2, $v3 中,然后使用 is_numeric() 函数检查 $v1, $v2, $v3 是否都为数字。然后将结果赋值给变量 $v0,由于=的优先级高于and,因此只需要v1等于数字就可以绕过上述检查。eval()函数的作用是将传入的字符串作为 PHP 代码进行解析和执行。简单来说,eval() 函数可以在运行时动态执行一段 PHP 代码。所以我们传入/?v1=2&v2=&v3=?><?=`tac ctfshow.php`;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值