关于简单的php函数漏洞和绕过

关于简单的php函数漏洞和绕过

五月 02, 2019

先贴三张php官方类型比较的图

php是一种弱类型语言,颇具灵活性,但也因此存在一些绕过的奇技淫巧,一些基础ctf题里也有php代码审计这一类,下面记录一些简单php函数绕过点,如有错误还请指点。

extrac():

可传入一个带键值的数组,分别把键值赋值给对应键名的变量,若变量存在则会覆盖原值,可以用这个特性改变已存在变量的值。

file_get_contents():

传入一个文件名,将文件内容读取至一个字符串中,但是如果找不到该文件的话它会返回FALSE。

strcmp($v1,$v2):

比较两个值,若$v1<$v2返回<0,若$v>$v2返回>0,若相等返回0,但是这个函数不能处理数组,而且遇到数组报错之后会返回NULL。

md5():

md5函数存在碰撞问题,即多个明文加密后密文相同,php的0e开头字符串会被判定成科学计数法的数字也常常和md5联系在一起,还有md5函数不能处理数组,遇到数组也会返回NULL,另外sha1()函数处理数组也会返回NULL。

strpos($str1,$str2):

查找$str2在$str1中第一次出现的位置(0开始),若没有出现则返回FALSE,若是$str1为数组则会返回NULL,$str2为数组会返回FALSE。

另外还有类似函数:

stripos(): 查找首次出现的位置,不区分大小写;strrpos(): 查找最后一次出现的位置,区分大小写;strripos(): 查找最后一次出现的位置,不区分大小写。

大于小于等于符号判断大小:

php中 如果判断大小时遇到数组,优先认为数组较大,然后才是数字和字符串,在数组间的比较中先判断数组的大小(数组中有多少数),若大小相同再依次从前往后判断数的大小,相等则继续判断下一位,不相等则返回结果。字符串与数字比较时若字符串全由数字组成则转化成数字比较,否则转化成字符串比较。

ereg():

php中ereg()函数时用来在字符串中查找是否含有指定字串,含有则返回TRUE否则返回FALSE,大小写敏感。

它处理数组会返回NULL,字符串中遇到%00会认为字符串结束,不再匹配后面的字符。这个函数在php5以后就已经被舍弃了。