文件上传危险系数极高,后台未对用户上传的文件进行验证或过滤不严谨,导致用户上传了可执行脚本文件,通过对脚本构造恶意的攻击代码,从而获取webshell,进一步对该网站服务器渗透、提权,最终导致服务器沦陷
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="uploadedFile">
<input type="submit" value="上传">
</form>
在上述例子中,如果服务器端未正确验证上传的文件类型和内容,攻击者可以上传包含恶意代码的文件,如包含 PHP 代码的文件,从而导致远程代码执行。
javascript验证文件后缀,可通过审计源代码看到
绕过方法:抓包修改提交文件后缀、禁用网页javascript
以下验证及绕过全部来自于靶场——upload-labs
只禁止上传的脚本格式:.asp/.php/.jsp/.aspx/.cgi/.war
等等
绕过方法:
上传其他格式的能够解析的后缀,例:.php3
.php5
,前提是得在apache配置文件添加,使服务器能够解析
网站代码没有做大小写转换,.PHp
就能绕过
代码没写去空格,抓包在.php
结尾加个空格就能上传,因为数据包格式审查严格,空格也会上传
高版本php不可用
.
代码没写去.
,抓包在.php.
结尾加个.即可,windows会自动删除,只用来绕过代码黑名单
代码没写去::$DATA
抓包在.php
结尾加::$DATA
即可。
条件:
代码必须在windows中,windows特性,会把::$DATA
后的数据当成文件流处理,不会检测后缀
代码将检测到包含php等存在于黑名单中的后缀名替换为空,例a.php替换为a.
如果是一次循环的话,双写即可绕过,例a.pphphp
,如果是循环过滤就不行了
只允许上传的脚本格式:.jpg/.png/.zip/.rar/.gif …
绕过方法:
作用:描述内容类型标准,web通常用这个来确定如何处理URL,配置不正确会导致无法解析文件内容
出现在数据包的Content-Type
位置
常见的 MIME 类型
不同的后缀文件用记事本打开后,显示的内容不同
适用于5.3php以下版本,代码中有取GET请求做参数,可在GET参数后加1.php%00
截断后面的代码
将图片以16进制打开,添加代码,添加完毕图片要能正常打开,制作完毕
上传后需要配合文件包含漏洞执行,上传的图片不能太大
代码会先上传再进行二次渲染、判断格式,所以一直上传文件,一直刷新页面,把文件卡住,不让进行接下来的操作
当网站强制修改上传名字为:upload-19.jpg
绕过方法
upload-19.php%00.jpg %00截断
upload-19.php/. 以文件夹方式命名
当该网站能上传图片,先准备一个.png结尾的文件,再选择记事本打开,添加webshell,上传成功后访问图片路径,路径后面随便加个文件名即可运行代码
例:127.0.0.1/var/www/1.png
/1.php
只需要在图片路径后跟/.php
即可测试当前网站存不存在这个漏洞
.htaccess解析
必须是apache搭建的网站才能用
创建一个名为`.htaccess`的配置文件,上传后当前目录下的所有文件都将优先匹配这个文件
里面写入
匹配文件名为abc
Sethandler application/x-httpd-php 切换MIME类型,将文件解析为php文件
再创建abc.jpg,上传后访问abc即可
ckeditor
fckeditor
kindeditor
xxxxeditor
后端验证
后缀检测
MIME检测
内容检测
文件头、完整性