文件上传漏洞小总结
欢迎查看upload-labs writeuphttps://www.cnblogs.com/Qi-Lin/p/11296761.html
前端绕过
绕过js,通过bp中的proxy中的option中的选项移除掉javascript脚本,或者通过直接在浏览器中删除掉js
绕过mime-type
mime是多用途互联网邮件扩展类型,用于设定某扩展名文件的打开方式,如.png在数据包的中的content-type为image/png,所以可以通过bp截断绕过
绕过黑名单
黑名单没有白名单安全,可能有遗漏
- php可以改为php3,php4,php5,phtml上传
- .htaccess绕过,.htaccess是apache服务器中的一个配置文件,可以实现301重定向,自定义404错误页面,改变文件扩展名,阻止或允许用户访问特定目录或文件等。可以将.htaccess的内容写入sethandler application/x-httpd-php,这可以设置当前目录所有文件都用php解析。不过对应http.conf中allowoverride 应设置为all
- 大小写绕过,只适用于windows,windows大小写不敏感
- 空格绕过,windows中文件扩展名后的空格会做空处理
- 点号绕过,windows下最后一个.会被自动剔除
- 特殊符号绕过,windows下,如果上传的文件名后缀为php::$DATA会在服务器生成后缀为Php的文件,内容和上传内容相同,并被解析
- 组合绕过,如1.php空格.
- 如果上传大小有限制可以先上传小文件,然后利用小文件上传大文件
- 如果代码是对黑名单进行空替换,可以利用双写绕过
绕过白名单
在系统对文件名读取时,如果遇到0x00会认为读取结束,如:1.php0x00.jpg在上传时认为是jpg,但在新建该文件文件时保存为1.php
但在php5.3之后的版本已经修复,并且受gpc,addslashes函数影响
-
get型截断
-
post截断
图片webshell
当服务端是对会对上传文件的内容进行检测时,可以利用图片进行上传
利用图片的webshell需要利用文件包含漏洞,这是因为在php中使用include,include_once,require,require_once函数包含的文件无论文件名称是什么都会被当做php代码执行
-
可以上传图片,利用bp截断后,在图片内容后附上一句话木马等
-
可以在代码中加入相关字符,如简单的为:
GIF98A
<?php
phpinfo()
?>
- 也可以利用隐写将木马追加到图片结束符后
利用竞争条件上传
- 文件上传后是先保存为一个临时文件,然后再重命名保存文件,如果网站允许上传任意文件,可能检查上传文件是否包含webshell,如果包含就删除,使用unlink删除文件。也可能发现不是指定类型,就使用unlink删除。所以,如果在删除之前访问上传的文件,就会执行文件中的代码
- 例如:在文件中写入如下代码 ,此文件在执行时,新建一个shell.php的文件包含木马
<?php
fputs(fopen('shell.php',w),'<?php @eval($_post["pass"]) ?>');
?>
- 在上传时不断发送http请求,请求该文件,可以利用一个python脚本如:
import requests
while true:
requests.get("路径")
解析漏洞相关
iis6.0解析漏洞
- 当建立*.asa, *.asp命名的文件夹时,目录下的所有文件都被当做asp文件解析
- .asp;.jpg .php;.jpg等命名的文件时,被当做asp,php等文件解析
如下利用bp截断后修改上传保存的目录,上传成功后,会在该目录uploadimg下生成1.php;文件夹,并在uploadimg文件夹下保存上传的文件,可能如1.php;1.jpg
apache解析漏洞
- 一些原理文章文章1和文章2
- 解析文件时,对于每种后缀采用对应的解析,如果没有,则采用前一个,比如对于文件1.php.jpg,如果不能解析.jpg则会采用.php对文件进行解析
所以可以采用这种特性绕过限制 - .htaccess绕过,.htaccess是apache服务器中的一个配置文件,可以实现301重定向,自定义404错误页面,改变文件扩展名,阻止或允许用户访问特定目录或文件等。可以将.htaccess的内容写入sethandler application/x-httpd-php,这可以设置当前目录所有文件都用php解析。
所以可以先上传一个.htacess文件,文件内容为sethandler application/x-httpd-php,之后上传允许上传的格式的木马即可
iis put上传漏洞
iis有一个模块webdav。webdav是基于http1.1协议的通信协议,使得http支持put move copy delete方法。当服务器开启webdav,并有写入权限时,可能存在该漏洞。
探测
1、通过更改bp的数据包探测是否存在iis put漏洞,更改发送的数据包头options/http1.1 如果返回200说明存在
2、也可以通过kali中的nikto探测,nikto -h ip
利用方法
1、构造数据包,上传txt文本文件
put /a.txt http1.1
content-length:30
<%eval request()%>
2、构造数据包通过move或copy重命名文件为可执行文件
如copy /a.txt http1.1
host:
dstination:http://.../*.asp
fck编辑器
看到的一篇很好的相关总结
查看版本
editor/dialog/fck_about.html
/_samples/default.html
/_whatsnew.html
根据版本查找上传点(其实编辑器本身也有上传点)
如v2.6.6为
/editor/filemanager/connectors/test.html
/editor/filemanager/connectors/uploadtest.html
采用绕过办法时
如希望新建一个1.asp的文件夹,它会把点转换为下划线,所以可以在上传的时候,指定一个这样的新的文件夹,只会进行一级检测