Dvwa_file_upload
DVWA_File Upload(文件上传)
LOW
上传的,当然是webshell,但是为了演示,我就传个输出phpinfo的代码吧
<?php
phpinfo();
?>
访问路径,返回信息。
鉴于完全裸奔的逻辑,就不看源码了。
MEDIUM
直接上传,返回报错提示:
那就是说存在文件类型校验,修改报文信息中的Content-Type:
属性,将application/octet-stream
改为image/png
发现可以上传:
改成png是因为上面提示了文件类型,如果没有提示,那就可以尝试其他的文件类型后缀。
查看源码,整个核心代码如下:
业务逻辑就是检查文件类型是否满足三种图片格式,如果满足则进行长传,如果不满足,则抛出错误。
HIGH
鉴于上面已经对文件类型做了校验,那么这里肯定是对文件头做了校验的场景了,因为一般情况下,对图片做校验也就是这两种方式,当然还有限定文件后缀的形式来确保上传的文件是不可执行的文件。那就开始动手吧:
可以使用cmd的copy命令,将图片和webshell拼接成一个文件,当然了,其实可以直接使用编辑器打开图片,将代码插入到图片码的最下方,保存文件,也能起到同样的效果,
我就很偷懒的,只是将图片头保留了下来,生成了如下的一个图片:
注:这里使用notepad++实属无奈,虽然它好用,但我选sublime,希望内陆也能有一款优秀的编辑器诞生。另外:不要对不了解的东西妄加评论(自言自语)
这里多次尝试,发现必须是图片后缀名,且必须存在图片文件头的文件才能正常上传,那只能利用本地文件包含来试试触发漏洞执行了,这里就不操作了。
IMPOSSIBLE
该级关键代码如下:
重命名文件,重构图片,模糊化返回,这应该是目前最全的文件上传防护了。
其实针对文件上传还有很多种方式,比如编码后上传,然后采用特定解码打开webshell文件,大小写webshell函数,添加文件头,后缀名解析绕过,都是文件上传时会用到的特殊技巧,当文件包含存在的时候降低了对上传的要求,更容易利用成功。