经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 网络安全 » 查看文章
Kali学习笔记38:文件上传漏洞
来源:cnblogs  作者:一清  时间:2019/2/11 9:25:47  对本文有异议

早些年,提到Web渗透,或者搜索一些黑客教程

基本都会看到文件上传漏洞。

它是一个很经典的漏洞

但它本质其实不是一个漏洞,而是网站本身的上传文件功能

不过如果我们上传了Webshell,那么就成为了文件上传漏洞

 

打开我们的靶机Metasploitable:

这里就是我们可以测试文件上传的地方

我们先在低安全级别的情况下测试

 

首先我们上传一个正常的图片文件;

 

在目录中输入这行路径,就可以直接访问这个图片

 

如果我们上传的是有恶意的文件呢?

比如php一句话

 

成功执行

 

我们来分析下低安全级别的源代码:

  1. <?php
  2. if (isset($_POST['Upload'])) {
  3. $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
  4. $target_path = $target_path . basename( $_FILES['uploaded']['name']);
  5. if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
  6. echo '<pre>';
  7. echo 'Your image was not uploaded.';
  8. echo '</pre>';
  9. } else {
  10. echo '<pre>';
  11. echo $target_path . ' succesfully uploaded!';
  12. echo '</pre>';
  13. }
  14. }
  15. ?>

为了配合分析,我用Burp把上传文件的Request复制下来

除了基本的HTTP头,需要注意的就是下面这部分内容

 

代码首先判断点击了Upload之后,找到DVWA根目录,然后重新定义新的路径

从请求获得文件名1.php赋值,如果目标文件不存在,显示失败,否则显示成功

 

代码缺陷:

(1)没有对文件类型进行过滤,本意接受上传图片,实际却可以上传php

(2)对文件大小限制为100K其实没有用。由于是客户端进行限制的,利用截断,我们可以轻易修改文件大小限制

 

进一步利用:找到Kali自带的webshell

修改IP:

 

上传这个文件之后

利用nc监听,轻易得到shell:

 

结论:低安全级别的文件上传做得很差,可以轻易利用漏洞

 

接下来看看中安全级别

上传png文件成功,但是上传php文件失败

想要找到失败原因,需要查看源代码:

  1. <?php
  2. if (isset($_POST['Upload'])) {
  3. $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
  4. $target_path = $target_path . basename($_FILES['uploaded']['name']);
  5. $uploaded_name = $_FILES['uploaded']['name'];
  6. $uploaded_type = $_FILES['uploaded']['type'];
  7. $uploaded_size = $_FILES['uploaded']['size'];
  8. if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000)){
  9. if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
  10. echo '<pre>';
  11. echo 'Your image was not uploaded.';
  12. echo '</pre>';
  13. } else {
  14. echo '<pre>';
  15. echo $target_path . ' succesfully uploaded!';
  16. echo '</pre>';
  17. }
  18. }
  19. else{
  20. echo '<pre>Your image was not uploaded.</pre>';
  21. }
  22. }
  23. ?>

可以从代码中分析得出结论:这里需要验证type、name和size三个变量才能成功上传

而且要求type必须是image/jpeg,所以哪怕是png格式的图片也无法上传

绕过:

既然要验证type,name,size那么我就修改

由于size和name符合要求,那么我就修改type为image/jpeg:使用Burp截断

 

修改后上传,成功!

 

进一步可以上传木马等等

 

总结:中等安全等级的文件上传也可以轻易饶过,不过需要截断工具

但其实已经可以防止最低级的脚本小子

 

接下来看看高级安全等级:

源代码

  1. <?php
  2. if (isset($_POST['Upload'])) {
  3. $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
  4. $target_path = $target_path . basename($_FILES['uploaded']['name']);
  5. $uploaded_name = $_FILES['uploaded']['name'];
  6. $uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1);
  7. $uploaded_size = $_FILES['uploaded']['size'];
  8. if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000)){
  9. if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
  10. echo '<pre>';
  11. echo 'Your image was not uploaded.';
  12. echo '</pre>';
  13. } else {
  14. echo '<pre>';
  15. echo $target_path . ' succesfully uploaded!';
  16. echo '</pre>';
  17. }
  18. }
  19. else{
  20. echo '<pre>';
  21. echo 'Your image was not uploaded.';
  22. echo '</pre>';
  23. }
  24. }
  25. ?>

分析可以看出:

这里对扩展名进行了过滤,所以上传1.php会失败,修改类型也会失败

而我们如果把1.php修改成1.php.jpg

 

上传成功!
也可以成功被利用

 

总结:高安全级别也不安全

 

怎么更安全呢?

一般文件前一部分字节表明这个文件的类型,我们可以来验证这一部分内容

因为哪怕修改了扩展名也无法修改这里的文件类型,我们可以用mimetype命令来验证

所以,这种方式更安全

那么有没有办法绕过这种更安全的方式呢?

有,保留表明文件类型的字节,修改文件实际内容

 

 

比如这里,我们不改变第一行,只改变后边的内容

 

但是想要使用会报错,因为服务器端没有用php去解释这个文件

所以我们把1.png修改为1.php.png,再发送过去,服务器端就会去解释了

然后就可以像上面一样利用了

 

那么,文件上传漏洞是无法被解决了吗?

不是

 

安全有效的解决办法:

目录权限限制,不给执行权限

sudo chmod a-x uploads/

对保存上传文件的文件夹进行权限限制

原文链接:http://www.cnblogs.com/xuyiqing/p/10357491.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号