XCTF web新手题的simple_php

在这里插入图片描述

目标:

掌握php弱类型比较
php中其中两种比较符号:
==:先将字符串类型转化成相同,再比较
===:先判断两种字符串的类型是否相等,再比较
字符串和数字比较使用==,字符串会先转换为数字类型再比较
var_dump('a' == 0);//true,此时a字符串类型转化成数字,因为a字符串开头中没有找到数字,所以转换为0
var_dump('123a' == 123);//true,这里'123a'会被转换为123

var_dump(‘a123’ 123);//false,因为php中有这样一个规定:字符串的开始部分决定了它的值,如果该字符串以合法的数字开始,则使用该数字至和它连续的最后一个数字结束,否则其比较时整体值为0。
举例:
var_dump(‘123a1’ 123);//true
var_dump(‘1233a’ == 123);//false

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
php弱类型总结传送门
注:<、>、<=、>=都存在和==相同的弱类型,原理相同!!!

Writeup

PHP是世界上最好的语言!!!首先我们访问目标网址:
在这里插入图片描述

<?php
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){
    echo $flag1;
}
if(is_numeric($b)){
    exit();
}
if($b>1234){
    echo $flag2;
}
?> 

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

来,咱们来分析一波
(1)这里包含了config.php
(2)url接收参数a和b的值
(3)如果$a等于0 and $a,输出$flag1
(4)如果$b是数字或者字符串那么退出当前脚本
(5)如果$b>1234,输出$flag2
所以,这里我们既要保证输出$a,$b,又要保证$b是数字,那么就用到php的弱类型比较了

那么a=c&b=2222a
上述核心代码执行后就是:

if(true and true){         //这里$a==0 and $a,==为弱类型比较,字符串开头都为0,所以0==0 and 'c',因为字符串c存在,所以and后面也为true,所以双true,最后if括号里为true,执行if下面的语句
    echo $flag1;
}
if(is_numeric(2222a)){
    exit();
}
if(2222a>1234){
    echo $flag2;

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果:
在这里插入图片描述


注:
  • include 只生成警告(E_WARNING),并且脚本会继续

  • is_numeric()来函数用于检测变量是否为数字或数字字符串
    调试代码:

$var_name4 = "1stPeak";
$var_name5 = 9898;
$var_name6 = "9898";
if (is_numeric($var_name4))
{echo "$var_name4 是数字";} 
else {echo "$var_name4 不是数字";}

echo “<br/>”;

if (is_numeric(KaTeX parse error: Expected '}', got 'EOF' at end of input: …oken variable">var_name5 是数字";}
else {echo $var_name5 不是数字”;}

echo “<br/>”;

if (is_numeric(KaTeX parse error: Expected '}', got 'EOF' at end of input: …oken variable">var_name6 是数字";}
else {echo $var_name6 不是数字”;}

?>

/*结果:
1stPeak 不是数字
9898 是数字
9898 是数字
*/

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • exit() 函数输出一条消息,并退出当前脚本
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值