第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 实验吧:拐弯抹角

实验吧:拐弯抹角

时间:2020-11-09 00:38:48

相关推荐

实验吧:拐弯抹角

先贴代码,可也学习下。

<?php

//codebySEC@USTC

echo'<html><head><metahttp-equiv="charset"content="gbk"></head><body>';

$URL=$_SERVER['REQUEST_URI'];

//echo'URL:'.$URL.'<br/>';

$flag="CTF{???}";

$code=str_replace($flag,'CTF{???}',file_get_contents('./index.php'));

$stop=0;

//这道题目本身也有教学的目的

//第一,我们可以构造/indirection/a/..//indirection/./等等这一类的

//所以,第一个要求就是不得出现./

if($flag&&strpos($URL,'./')!==FALSE){

$flag="";

$stop=1;//Pass

}

//第二,我们可以构造\来代替被过滤的/

//所以,第二个要求就是不得出现../

if($flag&&strpos($URL,'\\')!==FALSE){

$flag="";

$stop=2;//Pass

}

//第三,有的系统大小写通用,例如indirectioN/

//你也可以用?和#等等的字符绕过,这需要统一解决

//所以,第三个要求对可以用的字符做了限制,a-z/和.

$matches=array();

preg_match('/^([0-9a-z\/.]+)$/',$URL,$matches);

if($flag&&empty($matches)||$matches[1]!=$URL){

$flag="";

$stop=3;//Pass

}

//第四,多个/也是可以的

//所以,第四个要求是不得出现//

if($flag&&strpos($URL,'//')!==FALSE){

$flag="";

$stop=4;//Pass

}

//第五,显然加上index.php或者减去index.php都是可以的

//所以我们下一个要求就是必须包含/index.php,并且以此结尾

if($flag&&substr($URL,-10)!=='/index.php'){

$flag="";

$stop=5;//NotPass

}

//第六,我们知道在index.php后面加.也是可以的

//所以我们禁止p后面出现.这个符号

if($flag&&strpos($URL,'p.')!==FALSE){

$flag="";

$stop=6;//NotPass

}

//第七,现在是最关键的时刻

//你的$URL必须与/indirection/index.php有所不同

if($flag&&$URL=='/indirection/index.php'){

$flag="";

$stop=7;//NotPass

}

if(!$stop)$stop=8;

echo'Flag:'.$flag;

echo'<hr/>';

for($i=1;$i<$stop;$i++)

$code=str_replace('//Pass'.$i,'//Pass',$code);

for(;$i<8;$i++)

$code=str_replace('//Pass'.$i,'//NotPass',$code);

echohighlight_string($code,TRUE);

echo'</body></html>';

url伪静态的知识,学到了。

简单来说,比如/indirection/index.php/user/index.php,虽然在index.php后面还加上了一些东西,但是这个user会被解析成参数名,而index.php则会被解析成user的值。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。