1、打开题目,首先就是一句英文,问你是否了解vim。
vim是linux自带且常用的文件编辑器,vim在编辑时会生成一个隐藏的临时文件,当vim非正常关闭时这个文件就会被保留下来。即.(编辑的文件加上).swp。
了解了什么是vim,那我们就可以尝试访问一下。/.index.php.swp
2、然后就会得到一个index.php.swp文件。放到linux中打开,会得到一段比较混乱的代码。
简单整理了一下,大致应该就是这样:
3、if语句中,2被单引号包裹了,如果$id
是整数型,PHP 会自动进行类型转换,将'2'
转换为整数2
,然后进行比较。但是如果$id
也是字符串类型,那么在执行比较表达式$id == '2'
时,PHP 会进行字符串比较而不是数值比较。
php中,switch使用的是也是弱比较==。
那由此可知,id的值就可以是2a这种类型的,在if语句中进行字符串比较,在switch中会进行数值比较。
然后就是preg_match的绕过,这里直接大小写绕过就可以了。
最后的payload就是 id=2a&file=php://FiltEr/convert.Base64-encode/resource=flag.php
最后得到的结果进行base64解码就是flag啦!
<?php
$flag='0xGame{S0me_pHp_tR1cKs_u_G3t_1t}';