0%00 php中的系统变量,全局可用
1 | $GLOBALS // 引用全局作用域中可用的全部变量 |
0%01 php中双引号与单引号的区别
双引号会输出变量,即使用服务器解析在双引号中的字符。
单引号将字符直接输出,不使用服务器解析,即使是\n也不解析。
php对单引号的解析速率比双引号快
0%02 php中scandir()函数可以看到目录下的所有文件名
scandir(‘/‘).;
0%03 php 变量覆盖
第一种:$$造成的变量覆盖
1 |
|
返回值为输入的变量的值。
第二种extract() 函数从数组中将变量导入到当前的符号表
extract()函数默认是覆盖已有变量
第三种parse_str()函数把查询字符串解析到变量中。
第四种import_request_variables — 将 GET/POST/Cookie 变量导入到全局作用域中
能从get,post,cookie三处传参。
unset($a)可以销毁一些变量。
0%04输出文件内容
1 | show_source('flag.php'); |
对于php文件,输出文件内容中,show_source(),和hightlight_file()均是输出源php格式。而var_dump()是以数组的形式输出数据,数组[0]代表第一行,以此类推。print_r()也以数组的形式输出。但是对于html,var_dump输出的是html代码,而print_r输出的html会被前端浏览器执行。(这四个函数都可以通过../,/,查看目录下的文件)
0%05文件读取
1 | <?php |
得到的将会是一个百度的界面。
0%06$_get和$_post
当向$_get和$_post传入数据name[]=a时,会自动将name转化为数组型且0=>a,正常传入的数据是string型的。
0%07strcmp 和 strcasecmp
在这两个函数中数组和字符串比较均会返回NULL。
0%08 parse_url()函数解析错误
1 |
|
当输入url=baidu.com/about:80时会返回数组型host=baidu.com,port=80,path=/about:80/。
0%09php弱类型比较
目前还存在的弱类型(我的php版本7.2.11)有0=='addafs'返回true;'0.9999'==1返回true
0%10字符型和数值型的转换
当 $var 是一个字符串的时候,访问 $var["any string"] 跟访问 $var[intval("any string")] 效果是一样的。当输入两个不一样的any string时,即$var["aaa"]==$var["bbb"]=$var[0]。
当进行switch()时,会将switch中的字符型数据转换为数值型,然后再到case中进行比较。
0%11preg_match()正则表达式
preg_match()在第一次匹配后将会停止搜索,因此如果正则表达式没有用^,$就有可能存在绕过,而且它的默认匹配方式为贪婪匹配,匹配尽可能多的字符。如果此函数开启了/m则也可能存在绕过,例如/^[a-zA-Z0-9-s_]+.rpt$/m如果要绕过这个限制只需要用a.rpt%0axxxx就可以执行后面的xxxx了。
开启/m后,^表示行首,$表示行尾
关闭/m后,^表示字符串的开始,$表示字符串的结尾
修饰符说明:
1 | i 在和正则匹配是不区分大小写 |
php中的另一个正则表达式ereg()进行正则匹配时存在0%00绕过问题,但是在php7+中将ereg()函数给移除了

