实验吧-web-拐弯抹角

本系列文集:实验吧-Write up --将持续更新 觉得还不错请给个喜欢,感谢!

打开题目直接得到源码

Flag: ';

$URL = $_SERVER['REQUEST_URI'];
//echo 'URL: '.$URL.'
'; $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; //Pass } //第六,我们知道在index.php后面加.也是可以的 //所以我们禁止p后面出现.这个符号 if($flag && strpos($URL, 'p.') !== FALSE){ $flag = ""; $stop = 6; //Pass } //第七,现在是最关键的时刻 //你的$URL必须与/indirection/index.php有所不同 if($flag && $URL == '/indirection/index.php'){ $flag = ""; $stop = 7; //Not Pass } if(!$stop) $stop = 8; echo 'Flag: '.$flag; echo '
'; for($i = 1; $i < $stop; $i++) $code = str_replace('//Pass '.$i, '//Pass', $code); for(; $i < 8; $i++) $code = str_replace('//Pass '.$i, '//Not Pass', $code); echo highlight_string($code, TRUE); echo '';

要得到flag需要满足:

1.不能使用"./"
2.不能使用"../"
3.只能使用小写字母
4.不能使用"//"
5.必须包含/index.php,并且以此结尾
6.禁止p后面出现.
7.URL必须与/indirection/index.php有所不同

题目的意思就是通过改变URL地址栏访问index.php,这题的关键在于伪静态,比如url中含有xxxx.php/xx/x,那么.php后的xx就会被当成参数名,x会被当成参数

URL伪静态:
通过对动态网页进行URL处理(重写),从而实现看起来像是静态URL页面(而实际网页目录或路径中没有该页面)的方法,表现形式主要是去掉动态网页QUERY参数,还有可以让URL看起来更加有序条理。

payload:http://ctf5.shiyanbar.com/indirection/index.php/x/index.php

实验吧-web-拐弯抹角_第1张图片
图片.png

你可能感兴趣的:(实验吧-web-拐弯抹角)