学习记录-文件上传解析漏洞

学习记录-文件上传解析漏洞

注:本文章仅用于学术交流,不用于其它用途,不足之处,大佬多多指出

一、实质
通过绕过前后端的限制,上传文件,文件含有木马威胁,可配合解析等其它漏洞绕过,一般可以写一句话木马拿到webshell,通过工具操作如菜刀等

二、基础知识
1)简单概念
weshell:web权限
getshell:获取权限
被动shell:注入木马后,木马主动连接攻击者
正常shell:注入木马后,攻击者主动连接木马
小马:注入木马后,攻击者用工具连接,攻击者没写攻击代码
大马:注入木马后,木马文件含有大量的攻击代码,不需要使用工具,简单连接就可以攻击

2)图片码的制作方法
第一种,通过cmd命令制作
图片码制作cmd执行: copy a.jpg/b + 1.php 123.jpg 将php和a.jpg以数据流的方式结合成123.jpg图片(如果是藏东西,可以将1.txt压缩为1.zip,因为直接执行图片有乱码有影响,然后执行命令cp a.jpg/b + 1.zip 123.jpg 获取的123.jpg改为zip就可以解压看到1.txt了)

第二种图片上修改
直接用软件打开图片,在hex上直接修改木马语句

3)怎么判断是上传是黑白名单机制或前端限制
输入php文件被拦截,输入随便结尾的文件如1.a上传成功那就是黑名单,上传失败那就是白名单,如果抓包发现没流量直接被拦截就是前端限制

4)CGI解析漏洞
使用范围:php
web容器:Nginx、IIS等
实质: a/b/c.png/.php 从左到右遍历文件,找到了文件c.png,然后解析发现是php结尾,所以将c.png以php得方式解析

5)IIS6.0解析漏洞
1.默认设置是允许.asa .cer .cdx作为asp文件解析(可以针对黑名单尝试,然后使用菜刀去连接获取webshell)

2.特使符号解析出先问题,两种方式test.asp;xxx.jpg test.asp/xxx.jpg 都会以asp文件解析(使用于白名单,然后使用菜刀去连接获取webshell)

3.注意一点:判断服务器是不是IIS容器大多数可以通过404页面报错查找

6)二次渲染
本质就是不仅对上传文件检测还会对部分内容修改

7)windons系统在ntfs格式$DATA流
windons系统在ntfs格式下 cmd命令 echo xxx >> 1.txt:a.txt,将xxx写在a.txt里面然后挂载1.txt,从外面看1.txt大小为0kb,用命令dir看不出来,加参数dir /R 可以看到,打开方式cmd命令:notepad 1.txt:a.txt 可以打开看内容,注意一点1.txt=1.txt::$DATA,显示默认是不展示$DATA

8)php文件file_put_contents函数
file_put_contents(file,data) php脚本的函数把一个字符串写入文件中,如果文件不存在,则创建一个新文件

9)分布式配置文件.htaccess
分布式配置文件.htaccess用于目录下改变配置,功能很多可以自定义重定向、禁止ip用户等等,默认情况下是不开启的,后端黑名单很严谨基本限制了能解析的后缀,不过上传.htaccess文件里面写入让png文件解析为php就可以绕过注入木马(万一.htaccess是开启状态呢);windons系统取名.htaccess 有些系统版本取不了这个名就使用ren 1.txt .htaccess 这个名字 AddType application/x-httpd-php .png

三、绕过的方法

前端机制:
1.直接传入图片码,然后截包改文件类型上传,更简单的是直接改木马文件后缀名,然后截包修改,上传成功后获取图片地址,通过工具直接连getshell,或者url直接输入命令访问(木马建议留一句话木马)

后端黑名单机制(上传图片码,为了不受前端限制和检测图片头部的限制,然后想办法绕过后端其它限制):
1)若仅检测Content-Type字段
上传图片码,截包修改后缀名(很少)

2)未对后缀名覆盖完
上传php3、php4、jspx等后缀名

3)未限制htaccess文件(功能默认不开启,但是万一开启了呢)
上传.htaccess文件,写入AddType application/x-httpd-php .png,然后上传php文件重名为png

4)未限制大小写
除了很老版本的web容器是要区分大小写的,黑名单限制了php但是上传PHP web是区分大小的所以解析不出来,其它新版本我们可以传如PHP绕过黑名单php,但是web容器不区分大小写也是按照php解析出来达到绕过目的

5)未处理空格和点
截包修改文件名如".php 或".php.",传上去保存空格和点会被识别默认取消达到绕过目的(点仅在window后台可以用)

6)未处理$DATA
windons系统下硬盘在ntfs格式下文件都是默认::$DATA,windons解析默认不显示,如1.txt=1.txt::$DATA可以尝试利用这个绕过,后台为window系统然后黑名单未限制,可以传入文件后缀加上如1.php::/$DATA可以传入过去被解析为1.php

7)未循环处理空格和点
截包修改文件后缀名,可以构造". ." 点空点这种尝试绕过

8)发现黑名单的文件直接置空,但是没有循环处理
截包修改文件后缀名,可以尝试构造如pphphp绕过,后端没循环直接从左到右发现php置空,结果未php从而绕过

9)若存在IIS6.0漏洞
默认设置是允许.asa .cer .cdx作为asp文件解析,直接上传这些后缀名的木马文件,然后使用菜刀去连接获取webshell

后端白名单机制(上传图片码,为了不受前端限制和检测图片头部的限制,然后想办法绕过后端其它限制;白名单大多数都是利用其它漏洞达到绕过目的):
1)若截包发现有保存路径字段或保存文件名字段
若截包发现有保存路径字段,一般情况下都是在url,使用00截断可以绕过,需要%作为十六进制的标识,适用于window系统后台如在url保存路径后新增1.php%00,上传图片码以php解析

若截包发现有保存文件名字段,使用00截断可以绕过,不过这里需要hex里修改,通过a对应61hex标识修改未00,新增1.phpa然后通过hex修改a为00,上传图片码以php解析,适用于window系统后台

2)若存在CGI漏洞
上传1.jpg图片码,url访问后面加上/.php结果为1.jpg/.php达到绕过目的;若后端会二次渲染对上传文件进行修改;上传gif图片后与原图对比,查看未被修改得部分,通过修改hex注入木马,结合CGI漏洞达到绕过目的

3)若文件先上传,后检测逻辑
文件上传分为先检测–后上传和先上传–后检测,如果是先上传,利用这段间隙创建一个木马文件,这个也叫条件竞争,可以用php脚本的函数file_put_contents(file,data)如:<?php file_put_contents('10.php','<?php @eval($_REQUEST[1]); ?>’); ?> 创建一个10.php木马文件,这里建议用burp工具去跑,设置的时候访问频率应小于上传频率

4)若存在IIS6.0漏洞
特殊符号使解析出问题,两种方式test.asp;xxx.jpg test.asp/xxx.jpg 都会以asp文件解析,然后使用菜刀去连接获取webshell

猜你喜欢

转载自blog.csdn.net/SmileAndFun/article/details/108320741