• CTF中常用到的PHP函数(更新中)


    • cURL 函数
      支持http、https、ftp、gopher、telnet、dict、file和ldap协议

    • strrev()
      反转字符串
      如:strrev("Hello world!"); // 输出 "!dlrow olleH"

    • substr()
      返回字符串的子串
      格式:substr ( string, start , length )

      • string输入字符串。必须至少有一个字符。
      • start
        如果 start 是非负数,返回的字符串将从字符串 的 start 位置开始,从 0 开始计算。例如,在字符串 “abcdef” 中,在位置 0 的字符是 “a”。
        如果 start 是负数,返回的字符串将从 字符串 结尾处向前数第 start 个字符开始。
      • length
        正数的 length,返回的字符串将从 start 处开始最多包括 length 个字符。
        如果提供了负数的 length,那么 字符串 末尾处的绝对值 length 个字符将会被省略
        如果提供了值为 0,FALSE 或 NULL 的 length,那么将返回一个空字符串。
        如果没有提供 length,返回的子字符串将从 start 位置开始直到字符串结尾。
      • 例子:echo substr('abcdef', 0, 4); // abcd
        echo substr('abcdef', 0, 8); // abcdef
        echo substr('abcdef', -1, 1); // f
    • htmlspecialchars()
      把预定义的字符转换为 HTML 实体

    • isset()
      用于检测变量是否已设置,且非 NULL

    • serialize()
      将一个对象转换成一个字符串

    • unserialize()
      将字符串还原为一个对象

      • 在PHP应用中,序列化和反序列化一般用做缓存,比如session缓存,cookie等。
    • preg_match()
      用于执行一个正则表达式匹配

    • file_get_contents()
      支持PHP伪协议
      把整个文件读入一个字符串中。
      和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。

    • is_numeric()
      用于检测变量是否为数字或数字字符串

      • 语法:bool is_numeric ( mixed $var )
        $var:要检测的变量。
      • 返回值:如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE。
      • 特性:
        • 当碰到16进制数的时候,会判断成数字
        • is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。
    • strcmp函数()
      比较两个字符串。

    • 注释:strcmp() 函数是二进制安全的,且区分大小写。

      • 语法:strcmp(string1,string2)
        string1 必需。规定要比较的第一个字符串。
        string2 必需。规定要比较的第二个字符串。
      • 返回值:
        0 - 如果两个字符串相等
        <0 - 如果 string1 小于 string2
        >0 - 如果 string1 大于 string2
      • 特性:在PHP5.3之前,传入数据的类型是字符串类型,当传入的类型不是字符串类型 函数就会发生错误,显示报错信息后会return 0 所以漏洞就出现在了这里
        • 例子:(要求get传进来的值要与$password变量里面的值相等因为用了strcmp函数所以他们俩的值相等才会返回0,0==0才能正常输出我们的flag!所以我们可以利用这个函数特性绕过它)
          <?php
          $password="***************";
          if(isset($_GET['password'])){
          if(strcmp($_GET['password'],$password)==0){
          echo "flag{xxxxx-xxx-xxxx}";
          }else{
          echo "NO password ";
          }
          }
          ?>
          利用:这里我们构造password为一个数组数组传值为1,即password[]=1。而strcmp要求我们传入字符串 strcmp函数判断不是字符串会报错,但是会return 0 所以我们的目的达到了得到flag
  • 相关阅读:
    理解OAuth 2.0
    Npoi导出word(Peanuts)
    轻松搞定javascript日期格式化问题
    史上最全的MSSQL复习笔记
    SQL经典短小代码收集
    Web系统与自控系统数据通讯架构 之 OPC DA DataChangeEventHandler 非热点数据更新策略 ,
    记一次SQL Server insert触发器操作
    记一次单机Nginx调优,效果立竿见影
    windows 显示引用账户已被锁定,且可能无法登录
    C# 使用modbus 读取PLC 寄存器地址
  • 原文地址:https://www.cnblogs.com/hacker-snail/p/13950954.html
Copyright © 2020-2023  润新知