一、认识上传漏洞
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力,这种攻击方式是最直接和有效的文件上传本身是没问题的,有问题的是文件上传后,服务器怎么处理,解析文件。通过服务器的处理逻辑做的不够安全,则会导致上传漏洞。
二、上传漏洞的条件
1.文件可上传
2.知道上传文件的路径
3.上传的文件可被解析
三、上传漏洞的相关知识
$ FILES //全局数组
$_FILES['myFile"]['name'] //显示客户端文件的原名称
$_FILES['myFile’]['type'] //文件的 MIME 类型,例如"image/gif"
$_FILES['myFile]['size"] //已上传文件的大小,单位为字节
$_FILES['myFile"][tmp_name"] //储存的临时文件名,一般是系统默认
$_FILES['myFile]['error'] //该文件上传相关的错误代码
四、相关函数
move_uploaded_file(file,newloc) //函数将上传的文件移动到新位置
strtolower() //函数把字符串转换为小写。
trim() //函数移除字符串两侧的空白字符或其他预定义字符。
strrchr() //函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
strireplace() //函数替换字符串中的一些字符(不区分大小写)。
getimagesize() //函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回FALSE 并产生一条E WARNING 级的错误信息。
exif_imagetype() //读取一个图像的第一个字节并检查其签名substr0 函数返回字符串的一部分。
fopen() //函数打开文件或者 URL。
fread() //函数读取文件(可安全用于二进制文件)
fwrite()) //函数写入文件(可安全用于二进制文件)0
五、判断上传漏洞的类型
六、上传漏洞的检测方式
客户端校验
:
使用JS来判断后缀名
服务端校验
:
1.对数据包的MIME进行检查
2.后缀名黑名单校验
3.后缀名白名单校验
4.文件头检查
5.二次渲染
6.条件竞争
七、代码分析
具体代码可以去看upload-libs
标签:审计,文件,函数,漏洞,字符串,PHP,上传,FILES From: https://www.cnblogs.com/o-O-oO/p/18451497