1.原因
上传文件时,如果服务端未代码未对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的情况,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)
2.危害
非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又被称为WebShell,也可将WebShell脚本称为一种网页后门。
目标地址:https://www.bihuoedu.com/vul/unsafeupload/clientcheck.php
两种方法绕过:
采用法2:
返回成功,
是服务端代码中限制了某些后缀的文件不允许上传,但是有些Apache是允许解析其他文件后缀的,例如在httpd.conf中,如果配置有如下代码,则能够解析php和phtml文件。
AddType application/x-httpd-pho .php .phtml
所以,可以上传一个后缀为phtml的webshell。
在Apache 的解析顺序中,是从右到左开始解析文件后缀的,如果最右侧的扩展名不可识别,就继续往左判断,直到遇到可以解析的为止 。
如果服务端代码是通过Content-type的值来判断文件的类型,那么就存在被绕过的可能,因为Content-type的值是通过客户端传递的,可以任意修改的。
上传PHP文件时,为application/octet-stream:
上传jpg格式的文件时,为image/jpeg:
注:在php中还存在一种相似的文件上传漏洞,PHP函数getimagesize()可以获取图片的宽、高等信息,若上传的图片不是图片文件,则该函数获取不到信息。getimagesize了解:https://www.runoob.com/php/php-getimagesize.html
但是:可以将一个图片和WebShell合并为一个文件,例如使用以下命令:
cat image.png webshell.php > image.php
或者:
此时使用getimagesize就可以获取图片信息,且WebShell的后缀是PHP,也能被Apache解析为脚本文件。
目标地址:https://www.bihuoedu.com/vul/unsafeupload/getimagesize.php
图片木马即做好了,点击上传,
尝试访问一下这个图片,
https://www.bihuoedu.com/vul/unsafeupload/uploads/2019/09/12/2019/09/12/3139975d79b2528df37250885307.jpg
可以看到图片但是木马并没有执行,接下来我们可以之前讲过的本地包含文件漏洞原理来进行操作
我们可以利用include,我们在实际中需要对一些文件包含的点去进行测试,来找到include在哪个目录里,我们在测试中手动尝试一下就行。
unsafeupload/uploads/2019/09/12/2019/09/12/3139975d79b2528df37250885307.jpg
截断类型:PHP %00截断
截断原理:由于00代表结束符,所以会把00后面的所有字符删除
截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态。
修改参数jieduan为1.php%00.jpg,文件被保存到服务器时,%00会把.jpg和按时间生成的图片文件名全部截断,那么文件名就剩下1.php因此成功上传WebShell脚本。
一些网站上传文件的逻辑是先允许上传任意文件,然后检查是否包含WebShell,若有则删除。存在的问题是文件删除和删除文件之间存在一个短的时间差(因为要执行检查文件和删除文件的操作),攻击者利用这个时间差完成竞争条件的上传漏洞攻击。
先上传一个WebShell脚本10.php,10.php的内容是生成一个新的WebShell脚本shell.php,代码如下:
');
?>
当生成成功后,客户端立即访问10.php,则会在服务端当前目录下自动生成shell.php,这时就利用时间差完成了WebShell的上传。