首页 > 编程知识 正文

文件上传漏洞,php登陆 漏洞

时间:2023-05-04 21:46:22 阅读:21680 作者:1014

PHP文件上传漏洞浅析。

文件上传概述

在常规网站上,有几个地方允许用户上传文件。 但是,在一些有上传功能的地方,用户没有过滤上传的内容,因此会将木马上传到服务器上并执行命令,或者控制服务器权限。

实现文件上传

前端代码。

请选择要上传的文件:

服务器端代码。 php

$_FILES文件在上载变量中接收上载文件信息

header (内容类型:文本/html; charset=utf-8 ';

$fileinfo=$_FILES['myfile'];

$filename=$fileinfo['name'];

$type=$fileinfo['type'];

$ tmp _ name=$ fileinfo [ ' tmp _ name ' ];

$size=$fileinfo['size'];

$error=$fileinfo['error'];

//判断错误编号

if($error==upload_err_ok ) {

if (move _ uploaded _ file ($ tmp _ name,' uploads/'.$filename ) ) {

echo '文件'.$filename.'上传成功';

}else{

上传echo '文件'.$filename.'失败';

}

}

以上是实现文件上传的测试代码,对文件上传没有任何限制,可以上传任意文件。 例如,上传php文件如下。

上传php文件时,将显示文件test.php已成功上传。 接下来,访问文件。

上述是理想的测试环境,可实现文件上传存在的一些漏洞。 在实际环境中,可能存在各种限制,如上载文件的黑色/白名单限制、上载后重命名文件、可写目录没有执行权限等。

然后再现phpCollab 2.5.1任意文件的上传漏洞,学习其原理。

PHP collab2.5.1- arbitrary文件上载

下载并安装相应的版本。 登录后台。 客户-客户组织-在徽标上,上传文件的位置存在任何文件上传漏洞。

在标志处可以上传任意文件。 上传php后缀文件,通过前端调试分析,可以知道上传后的文件路径和名称。

最后,您可以访问上传的文件。

漏洞位于/clients/editclient.php文件的第63至70行中。 $ extension=strtolower (substr (strrchr ) $_files('upload'('name ','.'),1 ) ); //后缀名称substr(string,start,length ) ) ) ) ) ) ) )。

if (@ move _ uploaded _ file ($ _ files (' upload ' ) ) tmp_name ),' ./logos_clients/'.$id.'.$exxid

//move_uploaded_file ()函数将上载的文件移动到新位置。

{

chmod (' ./logos _ clients/'.$ id.'.$ extension ',0666 );

$ tmp query=' update '.$ table collab [ ' organizations ' ].' set extension _ logo=' $ extension ' where id=' $ id '

connectsql ($ tmp查询);

}

代码显示,没有对上载的文件进行任何验证。 直接在move_uploaded_file中完成上载操作,并将其保存在logos_clients文件夹下。

接下来,我们将翻译有关文件上传安全测试的文章,并具体学习测试方法。

允许web APP应用程序的用户上传文件的函数可能没有严格过滤和验证上传内容,攻击者可能会利用此漏洞进行攻击。 本文概述了利用文件上传功能进行渗透测试,并介绍了一些用于筛选黑名单和绕过实用检测方法的小技巧。

查找上传点

文件上传功能非常易于验证和使用,通常位于个人信息图像、文件上传和文件导入位置。 对于平板心锁测试,Burp被动扫描还会进入验证上传功能存在的入口。

测试文件上传类型

典型的web APP应用程序提供了一个黑名单,用户可以过滤和验证上传的内容,但有时是百密的,其他扩展名可能会绕过黑名单。 另一个是白名单,

只允许用户上传特定的文件。

这个时候需要测试一下允许上传的文件后缀名。使用Burp 测试文件上传类型手工测试一个请求,该请求会收到拒绝上传此类型之类等错误响应。发送这个请求到Burp intruder模块清除其中默认的选项

选择文件上传类型的点

选择不同的文件名,比如php.jpg,asp.jpg等

在选项中,配置grep匹配在第一步中响应出现的字符串。

开始进行测试,那些没有匹配到错误响应字符串的后缀,需要进一步的验证和测试,是否可以上传成功。关键点

使用Burp Intruder测试所有的后缀,使用Grep功能处理结果

一些不常见的后缀名可能会绕过黑名单,比如.php,.php5,.phtml

使用Burp测试文件上传的Content-Type

识别那些文件上传的Content-Type能被应用程序接受

和测试上传文件后后缀一样,同样是使用Burp Intruder进行爆破。这次修改的是Content-Type字段。参考上面的7个步骤即可。关键点

使用Burp Intruder测试所有的Content-Type,使用Grep功能处理结果

尝试将Content-Type更改为支持的文件类型,但是其中包含Web服务器/Web应用程序要处理的后缀名

一些不常见Content-Type可能会绕过黑名单

文件名和扩展模糊测试

文件名和扩展应该在输入验证时测试,当文件的名字为XSS,SQLi,LDAP或者一个命令注入载荷的时候会发生什么。

还是使用Burp Intruder进行测试,原理和测试文件上传类型类似,可以参考上面的七个步骤。

文件上传黑名单绕过

Windows IIS 文件上传黑名单绕过1:配合服务器解析漏洞,在黑名单加一个分号以及正常的文件名,例如shell.asp;.jpg

2:目录解析。folder.aspfile.txt,其中asp文件夹里面的任何扩展名文件都被IIS当作asp文件来执行。

3:环境是IIS,PHP时,< > 和 . 可以转换为 ? * .

4:使用可以替换文件的字符。比如>>可以替换 web.config

5:尝试在文件名后面使用空格或点。比如 foo.asp…. .. . . . .

6:file.asax:.jpg

7:尝试在文件名中加入禁止的字符,| %< * ? “,来得到错误信息。

Windows Apache 环境黑名单绕过1:Windows8.3 一个特征允许短文件名替换已经存在的文件。比如web.config可以被web~config.con替代,或者.htaccess可以被HTACESS~1替代。

2:尝试上传a.file,如果上传函数的根目录在www/uploads,将会创建一个uploads文件在上述目录。

其他绕过技术1:确定那些字符被过滤了。使用Burp在特定位置插入元字符表。

2:确保你的列表中包括一些不常见的扩展名,比如.php5,.php3,.phtml

3:测试防御机制。如果是过滤一些文件名,可能会被绕过。比如shell.ph.phpp,如果是过滤了php,之后名字后缀可能会变成.php

4:使用%00截断。比如shell.php%00.jpg, shell.php%0delete0.jpg。

5:双扩展名:如果应用程序过滤或者重命名扩展名。如果给它两个扩展名会发生什么?比如shell.php.php或者shell.txt.jog.png.asp。

6:尝试上传一个超长文件名,比如supermassivelongfileeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeename.php

7:尝试上传test.asp,test.asp.。

8:上传flash XSS攻击载荷,然后命名a.jpg

9:尝试以前的技术,但使用PDF或Silverlight代替

10:同样,尝试滥用crossdomain.xml或clientaccesspolicy.xml文件。

11:尝试使用编码绕过。比如URL,HTML,Unicode或者双重编码

12:结合以上所有的绕过技术。

13:尝试替换HTTP请求方法。使用POST替换PUT或者GET(反之亦然)。

14:确保所有的输入点进行模糊测试。

绕过文件上传白名单1:枚举出白名单并测试允许的扩展名来利用

2:测试文件内容正在验证中

3:测试扩展重命名技术,如shell.php.png

绕过文件大小上传机制

恶意文件内容

测试上传任何文件上传的内容是否被应用程序处理。比如你可以将XSS载荷写入到Excel,CSV,txt文件中,稍后看是否会由应用程序呈现。使用Burp repwater和intruder尝试在文件导入和上传功能函数中注入各种的载荷,测试应用程序的响应。

图像数据

可以在图像EXIF数据内注入反向shell吗?

在Kali安装apt-get install exiftool

在图像文件中注入代码后,只需上传文件,并使用校验和验证文件是否相同(以下是详细步骤)

用Burp注入请求

这是与上述EXIF方法类似的技术,但是你要将代码直接粘贴到打包请求中。1:使用burp上传一个合法的图片,且验证上传成功

2:发送之前的请求到repeater模块

3:在请求中的合法图像数据之后,尝试注入有效载荷(注入有效载荷或反向shell)

4:提交这个请求

5:从目标服务器上下载上传的我呢件,验证它是否包含有效的载荷。是否在目标服务器上能成功执行。

验证上传文件

不管你在上一步使用什么方法(EXIF或修改Burp请求),校验一个本地上传的和上传到目标服务器的文件,是否匹配。

服务器端命令执行技术

如果能成功上传一个shell到目标的web服务器上,你可以尝试以下技术来执行上传的shell。1:Apache MIME Types: 尝试上传重命名文件,比如shell.php.jpg或者shell.asp;.jpg,并且评估一下Web服务器是否会利用Apache MIME types。

2:空子节:使用一个空子节%00在文件名末尾,或者这样,shell.php%0delete0.jpg。观察应用程序的响应。

3:可以上传点文件。如果可以上传.htaccess文件,利用AddType:AddType application/x-httpd-php .foo 。

4:注意上传文件的任何处理 比如:可以在稍后由后端备份脚本,处理的文件名中使用命令注入?

5:注意服务器处理的上传文件。如果压缩文件允许上传,应用程序是否会提取其中的内容。反之亦然。

6:服务器防病毒是否处理上传了文件?尝试上传压缩文件类型如.zip,.rar等,如果服务器端防病毒易受攻击,可以利用并获得命令执行。

任意文件上传防御对上传文件格式限制,只允许某些格式文件上传。使用白名单

对文件格式进行校验,前端和服务器端都需要校验。

将上传文件的目录,设置权限。一般上传的都是静态文件,所以需要对其目录设置禁止执行权限。

将上传的文件的名字进行随机命名。

参考

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。