任意文件上传漏洞的概念和危害
-
概念
任意文件上传漏洞(Arbitrary File Upload Vulnerability)是一种常见的网络安全漏洞,通常存在于Web应用程序中。这种漏洞允许攻击者将恶意文件上传到Web服务器,从而可能导致服务器受到攻击或被入侵。
攻击者利用任意文件上传漏洞的步骤通常如下:
- 找到漏洞点:攻击者首先需要找到目标网站或Web应用程序中的文件上传功能,并确定是否存在安全漏洞。
- 上传恶意文件:一旦发现存在漏洞,攻击者可以利用该漏洞来上传包含恶意代码的文件。这些文件可能是恶意脚本、后门程序、木马等,用于进一步攻击目标系统或获取敏感信息。
- 执行恶意代码:上传成功后,攻击者可以通过触发上传的文件来执行其中包含的恶意代码。这可能会导致服务器被入侵、敏感数据被窃取、系统被控制等危险后果。
-
危害
- 执行恶意代码:攻击者可以上传包含恶意代码的文件,如Webshell(Web后门),以获取对目标服务器的完全控制。一旦上传成功并执行,攻击者就可以执行任意系统命令、访问敏感数据或者利用服务器作为跳板进一步攻击其他系统。
- 篡改网站内容:攻击者可以上传包含恶意内容的文件来篡改网站的页面,显示虚假信息、恶意链接或者欺骗用户输入敏感信息。
- 敏感信息泄露:攻击者可以上传包含敏感信息的文件,如数据库备份文件、配置文件等,导致敏感信息泄露。
- 服务拒绝:攻击者可以上传大型文件或者大量文件,导致服务器资源耗尽,服务拒绝给合法用户提供服务。
- 绕过权限控制:攻击者可以上传包含用户权限或者访问控制规则的文件,绕过应用程序的权限控制机制,获取未经授权的权限。
- 劫持用户会话:通过上传包含恶意脚本的文件,攻击者可以获取用户的会话标识,从而劫持用户的会话并进行进一步攻击或欺骗。
任意文件上传漏洞的修复方式
- 输入验证和过滤:在服务器端对用户上传的文件进行输入验证和过滤,确保只允许上传可信文件类型,并拒绝上传具有恶意或非法文件扩展名的文件。可以使用白名单和黑名单机制来限制上传文件的类型。
- 文件类型检查:对上传的文件进行严格的文件类型检查,可以通过检查文件的魔术数字(magic number)、文件扩展名等方式来验证文件的类型是否符合预期。
- 文件内容检查:对上传的文件内容进行检查,确保不包含恶意代码或恶意内容。可以使用反病毒软件或文件内容检测工具来扫描上传的文件,检测其中是否包含恶意代码。
- 文件权限控制:确保上传的文件存储在安全的目录中,并设置适当的文件权限,以防止恶意用户通过上传恶意文件获取对服务器的访问权限。
- 隔离上传文件:将用户上传的文件与应用程序代码和其他系统文件隔离开来,确保上传的文件不会影响到应用程序的正常运行或系统的安全性。
- 文件重命名:在保存上传文件时,将文件重命名为随机生成的唯一文件名,以防止恶意用户上传同名文件覆盖系统文件或执行攻击。
- 沙箱动态监测:使用沙箱技术,将上传的文件在受控环境中进行动态监测和分析。通过模拟执行环境,监测文件是否包含恶意代码、恶意行为或者不良影响,并且在检测到可疑行为时采取相应的防御措施,如拒绝文件上传或者将文件标记为不安全。
- 安全编码实践:开发者应该遵循安全编码实践,如最小特权原则、避免使用不安全的函数和库、定期更新和修补软件等,以降低漏洞被利用的风险。
图片马制作方式
-
使用文本方式打开,在末尾粘贴一句话木马
-
在cmd中输入命令
copy 1.jpg/b+2.php 3.jpg
-
/b是二进制形式打开
-
/a是ascii方式打开
-
-
16进制打开图片在末尾添加一句话木马
-
Photoshop打开
注意:
- 单纯的图片马并不能直接和蚁剑连接,因为该文件依然是以image格式进行解析,
- 只有利用文件包含漏洞(在代码中引入其他文件作为php文件执行时,未对文件进行严格过滤,导致用户指定任意文件,都作为php文件解析执行)才能成功利用该木马
upload-labs题解
upload-labs靶机包含漏洞类型分类:
如何判断上传漏洞类型?
-
Pass-01
前端校验文件名是否安全。绕过方法:禁用javascript,或者上传白名单后缀文件,burp捉包修改为对应服务器能够解释的文件后缀。
-
Pass-02
后端校验文件类型是否为image/jpeg、image/png、image/gif。绕过方法:修改Content-Type: application/octet-stream为Content-Type: image/jpeg即可。
-
Pass-03
上传php其他后缀名
-
Pass-04
上传.htaccess文件
-
Pass-05
文件后缀大小写绕过
-
Pass-06
空格绕过:利用Windows对“文件名中空格会被作为空处理”的特性,程序检测后缀名.php ,空格会自动删除。
-
Pass-07
.号绕过:
-
Pass-08
::$DATA绕过(特殊符合不能成功新建)文件名+“::$DATA”会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名。如:“phpinfo.php::$DATA” windows会自动处理末尾的::$DATA 变成“phpinfo.php” 。
-
Pass-09
.空.绕过
-
Pass-10
双写绕过
-
Pass-11
白名单限制,$_GET[‘save_path’]路径可控。GET:通过%00截断,上传文件
-
Pass-12
白名单限制,$_POST[‘save_path’]路径可控。POST:通过HEX改值为php+00截断,上传文件
-
Pass-13
文件包含,上传图片马
-
Pass-14
文件包含,检查图片的长宽高。通过copy 1.jpg/b + 2.php/a shell.jpg,新建图片马
-
Pass-15
文件包含,检查图片的长宽高。通过copy 1.jpg/b + 2.php/a shell.jpg,新建图片马
-
Pass-16
文件包含,二次渲染。上传大图片马,使其在服务器中二次渲染,获取下载并对比二次渲染后的图片马特征。挑选未被渲染的地方,插入payload。
-
Pass-17
条件竞争,
<?php fputs(fopen('shell.php','w'),'<?php eval($_POST[x]);>');?>
-
Pass-18
Apache解析漏洞+条件竞争
-
Pass-19
文件名可控,黑名单绕过,使用shell.php.绕过黑名单上传
-
Pass-20
白名单限制,检查MIME和后缀名。
-
Pass-21