互联网知识

精准传达 • 价值共享

洞悉互联网前沿资讯,探寻网站营销规律

查看其它板块

Web安全测试学习笔记-DVWA-图片上传

作者:Sally Zhang | 2021-11-28 09:38 |点击:

很多网站都有上传资源(图片或者文件)的功能,资源上传后一般会存储在服务器的一个文件夹里面,如果攻击者绕过了上传时候的文件类型验证,传了木马或者其他可执行的代码上去,那服务器就危险了。

 

我用DVWA的文件上传来做练习,low模式没有任何验证,随便上传任意大小和类型的文件,现实中一般不会存在,故跳过,从medium模式开始。

进入页面后,我尝试传一个php文件上去(文件中有一段代码,用来列出上级目录的所有文件),下图说明medium模式对文件类型进行了限制(在做这个练习此之前,我觉得做了类型限制就很安全了,反正其他类型都传不上去嘛~),其实有一些方法可以绕过这种检测。

 

修改Content-Type绕过文件类型检测(medium模式)

用Burp Suite抓包如下,content-type的类型是octet-stream。根据页面的报错,这个页面只能传jpg和png格式的图片。

尝试把请求中content-type改为image/jpeg,再次发送请求,上传成功。说明medium模式只验证了Mime-Type,并没有验证文件本身(我传的还是php文件)

上传成功后访问3.php,代码被执行(恶意代码被执行的风险有多大不用多说了。。。)

比如恶意代码为 

<?php @eval($_POST['haha']) ?>

然后就可以用菜刀连接

利用图片马绕过(high模式)

将security level修改为high,再次使用修改content-type的方法上传,发现上传失败,也就是说,high模式校验了上传文件本身到底是不是图片。接下来尝试用图片马来绕过。什么是图片马,简单来说就是在图片中嵌入了代码。。。步骤如下:

1. 合成图片马

    找到一张货真价实的图片,然后将图片和php文件合成另一张图片,在命令行使用如下命令:

    copy 3.png /b + test.php /a y.png    (y.png就是图片马)

2. 上传图片马

    用Burp Suite抓包看到我们的代码已经隐藏在图片里了,然后直接上传即可(因为文件格式是符合要求的)

    

利用GIF89a绕过(high模式)

什么是GIF89a呢?先上传一张货真价实的gif图片,抓包如下图,图片的最开始几个字母就是GIF89a。个人理解GIF89a应该是gif文件的开头标志,只要有这个标志,就会被当做gif图片~

我将本地的php文件开头加上gif89a,然后把文件重命名为.jpg,进行上传并上传成功(实际上我上传的是一段代码)

这里有个疑问:明明只允许上传jpeg和png,为何gif图片也上传了呢?我的理解是:文件类型和后缀名是分开校验的。校验文件类型的函数只校验了是否是图片(没管是什么类型的图片),而jpeg和png的校验只校验了后缀名。

 

那有没有办法避免这种情况呢?有,把security level修改为impossible模式,图片马和GIF89a都不行了,因为impossible模式在high的基础上,还检测了上传文件是不是货真价实的图片~

 

一点点感悟:

1. 上传文件类型的校验越严格越好(除了后缀名必须校验文件本身)

2. 上传的文件放在单独的文件服务器上

3. 文件上传到服务器后对文件进行重命名

文章来源于:https://www.cnblogs.com/sallyzhang/p/11906217.html

如没特殊注明,文章均为狐灵科技原创,转载请注明   "Web安全测试学习笔记-DVWA-图片上传
多一份免费策划方案,总有益处。

请直接添加技术总监微信联系咨询

网站设计 品牌营销

多一份参考,总有益处

联系狐灵科技,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:15082661954 / 大客户专线:15523356218