写在开头可能会用到的提示
- call_user_func 调用的函数可以不区分大小写
- preg_match过滤存在长度溢出,长度超过100w检测失效。str_repeat('show',250000); 生成100w个字符
- preg_match是无法处理数组的,例如:preg_match($num),$num[1]=1,这样子无法处理
- intval()是可以检测十进制 | 八进制 | 十六进制的。如果字符串包括了 "0x" (或 "0X") 的前缀,使用 16 进制 (hex);如果字符串以 "0" 开始,使用 8 进制(octal);否则,使用十进制
- intval()。可以搭配的特殊字符是+和空格,当然也可以URL编码后提交。
- highlight_file 包含的文件可以是全路径,可以接php://filter/resource=xxx
- php的md5传入的是数组,那么md5一样,例如:a[]=1和b[]=2的md5值一样 补充:sha1可以
- %00 可以截断
- echo new DirectoryIterator(getcwd()); 遍历目录类 echo new filesystemIterator(getcwd()); 遍历文件类
- var_dump($GLOBALS); 可以查看当前的全部变量
- is_file() 检测文件函数,可以用伪协议来绕过
- php会自动将不符合规范的变量(空格等特殊符号)转换为_,且只会转换一次,例如fl[ag.com,转换为fl_ag.com,后面的 . 不会被转换
- 小知识点: _()是一个函数,_()==gettext() 是gettext()的拓展函数
- php里默认命名空间是\,所有原生函数和类都在这个命名空间中。 普通调用一个函数,如果直接写函数名function_name()调用,调用的时候其实相当于写了一个相对路 径; 而如果写\function_name()这样调用函数,则其实是写了一个绝对路径。 如果你在其他namespace里调用系统类,就必须写绝对路径这种写 法
- file_get_contents可以使用伪协议,例如:file_get_contents($file)==="123",$file=data://text/plain,123;或者是php://input
- curl 不仅支持http(s),而且支持file协议,例如: curl file:///home/sibei/test
- $_POST[cmd]可以写为$_POST{cmd}
- php无论有没有上传文件的参数,如果强制上传文件,那么PHP会先保存到临时目录,待脚本执行结束后删除。linux的临时目录文件是/tmp/php??????,问号代表任意字符。如果存在命令执行,那么就可以通过执行强制的临时文件来达到命令执行。linux通配符匹配 /???/????????[@-[],这样可以匹配最后一位是大写字母的文件,贴个脚本
CVE收集
PHP5.5.9整数溢出漏洞
- 当数组下标为4294967296时,等同于下标0,例如:sibei[4294967296]等同于sibei[0]