目录:

  • 初级
  • 中级
  • 高级
  • 防护措施

1.初级:

上传漏洞很简单,刚刚看完一个多小时的教程心情很是惆怅,决定把老师讲的记下来。
依旧是用DVWA这玩意进行练习。先从初级开始,首先分析一下php的源代码:

 <?php
if (isset($_POST['Upload'])) {

    $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
    $target_path = $target_path . basename( $_FILES['uploaded']['name']);

    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>';

    }

}
?> 

分析:

初级的代码很简单,第二是判断是否有upload这个参数如果有就继续执行,什么?我怎么看出的?抓包!…如果没有则报错。下面的代码是取上传文件名的名字拼凑一个名字给上传的文件重命名,然后放到一个位置,这个很简单,直接上传就可以。

利用:

可以新建一个名叫1.php的文件,然后找个webshell的源码粘贴进去。关于webshell的源码。Github上又有一个收集webshell的项目,可以去这里找:https://github.com/JohnTroony/php-webshells
粘贴后,直接上传这个php文件,就得到了shell

webshell里可以运行命令:

2.中级

然后清理一下数据库。

中级也是如此,先分析源代码:

 <?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>';
    }
}
?> 

分析:

可以看出,中级代码里做了过滤,增加了三个变量,一个文件名name,一个文件类型type,还有一个大小size,然后下面的判断中,判断力两个变量,类型和大小,这种类型的过滤属于mimetype判断。可以抓包并改包过滤,这时候就得用到抓包神器——BurpSuite。然后抓包,吧type类型改成image/jpeg就可以绕过。

利用:

启动工具,设置好代理。上传!截获数据,改包type为image/jpeg,发包。完成。。。

成功拿到shell..

3.高级:

老样子,清空数据库,分析代码:

<?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_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1);
    $uploaded_size = $_FILES['uploaded']['size'];

    if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "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>';
        echo 'Your image was not uploaded.';
        echo '</pre>';

    }
}

?>

分析:

高级代码好像更牛逼了,仔细研究后发现,作者加了个文件后缀名的过滤,只允许jpg和jpeg这种格式的上传,这个时候也可以利用抓包修改文件名的后缀为1.php.jpg这样,可以绕过过滤,而且服务器是可以执行的。原理就不扯了,快吃饭了。。。

执行效果如下,注意。虽然后缀是jpg,但是服务器仍然会以php文件进行解析。原理自己找资料了解吧。

有些牛逼的大神可能会用更严格的过滤方法,但是只要细心,也是可以绕过的。比如。有些大神会判断图片文件的前几个字节来过滤。这时候,可以用php代码将剩余的替换掉。但是apache会以图片的方式进行解析。不过也可以修改文件拓展名来绕过。

4.防护措施:

使用代码进行过滤
系统配置文件的合理配置
文件权限的分配
比如去除对upload目录的执行权限:

sudo chmod a-x upload

完毕。。

相关文章
评论
分享
  • 利用ms17_010漏洞攻陷windows server 2012服务器

    这几天给客户装了好多服务器,很多系统是windows server 2012 R2的,装完后也没有打补丁,然后我就对这个没打补丁的系统扫了一下还真发现了高危漏洞。(比较简单,不喜勿喷) 首先自己搭建的环境:kali linux (19...

    利用ms17_010漏洞攻陷windows server 2012服务器
  • CVE-2019-0708漏洞利用

    CVE-2019-0708漏洞利用9月7日上午,群里被CVE-2019-0708漏洞刷屏,原来是那个号称wannacry级别的漏洞 BlueKeep(CVE-2019-0708)漏洞利用发布了。吓得老夫赶紧打开虚拟机更新了一下kali...

    CVE-2019-0708漏洞利用
  • 利用php输入流getshell教程

    利用php输入流getshell教程
  • sql注入

    依旧是使用DVWA。。 sql注入初级代码:<?php if(isset($_GET['Submit'])){ // Retrieve data $id = $_GET['id'];...

    sql注入
  • PHP文件包含漏洞与NC注入和php输入流

    目录:文件包含漏洞原理nc注入php输入流 1:文件包含漏洞的原理其实目录遍历漏洞和文件包含漏洞的原理是一样的,无非是文件包含漏洞可以包含远程服务器的文件,不知道业界纠结这个鬼问题干嘛,我就放一块写了。文件包含漏洞又分为两种,一是本地...

    PHP文件包含漏洞与NC注入和php输入流