zoukankan      html  css  js  c++  java
  • 实验吧:拐弯抹角

    先贴代码,可也学习下。
    <?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伪静态的知识,学到了。

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

  • 相关阅读:
    Android深度探索-卷1 第三章
    Android深度探索-卷1 第四章
    Android深度探索-卷1 第二章
    Android深度探索-卷1 第一章
    硬件抽象层HAL
    嵌入式Linux调试技术
    蜂鸣器驱动
    控制发光二极管
    搭建S3C6410开发板的测试环境
    统计单词个数
  • 原文地址:https://www.cnblogs.com/whitehawk/p/9902534.html
Copyright © 2011-2022 走看看