文章目录
- 一、simple_php
- 二、使用步骤
- 1.点击获取在线场景
- 2.源码分析
- 总结
一、simple_php
题目链接:https://adworld.xctf/task/task_list?type=web&number=3&grade=0&page=1
二、使用步骤
1.点击获取在线场景
2.源码分析
<?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)这里包含了config.php
(2)url接收参数a和b的值
(3)如果$a等于0 and
a
,
输
出
a,输出
a,输出flag1
(4)如果
b
是
数
字
或
者
字
符
串
那
么
退
出
当
前
脚
本
(
5
)
如
果
b是数字或者字符串那么退出当前脚本 (5)如果
b是数字或者字符串那么退出当前脚本(5)如果b>1234,输出
f
l
a
g
2
所
以
,
这
里
我
们
既
要
保
证
输
出
flag2 所以,这里我们既要保证输出
flag2所以,这里我们既要保证输出a,
b
,
又
要
保
证
b,又要保证
b,又要保证b是数字,那么就用到php的弱类型比较了
在浏览器上输入:http://111.200.241.244:65181/?a=c&b=2222a
得到完整flag:Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}
总结
掌握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
更多推荐
【愚公系列】2021年12月 攻防世界-简单题-WEB-007(simple_php)
发布评论