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

拐弯抹角——实验吧

时间:2019-04-15 05:50:49

相关推荐

拐弯抹角——实验吧

刚刚做了实验吧的题目,现在整理一下

写出解题思路,希望能够帮助到那些需要帮助的人

所有的wp都是以一题一篇的形式写出

主要是为了能够让读者更好的阅读以及查找,

希望你们不要责怪!!共勉!!!

永远爱你们的————新宝宝

拐弯抹角分值:10

来源:cwk32 难度:易参与人数:7523人Get Flag:2936人答题人数:3047人解题通过率:96%

如何欺骗服务器,才能拿到Flag?

格式:CTF{}

解题链接:/indirection/

解题思路:这一题的代码比较有意思,并且一开始看到代码

并没有多少思路,只是看到一些大佬写的解题思路之后就会发现

这个是属于伪静态,现在我们需要了解一下伪静态的知识:

/item/%E4%BC%AA%E9%9D%99%E6%80%81/2234695?fr=aladdin

就会发现这个百度,好像看的不太懂,我就总结一下下:

伪静态:

url中含有xxxx.php/xx/x,那么.php后的xx就会被当成参数名,x会被当成参数

/indirection/index.php/user/index.php,虽然在index.php后面还加上了一些东西,

但是这个user会被解析成参数名,而index.php则会被解析成user的值

就是这个意思,接下来看看代码就会发现,这个出题人很善良,毕竟解释的很清楚:

<?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>';

这个我们可以根据他的要求:

根据这三个要求就会得到:

/indirection/index.php/a/index.php

得到最后答案:CTF{PSEDUO_STATIC_DO_YOU_KNOW}

您可以考虑给博主来个小小的打赏以资鼓励,您的肯定将是我最大的动力。

作者: 落花四月 出处: /lxz-1263030049/ 关于作者:潜心于网络安全学习。如有问题或建议,请多多赐教! 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我 声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!

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