文件上传漏洞常见函数:

1.deldot

​ deldot函数为upload-lab中一个出现多次的函数,是一个自定义的函数,在common.php中有所定义:

1
2
3
4
5
6
7
8
9
10
11
12
function deldot($s){
for($i = strlen($s)-1;$i>0;$i--){
$c = substr($s,$i,1);
if($i == strlen($s)-1 and $c != '.'){
return $s;
}

if($c != '.'){
return substr($s,0,$i+1);
}
}
}

读其源码可知,这个函数是将后边括号中的内容,从尾部开始,从后向前删除点.,直到该字符串的末尾字符不是.为止。

2.in_array

1
in_array(mixed $needle, array $haystack, bool $strict = false): bool

括号里的第一个参数$needle为待搜索值,$haystack为被搜索的数组,第三个参数决定是否进行类型比较。在文件上传中通常用来将文件后缀在黑名单或白名单里查找,从而进行对不同文件的处理。

3.str_ireplace

1
str_ireplace($deny_ext,"", $file_name);

该函数把括号内参数$deny_ext的值在$file_name中查找并替换成 (空格)。一般用于筛查黑名单(可用双写绕过)或者去掉后缀多余字符串。

4.strtolower

一个很简单的把括号中内容全部转换成小写的函数,通常用来把后缀名全转化为小写,然后再在黑名单或白名单进行筛查,使黑白名单的死角更小,如果不存在该函数,可以查看一下黑名单,尝试一下大小写绕过。

5.trim

去除字符串$str的首尾的空白字符。一般用来去除上传文件后缀的空格,来以防绕过。

6.strrchr

1
strrchr(string $haystack, mixed $needle)

strrchr函数在字符串$haystack中查找$needle,并将最后一次查找到的$needle及其后面的字符串返回。如果没有在该字符串中查找到$needle,则返回false。一般会用来获取文件的后缀名。

7.substr和strrpos

1
$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);

这两个函数放在一起是因为很多文件上传通过他们俩的组合,比如上边这一串代码,来获取上传了的文件的后缀名。

8.intval

将变量变成整数值,在文件上传中通常用这个函数把文件头转化成整数,来识别该文件(这时候通常就要用到文件马之类的了)。