MENU

CTFWeb—— 拐弯抹角

October 16, 2018 • Read: 4274 • Web,CTF阅读设置

解题链接展开目录

思路展开目录

  • <?php
  • // code by SEC@USTC
  • echo '<html><head><meta http-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; //Not Pass
  • }
  • //第六,我们知道在index.php后面加.也是可以的
  • //所以我们禁止p后面出现.这个符号
  • if($flag && strpos($URL, 'p.') !== FALSE){
  • $flag = "";
  • $stop = 6; //Not Pass
  • }
  • //第七,现在是最关键的时刻
  • //你的$URL必须与/indirection/index.php有所不同
  • if($flag && $URL == '/indirection/index.php'){
  • $flag = "";
  • $stop = 7; //Not Pass
  • }
  • 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, '//Not Pass', $code);
  • echo highlight_string($code, TRUE);
  • echo '</body></html>';

题目的意思就是通过改变 URL 地址栏访问 index.php,但是限制了条件不能使用 ./ ../ 等,而且只能使用小写字母,不可以在 php 后加点
关键是不能直接是 http://ctf5.shiyanbar.com/indirection/index.php

这里我们可以利用伪静态技术,使用 http://ctf5.shiyanbar.com/indirection/index.php/index.php,index.php 后的 index.php 会被当做参数处理,所以服务器只会解析第一个 index.php,满足条件成功绕过。

答案展开目录

  • CTF{PSEDUO_STATIC_DO_YOU_KNOW}
Last Modified: October 22, 2018
Archives Tip
QR Code for this page
Tipping QR Code