[10]-文件上传漏洞-初探源码审计与Fuzz

一、初探源码审计

1.靶场测试

  1. 靶场环境
    • Bwapp
    • 漏洞类型:Unrestricted File Upload
    • 等级:high
  2. 各种方式测试
    • 直接上传webshell------失败
    • 尝试修改文件后缀-----失败----说明白名单限制严格
    • 文件名截断攻击-----无法利用----因为只有一个控制点(文件名),而不能控制文件存储路径

2.代码审计

  1. 代码审计关注点

    • 代码逻辑性安全问题----代码逻辑是否严谨
    • 函数调用足够安全问题----是否调用危险函数
  2. 代码审计流程
    文件在/var/www/html下的unrestricted_file_upload.php文件,查看具体运行过程
    image-20230201200910809
    可以看到,通过的是cookie值执行相关的操作,本文选择heig时,cookie为2。在这种情况下,调用了file_upload_check_2()函数进行安全性控制。
    找到file_upload_check_2()函数:在头文件中include("functions_external.php"); 猜测该函数很大概率存在于functions_external.php文件中,打开该文件,并找到该函数。

    image-20230201201937385

    从具体执行中,找到关键部分,进一步分析关键函数作用、可能存在漏洞

    • $file_array = explode(".", $file["name"]); 以点为分割创建一个数组
    • $file_extension = strtolower($file_array[count($file_array) - 1]); 取数组最后一个,作为文件拓展名
    • in_array($file_extension, $file_extensions) 判读上传的文件类型是否在合法的范围内

    可以发现,在代码逻辑严谨性上,没有问题。进一步判断函数调用是否安全
    确定核心函数:

    其中array()第三个参数没填,松散匹配,存在安全威胁,但在实现文件上传漏洞时,该安全级别比较低(威胁小)。

  3. 审计结果分析
    通过审计发现,无法同时满足以下两个条件:

    • 上传的文件名类型为jpg/png
    • 存储的文件名类型为php/php3等类型

    因此,该文件上传漏洞本身无法直接利用

  4. 拓展----漏洞链
    漏洞之间联合调用,利用图片马(包含一句话木马的jpg文件)上传后,再利用文件包含漏洞,从而完成渗透。
    文件包含漏洞:把不可执行文件,变成可执行文件,后续会详细讲解

二、初探Fuzz----自动化测试

1.Fuzz简介

  1. Fuzz定义
    自动化/半自动化测试
    核心思想:自动/半自动的生成批量/随机化的数据,输入到程序中,进而挖掘程序存在的漏洞

  2. Fuzz简单利用----BurpSuit
    环境:

    • 靶场:bwapp
    • 等级:medium
    • 漏洞:Unrestricted File Upload

    先上传shell.php,发现无法成功,在BurpSuit中找到对应post请求,右击选择send to intruder
    image-20230201210309024

    发送后,进入Intruder菜单内,选择Positions即位置(入侵/测试的点),在需要做Fuzz的点,用§(注意,该符号并不是"$"符)框起来就可以了。本文做Fuzz的点只在文件名后缀处,所以应该按照如下方式:
    image-20230201211208030

    接下来,选择Payloads载荷,导入或者手动添加样例,添加完成后,点击Start attrack即可
    image-20230201212539681

    在返回结果中,看到不同的结果,比对返回数据报不同长度的不同结果得知每一种长度大概率的意义,如:13845可能就是失败,13786可能就是文件已存在但成功绕过。当然,这种根据长度来判断的并不绝对(部分情况存在所有情况,无论成功或者失败长度都一致的,CTF中),此时可以自写脚本,进一步判断一些关键字。
    image-20230201213049997

2.Fuzz注意

  1. 使用场景
    Fuzz多用于非生产环境,生产环境中使用要十分慎重
  2. 实战注意
    • Fuzz会产生大量异常输入,未经人工分析,可能造成生产环境崩溃
    • Fuzz过程会产生大量载荷,可能会对生产环境造成影响
    • 安全监测过程容易触发警报,进而为后续安全检测制造障碍

三、防御措施

1.文件类型检测

  1. 优先使用白名单
  2. 黑名单安全风险高

2.函数编程

  1. 使用安全的函数编程
  2. 代码逻辑严谨

3.环境部署

  1. 熟悉业务部署环境的OS配置
  2. 熟悉业务环境部署等等Web Server的配置
posted @ 2023-02-01 21:56  缪白(Miubai)  阅读(196)  评论(0编辑  收藏  举报