zoukankan      html  css  js  c++  java
  • 实验吧Web-PHP大法

    笔记
    字符串比对解析,与大小写无关。
    eregi()函数
    语法:  eregi(string pattern, string string, array [regs]);
    返回值: 整数/数组
    特点:PHP函数eregi()与大小写无关,类似函数ereg() 则区分大小写
    例:if (eregi("C","abcdef")   //true
    
    URl双编码: 将经过url编码产生的'%'再次编码,及把'%'替换为'%25'

    链接:  http://www.shiyanbar.com/ctf/54

        

    页面情况

        

    获得提示: index.php.txt
    
    <?php
    if(eregi("hackerDJ",$_GET[id])) {
      echo("<p>not allowed!</p>");
      exit();
    }
    
    $_GET[id] = urldecode($_GET[id]);
    if($_GET[id] == "hackerDJ")
    {
      echo "<p>Access granted!</p>";
      echo "<p>flag: *****************} </p>";
    }
    ?>
    
    <br><br>
    Can you authenticate to this website?
    
    首先eregi()函数进行一次比较判断,如果想打印flag,id不能等于"hackerDJ" ,并且经过url解码后id等于"hackerDJ"

    但这里需要注意的是:在浏览器中提交时浏览器会为我们进行一次解码
    可以在本地执行下面的代码: 
    <?php
    $id = '%68ackerDJ';
    if(eregi("hackerDJ",$id)) {
      echo("<p>not allowed!</p>");
      exit();
    }
    
    $id = urldecode($id);
    if($id == "hackerDJ")
    {
      echo "<p>Access granted!</p>";
      echo "<p>flag: *****************} </p>";
    }
    ?>
    可以看到成功打印,说明浏览器的确为我们转换了一次

    因此我们需要进行两次编码: h --> %68 --> %2568

    构造url: index.php?id=%2568ackerDJ

    提交即可获得flag:   flag: DUTCTF{PHP_is_the_best_program_language}
  • 相关阅读:
    149. Max Points on a Line(js)
    148. Sort List(js)
    147. Insertion Sort List(js)
    146. LRU Cache(js)
    145. Binary Tree Postorder Traversal(js)
    144. Binary Tree Preorder Traversal(js)
    143. Reorder List(js)
    142. Linked List Cycle II(js)
    141. Linked List Cycle(js)
    140. Word Break II(js)
  • 原文地址:https://www.cnblogs.com/ssooking/p/5901440.html
Copyright © 2011-2022 走看看