• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
capybaras
博客园    首页    新随笔    联系   管理    订阅  订阅
php特性

php特性

函数特性

is_file()绕过

is_file() 如果输入的是存在且正常的文件就返回true,利用函数所能处理的长度限制进行目录溢出,超过is_file能处理的最大长度就不认为是个文件了。
/proc/self/root为根目录,经过实验21个/proc/self/root加上/var/www/html/flag.php便可以绕过

is_numeric()

%0c,%09,%20都可以让is_numeric()函数为true

include()

文件中有<? 就会将 <? 后识别成php代码

assert()

执行命令不需要;

usleep()

返回值 NULL

parse_str()

用来将字符串转换成变量的函数
如:

<?php
$str = "name=Peter&age=43";
parse_str($str, $output);
echo $output['name']; // 输出: Peter
echo $output['age']; // 输出: 43

preg_match()

绕过方法:

  • 该函数当检测的变量是数组的时候会报错并返回0
  • 利用正则回溯最大次数上限绕过绕
    php为了防止dos攻击,可以设置preg_match()正则回溯最大限制。preg_match()默认是1000000次(实测回溯为100w次,5.3.7版本以前是10w次),可在php.ini中查询。
    1. 无回溯匹配正则
      /ab{1,3}c/ 匹配 abbbc时,则无回溯
      
    2. 有回溯匹配正则
      /ab{1,3}c/ 匹配 abbc时,则会产生回溯
      
      • 贪婪量词
        {1,3}为贪婪量词,尽可能匹配更多个字符
        用/ab{1,3}c/匹配 abbc 会匹配 bb
      • 惰性量词
        {1,3}?为惰性量词,可能匹配少个字符
        /ab{1,3}?c/匹配 abbc {1,3}?只会匹配1个b
        参考文章:https://blog.csdn.net/yourdawntown/article/details/120558237
  • 换行绕过

__autoload()

当进行类判断的时候自动调用 php版本<7.2

intval()

  • 该函数不能用于 object,否则会产生 E_NOTICE 错误并返回 1。输入空数组会返回0 非空返回1
  • 开头+和空格会当正数或删除 如:+100 --> 100 %20100-->100
  • 第二个参数 $base 允许为空。
  • 当 base 为空时,默认值是 0,会根据 $var 的格式来调整转换的进制。
    如果 $var 以 0 开头,就使用 8进制
    如果 $var 以0x开头,就使用 16进制
    https://blog.csdn.net/wangyuxiang946/article/details/131156104

create_function()

语法:

create_function(string $args,  string $code)
string $args //声明的函数变量部分
string $code //执行的方法代码部分

其会创造一个匿名函数。
如:

$a=create_function("$a","echo($a);"); 
//创建一个叫做lamvda_1的函数。
//这等价于:
function lambda_1($a){
    echo($a);
}

$a("I'm Liu"); 调用函数等价于 lambda_1("I'm Liu");

利用:
在其第二个参数做手脚。
如

$a=create_function("$a","echo($a);}system('ls');/*");
则创建后变成如下:
function lambda_1($a){
    echo($a);
}
system('ls');
/*
}
如此便能执行命令。

https://blog.csdn.net/snowlyzz/article/details/127171931#create_function()简介

md5()

该函数传入数组,会返回NULL

in_arry()

该函数有漏洞 没有设置第三个参数 就可以形成自动转换,如:1.php自动转换为1

parse_str()

函数把查询字符串解析到变量中。
注释:如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量

eregi()

可以使用%00绕过匹配(PHP5版本,该函数在PHP7中被弃用)
如:a%00b 只会匹配a

strcmp()

传入数组返回 NULL

basename()

在使用默认语言环境设置时,basename() 会删除文件名开头的非 ASCII 字符和中文,

_()和gettext()

_() 函数即 gettext() 函数,可以将参数翻译成指定语言,一般就是原封不动的输出参数
get_defined_vars 函数可以输出所有变量的信息,两者结合拿到flag

call_user_func()

调用类中函数的方式

<?php

class myclass {
    static function say_hello()
    {
        echo "Hello!\n";
    }
}

$classname = "myclass";

call_user_func(array($classname, 'say_hello'));
call_user_func($classname .'::say_hello');

$myobject = new myclass();

call_user_func(array($myobject, 'say_hello'));

?>

https://www.php.net/manual/zh/function.call-user-func.php

其他特性

1.超过精确度的弱类型问题
超过精确度的数字(小数点后超过17位)在进行弱类型比较时,会出 现相等的情况。例如var_dump(0.99999999999999999==1)的结果 为True。

2.NULL、0、"0"、array()、字母、进制的比较

  • NULL、0、"0"、array()在使用==和false比较时,都会返回true。
  • 字母和数字进行弱类型比较的时候,会转换为NULL。
  • 弱类型比较时,对于进制(十六进制、八进制、二进制等)格式的字 符串,会将其转换为数字。
    3.$GLOBALS数组包含当前脚本内定义成全局范围的所有变量的引用。 数组的键就是变量的名字。
    4.作用域:php函数中无法调用外部变量
    5.$_REQUEST可以接受GET、POST请求
    6.$_SERVER['argv']
    • cli模式(命令行)下,第一个参数$_SERVER['argv'][0]是脚本名,其余的是传递给脚本的参数.
    • 在web页模式下必须在php.ini开启register_argc_argv配置项,$_SERVER['argv']才会有效果。
      此时的 $_SERVER['argv'][0]=$_SERVER['QUERY_STRING'],及为url/?后的值,列如:127.0.0.1/?abc=23 值则为abc=23

其他

  1. php检查两数组是否相等的时候,不会检查指针是否相等,而是会检查元素是否相等
  2. php运算符优先级
无 clone new clone 和 new
左 [ array()
右 ++ – ~ (int) (float) (string) (array) (object) (bool) @ 类型和递增/递减
无 instanceof 类型
右 ! 逻辑运算符
左 * / % 算术运算符
左 + – . 算术运算符和字符串运算符
左 << >> 位运算符
无 == != === !== <> 比较运算符
左 & 位运算符和引用
左 ^ 位运算符
左 | 位运算符
左 && 逻辑运算符
左 || 逻辑运算符
左 ? : 三元运算符
右 = += -= *= /= .= %= &= = ^= <<= >>= =>
左 and 逻辑运算符
左 xor 逻辑运算符
左 or 逻辑运算符
左 , 多处用到
3.反射类new ReflectionClass() 根据逻辑创建不同类时使用反射类。
echo new ReflectionClass('类名');可以输出此类中的属性和方法名。
posted on 2025-10-26 10:35  Hack_Tea  阅读(1)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3