# 黑名单绕过 ```php assert,system,passthru,exec,pcntl_exec,shell_exec,popen,proc_open,``(反单引号) ``` 以上函数可以执行命令,尝试黑名单绕过 # LD_PRELOAD > 在 UNIX 的动态链接库的世界中,LD_PRELOAD 是一个有趣的环境变量,它可以影响程序运行时的链接,它允许你定义在程序运行前优先加
# 命名空间概述 参照PHP手册 https://www.php.net/manual/zh/language.namespaces.rationale.php >(PHP 5 >= 5.3.0, PHP 7) 什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。
命令注入/代码注入绕过是CTF中相当有趣的一个话题,学习了几位师傅的博客,总结一下 # 问题开始 借鉴p神的问题--->`构造不使用数字和字母的webshell` 源码: ```php echo"!"^"@"; a php > echo"a"^"@"; ! php > echo"!"^"a"; @ ``` 可见,`a`这个字符可由`!`和`@`异或获取到 这里需要补充一个定律 > 若存在
php中存在弱类型,本质是当把不同类型的数据做处理的时候会发生强制类型转换, 我们可以利用这个特性,构造一些奇妙的用法 # 数字 ```php ('>'>'<')+('>'>'<')==2 ``` `>`在和`<`比较的时候会进行强制类型转换,`('>'>'<')`结果成为 `True`,在两个`True`相加的时候会强制类型转换为1,就成了1+1, 所以结果为2 # 字符 字符串还可以用!操作符来进行布尔类型的转换,以下为例 ```php php > var_dump(!@a); bool(false) php > var_dump(!!@a); bool(true) ``` 这样我们又获得了0,1两个数字,可以通过`chr()`和`trim`转换为字符 我
# 危险函数 ## 代码执行: - eval - preg_replace+/e - assert - call_user_func - call_user_func_array - create_function ##文件读取: - file_get_contents - highlight_file - fopen - read file - fread - fget
# 变长参数 5.6新引入的特性 **类似于Python中的**kwargs** [PHP官方文档](http://php.net/manual/zh/migration56.new-features.php) > 在之前的 PHP 版本中, 必须使用静态值来定义常量,声明属性以及指定函数参数默认值。 现在你可以使用包括数值、字符串字面量以及其他常量在内的数值表达式来 定义常量、声明属性以及设置