一、漏洞原理
1、未过滤或web前端过滤被绕过
2、文件检测被绕过
3、中间件解析
4、不完善的黑名单拓展名
5、文件路径截断
6、HTTP不安全方法(PUT协议)
二、漏洞触发点
说明 | |
---|---|
存在漏洞的网站类型 | 存在文件上传功能的网站皆有可能出现文件上传漏洞 |
常见存在漏洞的位置 | 头像、相册上传 ;视频、照片分享 ;论坛发帖、留言、邮箱附件上传 ;添加文章图片 ;编辑器文件上传 ;后台添加模板等 |
三、利用条件
1、服务器开启文件上传功能
2、用户对目录拥有读写权限、执行权限
3、web容器可以以指定格式解析上传的文件(如php站点以php方式解析任意含马文件)
4、服务器配置不当(开启PUT方法)
使用前提
1、文件名后缀必须符合当前网站的开发语言类型
2、确保内容正确,有且只有一个语法标签,如
3、知道文件路径
文件上传漏洞分类
类型 | 说明 |
---|---|
任意文件上传 | 无限制 |
前端限制 | js、标签等 |
后端限制 | 文件名后缀 MIME-type类型 文件内容 |
解析漏洞 | iis、nginx、apache、tomcat |
其他类型 | 00截断、put截断、修改模板等 |
判断操作系统类型
选择图片路径,改大小写,访问成功为windows、失败为linux
四、绕过方式
waf类型 | 说明 | 方法 |
---|---|---|
前端验 证 | 上传.xxx文件,抓包,若未抓包边被拦截,即为前段验证。 | 1、禁用js(不推荐) 2、bp抓包改文件名后缀 |
后端验证 | 分别修改文件名后缀、文件类型和文件内容,观察哪一次修改被拦截,即为哪种验证 | |
文件类型检测 | MIME,描述消息内容类型的因特网标准 Content-Type: .js -> application/x-javascript .html -> text/html .jpg -> image/jpeg * .png -> image/png .pdf -> application/pdf |
常用类型:image/jpeg |
后缀名检测 | 黑白名单 上传.xxx文件,通过即为黑名单,不通过为白名单 常见黑名单后缀 php:”.php”,”.php5”,”.php4”,”.php3”,”.php2”,”php1”,”.html”,”.htm”,”.phtml”, jsp:”.jsp”,”.jspa”,”.jspx”,”.jsw”,”.jsv”,”.jspf”,”.jtml”,”.jSp”, asp:”.asp”,”.aspx”,”.asa”,”.asax”,”.ascx”,”.ashx”,”.asmx”,,”.cEr”,”.sWf”,”.swf” | 黑名单绕过 1、大小写绕过 linux中,centos6搭载默认apache2.2时可绕过 windows可以绕过 2、黑名单不全绕过 php:.php3、.phtml asp:.cer、.asmx 3、windows系统特性绕过 a.php. a.php (空格) a.php:1 a.php::$DATA |
内容检测 | 会检测图片流数据前n位,判断文件类型、大小等。 | 制作图片马。 最好选择不含PHP、ASP、ASP等标签的图片 如果有,需要手动剔除 copy 1.jpg /b + 2.txt /a 3.jpg 将2中内容追加到1中,生成3 2中可同时写入多种一句话 |
解析漏洞 | 1、Apache解析漏洞 >多后缀 apache解析顺序从右到左,若是无法解析,则返回源码。 前提: apache1.x、2.x Apache能够识别的文件在mime.types文件可以查看 形式: a.php.xxx.yyy绕过(黑名单绕过) a.php.7z(可绕过白名单–不在apache解析目录,但是在白名单目录) >配置错误 apache配置文件可指定解析后缀类型 >.htaccess apache环境下,当上传文件未拦截.htaccess且未重命名文件时,可上传.htaccess修改apache默认配置 2、IIS6.0解析漏洞 >目录解析 形式: /xx.asp/xx.jpg 原理: 在网站下创建文件夹名字为.asp、.asa的文件夹,其目录内的任何扩展名的文件都被当作asp文件来解析并执行。 >文件解析 形式: /xx.asp;.jpg(利用特殊符号”;”) 原理: 在iis6.0下,服务器默认不解析;号后面的内容,所以xx.asp;.jpg被解析为asp脚本解析漏洞 >解析文件类型(属于黑名单绕过方式) 形式: /test.asa、/test.cer、/test.cdx 原理: iis6.0默认的可执行文件除了asp还包含这三种asa、cer、cdx,会将这三种扩展名文件解析为asp文件 3、PHP CGI解析漏洞 IIS7.0/IIS7.5/Nginx<0.8.3畸形解析漏洞 前提: 1、Fast-CGI运行模式 2、php.ini里cgi.fix_pathinfo=1(默认为1) 3、取消勾选php-cgi.exe程序的”Invoke handler only if request is mapped to” 形式:将/xx.jpg/xx.php解析为php文件 4、Nginx解析漏洞 影响版本: 0.5,0.6,0.7<=0.7.65,0.8<=0.8.37 原理: 在使用PHP-FastCGI执行php的时候,URL里面在遇到%00空字节时与FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码 形式: xxx.jpg%00.php |
>配置错误 AddHandler php5-script .php、 AddType application/x-httpd-php .jpg >.htaccess AddType application/x-httpd-php xxx 使用php解析.xxx文件 或 <FilesMatch .ccc$> SetHandler application/x-httpd-php 正则匹配.ccc后缀文件 或 <FilesMatch “shell.jpg”> SetHandler application/x-httpd-php 指定解析某个文件 |
其他类型 | ||
.user.ini | 自动文件包含,可将jpg解析为php文件,包含于php文件首部,只适用于PHP,7.3版本可用,类似于Apache配置文件.htaccess 注意:文件夹下必须有php文件才可生效 |
auto_prepend_file=x.jpg 注意,文件名必须相同,访问任意php文件即可生效 |
00截断 | 前提: 1、php版本小于5.3.4 2、php的magic_quotes_gpc为OFF状态 |
抓包 POST包: 1.php+.jpg,将+的数值改为十六进制的00 GET包: 1.php%00,存在上传路径时,也可在上传路径后用此方法截断 |
HTTP PUT方法 | 前提: 开启PUT服务 探测: telnet 192.168.139.136 80 OPTIONS / HTTP/1.1 HOST:172.16.132.161 利用: telnet 192.168.139.136 80 PUT /infoa.php HTTP/1.1 HOST: 192.168.139.136 Content-Length: 18 |
开启PUT服务: 1、开启Dav(conf配置文件)–取消注释 LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so 2、启用Dav DocumentRoot-Directory下新增DAV On 3、开启文件锁 配置文件首部新增 DavLockDB c:\phpstudy\www\DavLock 新增DavLock文件夹(上面写的路径) 重启apache服务 |
五、编辑器漏洞
常见文本编辑器
FCKeditor、Ewebeditor、Ueditor、KindEditor、XHeditor
1、FCKeditor漏洞
漏洞版本
版本 | 漏洞说明 |
---|---|
Version2.2版本 | Apache+linux环境下在上传文件后面加个.突破 |
Version<=2.4.2 | forphp上传的地方并未对Media类型进行上传文件类型的控制,导致用户上传任意文件 |
Version<=v2.4.3 | FCKeditor被动限制策略所导致的过滤不严问题较高版本FCKeditor文件上传“.”变“_”下划线 |
方法
方法 | 说明 |
---|---|
查看编辑器 | /fckeditor/editor/dialog/fck_about.html /fckeditor/_whatsnew.html |
FCKeditor中test文件的上传地址 | fckeditor/editor/filemanager/connectors/test.html fckeditor/editor/filemanager/connectors/uploadtest.html fckeditor/editor/filemanager/browser/default/connectors/test.html fckeditor/editor/filemanager/upload/test.html |
>2.4.3版本绕过 | 在fckeditor/editor/filemanager/connectors/test.html下 同时创建两个x.asp文件夹,一级目录可绕过.转义成_,从而在一级目录a.asp下上传图片马,进行解析 |
2、Ewebeditor编辑器漏洞
Ewebeidtor编辑器的默认信息
说明 | 路径 |
---|---|
默认数据库路径: | /db/ewebeditor.mdb /db/db.mdb /db/%23ewebeditor.mdb |
默认密码: | admin/admin/888或admin/admin进入后台,也可尝试admin/123456/admin888 |
系统默认: | ewebeditor.asp?id=content1&style=standards |
默认管理地址: | 2.80以前: ewebeditor/admin_login.asp; 以后版本: admin/login.aspEwebeditor |
漏洞类型
说明 | |
---|---|
1.关键文字的名称和路径 | 登录页面 Admin_Login.asp Admin_Default.asp 管理首页 Admin_UploadFile.asp Upload.asp |
2.默认用户名密码 | 账号密码基本是默认的admin/admin(admin888) |
3.下载数据库 | 默认数据库/db/ewebeditor.mdb或者/db/ewebeditor.asp |
4.文件上传 | |
5.遍历路径 | |
6.Cookie漏洞 |
利用
1、登录后台,进入样式管理,增加上传类型即可。
2、访问/admin/ewebEditor/asp/upload.asp?action=save&type=image&style=popup&cusdir=hack.asp
创建hack.asp文件夹,此文件夹下文件全部可执行
检查元素,编辑html
<form action="http://192.168.1.1/admin/ewebEditor/asp/upload.asp? action=save&type=image&style=popup&cusdir=hack.asp" method=post name=myform enctype="multipart/form-data">
<input type=file name=uploadfile size=100><br><br>
<input type=submit value=upload>
</form>
新增上传窗口,上传图片马,查看源码即可获得文件路径。