zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    USB无线网卡导致耳机电流声很大
    知乎广告太多怎么办?
    网络机顶盒固件提取、编辑和打包
    GOOGLE机器学习速成班
    windows xp版本的chrome浏览器去哪里下载呢?
    [转载]HTTP无状态是什么意思?
    [转载]HTTP的无状态是什么意思?
    安卓手机网页打开淘宝总是弹出应用市场
    PLSQL Developer 客户端工具的安装
    VMware虚拟网卡设置问题
  • 原文地址:https://www.cnblogs.com/hacker-snail/p/13950954.html
Copyright © 2011-2022 走看看