[10]-文件上传漏洞-初探源码审计与Fuzz
一、初探源码审计
1.靶场测试
- 靶场环境
- Bwapp
- 漏洞类型:Unrestricted File Upload
- 等级:high
- 各种方式测试
- 直接上传webshell------失败
- 尝试修改文件后缀-----失败----说明白名单限制严格
- 文件名截断攻击-----无法利用----因为只有一个控制点(文件名),而不能控制文件存储路径
2.代码审计
代码审计关注点
- 代码逻辑性安全问题----代码逻辑是否严谨
- 函数调用足够安全问题----是否调用危险函数
代码审计流程
文件在/var/www/html
下的unrestricted_file_upload.php
文件,查看具体运行过程
可以看到,通过的是cookie
值执行相关的操作,本文选择heig
时,cookie
为2。在这种情况下,调用了file_upload_check_2()
函数进行安全性控制。
找到file_upload_check_2()
函数:在头文件中include("functions_external.php");
猜测该函数很大概率存在于functions_external.php
文件中,打开该文件,并找到该函数。从具体执行中,找到关键部分,进一步分析关键函数作用、可能存在漏洞
$file_array = explode(".", $file["name"]);
以点为分割创建一个数组$file_extension = strtolower($file_array[count($file_array) - 1]);
取数组最后一个,作为文件拓展名in_array($file_extension, $file_extensions)
判读上传的文件类型是否在合法的范围内可以发现,在代码逻辑严谨性上,没有问题。进一步判断函数调用是否安全。
确定核心函数:其中
array()
第三个参数没填,松散匹配,存在安全威胁,但在实现文件上传漏洞时,该安全级别比较低(威胁小)。审计结果分析
通过审计发现,无法同时满足以下两个条件:
- 上传的文件名类型为
jpg/png
- 存储的文件名类型为
php/php3
等类型因此,该文件上传漏洞本身无法直接利用
拓展----漏洞链
漏洞之间联合调用,利用图片马(包含一句话木马的jpg文件)
上传后,再利用文件包含漏洞
,从而完成渗透。
文件包含漏洞
:把不可执行文件,变成可执行文件,后续会详细讲解
二、初探Fuzz----自动化测试
1.Fuzz简介
Fuzz定义
自动化/半自动化测试
核心思想:自动/半自动的生成批量/随机化的数据,输入到程序中,进而挖掘程序存在的漏洞Fuzz简单利用----BurpSuit
环境:
- 靶场:bwapp
- 等级:medium
- 漏洞:Unrestricted File Upload
先上传
shell.php
,发现无法成功,在BurpSuit中找到对应post请求,右击选择send to intruder
发送后,进入
Intruder
菜单内,选择Positions
即位置(入侵/测试的点),在需要做Fuzz
的点,用§
(注意,该符号并不是"$"符)框起来就可以了。本文做Fuzz
的点只在文件名后缀处,所以应该按照如下方式:
接下来,选择
Payloads
载荷,导入或者手动添加样例,添加完成后,点击Start attrack
即可
在返回结果中,看到不同的结果,比对返回数据报不同长度的不同结果得知每一种长度大概率的意义,如:13845可能就是失败,13786可能就是文件已存在但成功绕过。当然,这种根据长度来判断的并不绝对(部分情况存在所有情况,无论成功或者失败长度都一致的,CTF中),此时可以自写脚本,进一步判断一些关键字。
2.Fuzz注意
- 使用场景
Fuzz多用于非生产环境,生产环境中使用要十分慎重- 实战注意
- Fuzz会产生大量异常输入,未经人工分析,可能造成生产环境崩溃
- Fuzz过程会产生大量载荷,可能会对生产环境造成影响
- 安全监测过程容易触发警报,进而为后续安全检测制造障碍
三、防御措施
1.文件类型检测
- 优先使用白名单
- 黑名单安全风险高
2.函数编程
- 使用安全的函数编程
- 代码逻辑严谨
3.环境部署
- 熟悉业务部署环境的OS配置
- 熟悉业务环境部署等等Web Server的配置
本文来自博客园,作者:缪白(Miubai),转载请注明原文链接:https://www.cnblogs.com/Miubai-blog/articles/17084268.html