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}
  • 相关阅读:
    chapter 12_1 数据文件
    chapter11_3 字符串缓冲
    chapter11_2 Lua链表与队列
    chapter11_1 Lua数组、列表
    chapter9_4 非抢占式的多线程
    Java设计模式
    java内存回收机制
    javaIO流概述
    java集合概述
    java多线程
  • 原文地址:https://www.cnblogs.com/ssooking/p/5901440.html
Copyright © 2011-2022 走看看