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的值。

  • 相关阅读:
    Asp.Net Web API 2第八课——Web API 2中的属性路由
    Asp.Net Web API 2第七课——Web API异常处理
    Asp.Net Web API 2第六课——Web API路由和动作选择
    Asp.Net Web API 2第五课——Web API路由
    开始学习python
    BMI 小程序 购物车
    深浅copy 文件操作
    字典 dict 集合set
    基本数据类型 (str,int,bool,tuple,)
    python 运算符
  • 原文地址:https://www.cnblogs.com/whitehawk/p/9902534.html
Copyright © 2011-2022 走看看