XSS攻击常见防御函数及其绕过手段
in_array($file_ext, $deny_ext)
作用
黑名单后缀过滤
绕过方法
(1)Apache 默认解析的原则很宽泛 使用以下后缀 php3 phar PHP php(空格) php. php::$DATA 绕过
(2)上传.htaccess文件 修改配置 前提是该文件被设置为可被覆写
strtolower()
作用
黑名单大小写过滤
绕过方法
(1)使用以下后缀 php3 phar php(空格) php. php::$DATA 绕过
(2)上传.htaccess文件 修改配置
trim()
作用
去除文件名末尾空格
绕过方法
(1)使用以下后缀 php3 phar PHP php. php::$DATA 绕过
(2)上传.htaccess文件 修改配置
deldot()
作用
去除末尾的点
绕过方法
(1)使用以下后缀 php3 phar PHP php(空格) php::$DATA 绕过
(2)上传.htaccess文件 修改配置
若目标依次执行 deldot()(去末尾点)、trim()(去首尾空格)等过滤 可以利用“点 + 空格 + 点”组合绕过,如shell.php. .。经过多次过滤后仍可还原为 shell.php
getimagesize()
作用
检查文件是否为合法图片
绕过方法
(1)在合法图片文件的末尾追加 PHP 代码。getimagesize()只检查文件头,不解析文件尾部
exif_imagetype()
作用
读取文件头签名校验
绕过方法
(1)在合法图片文件的末尾追加 PHP 代码。exif_imagetype() 只检查文件头,不解析文件尾部
imagecreatefromjpeg()
作用
二次渲染 使用 GD 库将上传的图片重新解码并重新编码保存。此过程会丢弃图片中所有非图像数据
绕过方法
对比原图和二次渲染后的图片,找到未被修改的数据块,将 PHP 代码写入该区域
move_uploaded_file()
作用
文件移动
绕过方法
使用后缀 php/ 绕过
