0x00 前言

   无

  0x01 windows文件流特性

   NTFS文件系统实现了多文件流特性,NTFS环境一个文件默认使用的是未命名的文件流,同时可创建其他命名的文件流,Windows资源管理器默认不显示出文件的命名文件流,这些命名的文件流在功能上和默认使用的未命名文件流一致,甚至可以用来启动程序。创建一个数据交换流文件的方法很简单,命令为“宿主文件:准备与宿主文件关联的数据流文件”。

我们可以通过上传添加了默认文件流的文件如 xxx.php::$data 来实现绕过后缀名检测

  0x02 %00截断绕过

  字符串截断绕过属于编码绕过的一类
  我们看下如下代码:

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传失败";
        }
    } else {
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

  可以看出代码采用的白名单校验,只允许上传图片格式,但是在后面的代码中可以看出路径是通过拼接的方式生成的,路径又是从前端获取到的,所以我们可以采用路径截断的方式进行绕过比如:

1.设置save_path=../upload/a.php%00
2.上传一个内容为一句话木马的jpg文件

我们使用的是bWAPP靶场的文件上传漏洞的low

点击收起


首先我们先上传一个我们准备一个shell.php的文件并复制一份将文件名改为shll.php.jpg

然后我们上传.jpg的那个shell文件可以看到成功上传了

可以看到,此时的当前文件目录中是没有shell.php文件的
下面我们来进行%00截断绕过操作
首先我们用BrupSuite进行抓包然后在需要截断的地方加个空格方便我> 们在十六进制中定位

在来到Hex找到那个位置 空格的十六进制是20 我们将其改为00

然后在发送该数据包,你会发现在images文件夹中多了个shell.php文件而不是我们上传的shell.php.jpg文件

注意:%00截断绕过需要我们可以分别控制存储路径文件名称这样我们才可以实现通过文件名称校验的同时存储为php文件

  0x03 文件头检测绕过

  在部分情况下,有些网站对文件内容进行了检测,这时单纯的修改文件名就不起作用了
下面介绍绕过这种检测的方式
  首先给出常见图片的文件头格式

  可以看到其中第一行开头都是各种图片格式的头部
  我们可以通过101Editor来将PHP代码写入到图片中如:

  然后进行上传绕过即可

Last modification:December 1st, 2020 at 03:35 pm
如果觉得我的文章对你有用,请随意赞赏