[9]-文件上传漏洞-高级绕过

一、以平台为核心的漏洞利用方式

1.Windows文件流特性绕过

  1. Windows文件流

    Windows目前使用的是NTFS文件系统
    NTFS文件系统实现了多文件流特性------一个文件可以对应多个文件流
    NTFS环境的一个文件默认使用未命名的文件流
    但,同时可以创建其他命名的文件流,并同样可以写入内容
    Windows资源管理器默认不显示出文件的命名文件流,这些命名的文件流在功能上和默认使用的未命名文件流一致,甚至可以用来启动程序

  2. 未命名文件流命名文件流测试
    采用默认文件流,输入内容

    # 写入内容:111,写入文件:test.txt,文件流:1.txt
    Echo 111 > test.txt:1.txt	 	 
    # 写入内容:test,文件:test.txt,文件流:不指定,即默认
    Echo test > test.txt
    # 写入内容:222,文件:test.txt,文件流:默认文件流
    Echo 222  > test.txt::$data	 	
    

    采用1.txt文件流时
    image-20230201134052184

    不指定文件流时,发现此时可以看到写入的内容
    image-20230201134402960

    指定使用默认文件流,发现上文写入"test"内容变更为“222”,且使用默认数据流打开,以及直接点击查看时,二者内容一致。这说明,平时使用的就是默认数据流,同时我们也可以通过手动数据流的方式,把想要写内容写到同一个文件。
    image-20230201134803429

  3. 总结
    托管在Windows平台的服务,可以利用NTFS文件流特性,完成前后端检测的绕过,并完成文件上传漏洞的利用

  4. 具体利用场景

    • 上传功能点----类型检测严格----利用NTFS文件流特性---绕过
    • Windows+PHP时,特殊效果:默认数据流背后的数据,会直接被认为是数据流写入到文件中,从而绕过检测。

2.截断绕过

  1. 白名单是否一定安全?
    前文说,黑名单存在绕过风险,但白名单也不一定是百分之百安全的。
    当,服务器程序处理上传的文件,在保存时,采用路径拼接的形式,而路径又是从前端获取的,此时就可以采用在路径上进行截断。--------路径截断

  2. 具体利用

    • 设置`save_path=../upload/a.php%00(URL编码,结尾符00%,如果不通过url传输,则不为00%)
    • 上传一个内容为一句话木马的jpg文件
  3. 利用条件及原因

    根本性原因:用户能控制两个输入点,对文件存储路径进行字符段截断攻击

    • 文件名
    • 文件存储路径(字符段截断)
  4. 测试运用
    采用bwapp靶场,选择文件上传漏洞,等级为low,开启burp拦截,然后上传一句话木马shell.php.jpg,点击上传。
    Burp对数据包进行了拦截,修改文件名为webshelll.php .jpg(即在.jpg前面添加空格,因为空格二进制为20,方便二进制定位。

    image-20230201154921585
    点击格式为Hex,最左侧定位具体文件名位置,然后找到此行二进制为20的,修改为00并输入回车即可
    image-20230201154719290
    完成后,可以返回Raw格式进行查看,确认后,点击Forward放行即可
    image-20230201155344984

    最终文件保存结果为一个php文件,文件由上传前的jpg文件变成上传后的php文件,这说明成功实现了截断攻击。
    image-20230201155643416

3.文件头检测绕过

  1. 常见文件头格式
    可以用winhex查看,具体文件头格式,可以参考:https://blog.csdn.net/Liukairui/article/details/105662668

    png格式,对应的ASCII码值是一个.png,不可打印
    89 50 4e 47
    jpg文件,不对应ASCII码,具体原因可参考:https://www.cnblogs.com/lakeone/p/3596996.html,
    jpg文件头解析:https://cloud.tencent.com/developer/article/1427939
    ff d8 ff db
    
  2. 绕过利用场景
    对于具有文件内容检测的上传功能,不能直接上传一句话木马,因为文件格式不符合要求。

  3. 具体利用
    windows系统下,使用以下命令制作图片码:

    # 准备好shell.php,其中写入一句话木马
    # 准备好test.png图片,要求文件头格式一定要对
    # 将shell.php内容写入test.png图片
    type shell.php >> test.png
    

    具体过程如下图:

    image-20230201172533379
    使用靶场,上传,我们在服务器再查看一次,发现图片码确实能成功上传。
    image-20230201175240866

  4. 注意
    对于自己寻找的图片,最好去掉不关键的内容段或大部分图片内容段都去掉,只保留头部从而去满足校验要求即可,从而实现对于文件头检测的一个绕过。

二、绕过类型总结

1.学习的类型

  1. Content-Type绕过
    文件上传里去修改一个字段的值
  2. 前端绕过
    js禁用、删除
  3. 文件解析规则绕过
  4. Windows环境特性绕过
  5. 大小写、双写、点空格、文件头、条件竞争绕过

2.收获

  1. 学习目的
  • 了解漏洞利用
  • 认知到文件上传本身并不是非常困难
  • 漏洞根本性原因:webapp实际运营并非割裂个体,前端、后端、平台、开发等等都有责任
  1. 个人收获
  • 文件上传漏洞各种绕过方式
  • 漏洞挖掘思路
  • 学习方向
posted @ 2023-02-01 18:13  缪白(Miubai)  阅读(2138)  评论(0编辑  收藏  举报