php安全攻防利⽤⽂件上传漏洞与绕过技巧详解
⽬录
前⾔
⽂件上传漏洞的⼀些场景
场景⼀:前端js代码⽩名单判断.jpg|.png|.gif后缀
场景⼆:后端PHP代码检查Content-type字段
场景三:代码⿊名单判断.asp|.aspx|.php|.jsp后缀
场景四:代码扩⼤⿊名单判断
绕过⽅式——htaccsess:
绕过⽅式——⼤⼩写绕过:
场景五:⼀些复合判断
空格、点绕过(windows)
::$DATA绕过(windows)
双写绕过
%00截断
%0a绕过
图⽚马绕过
⼆次渲染绕过
条件竞争
/.绕过
前⾔前端大文件上传解决方案
⽂件上传漏洞⼤多出现在可以进⾏⽂件上传的地⽅,如⽤户头像上传,⽂档上传处等。该漏洞是⼀个危
害⼗分⼤的漏洞,通过⽂件上传,攻击者可以上传webshell并进⾏getshell操作,从⽽获得系统shell,可执⾏任意命令。也为后续⼤型⽊马的上传,特权提升提供了⼀个良好的基础。
⽂件上传漏洞的⼀些场景
接下来针对⽂件上传漏洞的⼀些waf过滤的场景进⾏说明并进⾏绕过和利⽤。
场景⼀:前端js代码⽩名单判断.jpg|.png|.gif后缀
在该场景下,防御的姿势是通过js代码对上传的⽂件后缀进⾏判断,如果不是.jpg|.png|.gif这三个后缀的⽂件则不允许上传⾄后台
绕过⽅式:
将带有⼀句话⽊马的⽂件后缀名改为xxx.jpg|png|gif,在上传处通过BurpSuite进⾏包拦截并改包,将⽂件后缀名改为php|jsp等脚本的后缀。上传成功后访问该⽂件的路径即可getshell。
场景⼆:后端PHP代码检查Content-type字段
在该场景下,防御的姿势是通过js代码对上传⽂件请求的Content-type字段进⾏检查,如果不是image/jpeg则不允许上传⾄后台
绕过⽅式:
将上传⼀句话⽊马⽂件的request包进⾏拦截,添加或修改Content-type字段为image/jpeg
场景三:代码⿊名单判断.asp|.aspx|.php|.jsp后缀
在该场景下,防御姿势是通过后台代码对上传的⽂件后缀进⾏判断,如果是.asp|.aspx|.php|.jsp这四个后缀的⽂件则不允许上传绕过⽅式:
当apache的配置⽂件f中存在如下配置时:
AddType application/x-httpd-php .php .phtml .phps .php5 .pht
说明可以通过上传.phtml|.phps|.php5|.pht这些后缀名的⽂件,且他们都会被解析称后缀为.php的⽂件。所以可以尝试使⽤上
传xxx.php5这类的⽂件进⾏绕过
关于AddType命令的作⽤:
AddType 指令
作⽤:在给定的⽂件扩展名与特定的内容类型之间建⽴映射
语法:AddType MIME-type extension [extension] …
AddType指令在给定的⽂件扩展名与特定的内容类型之间建⽴映射关系。MIME-type指明了包含extension扩展名的⽂件的媒体类型。
AddType 是与类型表相关的,描述的是扩展名与⽂件类型之间的关系。AddType 是与类型表相关的,描述的是扩展名与⽂件类型之间的关系。
场景四:代码扩⼤⿊名单判断
在该场景下,防御姿势是通过后台代码对上传的⽂件后缀进⾏判断,如果是
.php|.php5|.php4|.php3|.php2|.php1|.html|.htm|.phtml|.pht|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|.pHp1|
.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|
.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf
这些后缀的⽂件则不允许上传
绕过⽅式——htaccsess:
使⽤.htaccsess⽂件进⾏绕过
.htaccsess⽂件的作⽤:
.htaccess⽂件是Apache服务器中的⼀个配置⽂件,它负责相关⽬录下的⽹页配置。通过htaccess⽂件,可以实现:⽹页301重定向、⾃定义404错误页⾯、改变⽂件扩展名、允许/阻⽌特定的⽤户或者⽬录的访问、禁⽌⽬录列表、配置默认⽂档等功能IIS平台上不存在该⽂件,该⽂件默认开启,启⽤和关闭在f⽂件中配置。
.htaccsess⽂件的使⽤条件:
mod_rewrite模块开启。
AllowOverride All
构造.htaccess⽂件,内容如下:
AddType application/x-httpd-php .jpg
这⾥代码的意思可以让 .jpg后缀名⽂件格式的⽂件名以php格式解析,因此达到了可执⾏的效果。所以我们可以把要上传的php⽂件的后缀名改为.jpg格式从⽽绕过
绕过⽅式——⼤⼩写绕过:
如果在⿊名单中没有针对⼤⼩写进⾏限制,则可以进⾏⼤⼩写绕过,如将.php后缀改为.PhP|.PHP后缀
场景五:⼀些复合判断
在该场景下,防御姿势除了基本的⿊/⽩名单外,还包括了对⼀些特定字符的限制,具体情况可以进⾏fuzz或者有条件可以进⾏代码审计
空格、点绕过(windows)
当接收⽂件时,后台代码的限制条件中没有去除⽂件名⾸尾的空格(或是没有对.进⾏拆分)时,可以利⽤windows系统的命名规则进⾏绕过:如,将⽂件后缀改为xxx.php、xxx.php.、xxx.php .
在windows下xx.jpg[空格] 或xx.jpg.这两类⽂件是不允许存在的,若这样命名,windows会默认去除空格或点
还有些情况具体就需要看代码逻辑,⽐如如果代码只删除⼀次点且只去除⼀次⾸尾空格,在windows环境下就可以⽤xxx.php. .进⾏绕过
::$DATA绕过(windows)
::$DATA绕过同样利⽤了windows的特性
NTFS⽂件系统包括对备⽤数据流的⽀持。这不是众所周知的功能,主要包括提供与Macintosh⽂件系统中的⽂件的兼容性。备⽤数据流允许⽂件包含多个数据流。每个⽂件⾄少有⼀个数据流。在Windows中,此默认数据流称为:$ DATA。
即在php+windows的环境下,如果⽂件名+::$DATA会把::$DATA之后的数据当成⽂件流处理,不会检测后缀名,且保持::$DATA之前的⽂件名。
双写绕过
当防御的代码中存在将某些特定后缀进⾏空字符替换时(如利⽤str_ireplace函数将.php|.jsp等后缀替换为空字符)
这时候可以将后缀双写,即将php改成pphphp
%00截断
00截断绕过⽅式需要满⾜以下条件
php版本⼩于5.3.4
php.ini的magic_quotes_gpc为OFF状态
使⽤move_uploaded_file函数且参数受⽤户控制
此时move_uploaded_file函数遇到0x00会截断
可以将上传⽂件后缀改为xx.php%00进⾏绕过
%0a绕过
%0a绕过⽅式需要满⾜以下条件
Apache httpd 2.4.0⾄2.4.29
FileMatch正则匹配.php|.php5等后缀
该版本apache会通过$匹配后缀,⽽$匹配时会正则匹配某字符串结尾或以换⾏符结尾的⼀个字符串,即php[换⾏符]会被匹配
成php
可以将上传⽂件后缀改为xx.php%0a进⾏绕过
图⽚马绕过
window的cmd命令制作图⽚马
copy 1.jpg /b + shell.php /a shell.jpg
或是利⽤其他图⽚马⽣成器⽣成
⼆次渲染绕过
判断图⽚格式后⽤image函数进⾏⼆次渲染
绕过⽅式:
抓包到⼆次渲染中未被改动的地⽅,将⼀句话马插⼊该地⽅,.jpg|.png|.gif三种⽂件格式不同,所以构造马的⽅式也不同
注:gif⽂件最简单,直接⽤ue等16进制编辑器就可以改,但是jpg和png需要特殊的构造脚本
先将⼀张正常的jpg图⽚上传,上传后将服务器存储的⼆次渲染的图⽚保存下来。
将保存下来经过服务器⼆次渲染的那张jpg图⽚,⽤此脚本进⾏处理⽣成payload.jpg
然后再上传payload.jpg
条件竞争
当上传⽂件逻辑为:先move_uploaded_file函数将上传⽂件临时保存,再进⾏判断,如果不在⽩名单⾥则unlink删除,在的话就rename重命名。此时会存在条件竞争
绕过⽅法:
⽤burp开启两个intruder模块,⼀个⽤于重复上传,另⼀个⽤于重复访问。会有⼀定记录返回执⾏结果
/.绕过
当move_uploaded_file函数参数可控时,可以尝试/.绕过,因为该函数会忽略掉⽂件末尾的/.,所以可以构造save_path=1.php/.,这样file_ext值就为空,就能绕过⿊名单,⽽move_uploaded_file函数忽略⽂件末尾的/.可以实现保存⽂件为.php
以上就是php安全攻防利⽤⽂件上传漏洞与绕过技巧详解的详细内容,更多关于php⽂件上传漏洞利⽤与绕过技巧的资料请关注其它相关⽂章!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。