PHP网络开发详解:文件上传漏洞

PHP网络开发详解:文件上传漏洞,第1张

   ——此文章摘自《完全手册PHP网络开发详解》定价 ¥ 特价 ¥ 详细>>//track linktech cn/?m_id=dangdang&a_id=A &l= &l_type = width= height= border= nosave>

    在很多网站中 特别是在论坛系统中 往往存在文件上传的功能 文件上传功能允许用户将本地的文件通过Web页面提交到网站服务器上 但是如果不对用户的上传进行任何限制的话 可能会对服务器造成很大的危害

     一个简单的文件上传页面

    以下代码是一个简单的文件上传页面     <?php     if(isset($_POST[ form ]))     {         $uploadfile = upfiles/ $_FILES[ upfile ][ name ]                                                //上传后文件所在的文件名和路径         move_uploaded_file($_FILES[ upfile ][ tmp_name ] $uploadfile)                                                                 //上传文件         print_r($_FILES)                                       //输出文件信息         die()    }     ?>    <>    <head>    <title>文件上传</title>    <meta equiv= Content Type content= text/charset=gb >    </head>    <H >文件上传</H >    <form enctype= multipart/form data action= method= post >    <input name= upfile type= file >            <input name= form type= hidden value= form ><BR>    <input type= submit value= Submit >    </form>    <body>    </body>    </>     上面的代码将文件上传到网站服务器并存储在upfiles文件夹下 但是 由于上面的文件上传程序没有对上传的文件进行任何检查 用户可以通过该程序上传自行编写的PHP脚本到服务器上并通过浏览器运行 由于PHP脚本潜在的危害性 该漏洞可能会导致服务器的彻底崩溃及数据的丢失      漏洞防护措施     解决上面所述问题的一种方法是通过检查上传文件的类型来限制用户的文件上传 如以下代码所示     <?php     if(isset($_POST[ form ]))     {         if($_FILES[ upfile ][ type ] == image/pjpeg )    //检查文件类型是否为JPEG         {             $uploadfile = upfiles/ $_FILES[ upfile ][ name ]                                                      //上传后文件所在的文件名和路径             move_uploaded_file($_FILES[ upfile ][ tmp_name ] $uploadfile)                                                                    //上传文件             print_r($_FILES)            die()        }         else         {             die( 上传文件的格式不正确! )        }     }     ?>

lishixinzhi/Article/program/PHP/201311/21477

文件上传漏洞是指:由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。如常见的头像上传,图片上传,oa办公文件上传,媒体上传,允许用户上传文件的地方如果过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中,可以获取服务器的权限,或进一步危害服务器。

非法用户可以上传的恶意文件控制整个网站,甚至是控制服务器,这个恶意脚本文件,又被称为webshell,上传webshell后门之后可查看服务器信息、目录、执行系统命令等。

文件上传的类型:

1、前端js绕过

在文件上传时,用户选择文件时,或者提交时,有些网站会对前端文件名进行验证,一般检测后缀名,是否为上传的格式。如果上传的格式不对,则d出提示文字。此时数据包并没有提交到服务器,只是在客户端通过js文件进行校验,验证不通过则不会提交到服务器进行处理。

2、修改content-type绕过

有些上传模块,会对http类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败,因为服务端是通过content-type判断类型,content-type在客户端可被修改。

3、绕黑名单

上传模块,有时候会写成黑名单限制,在上传文件的时获取后缀名,再把后缀名与程序中黑名单进行检测,如果后缀名在黑名单的列表内,文件将禁止文件上传。

4、htaccess重写解析绕过

上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess文件的作用是:可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。

在htaccess里写入SetHandlerapplication/x-httpd-php则可以文件重写成php文件。要htaccess的规则生效,则需要在apache开启rewrite重写模块,因为apache是多数都开启这个模块,所以规则一般都生效。

5、大小写绕过

有的上传模块 后缀名采用黑名单判断,但是没有对后缀名的大小写进行严格判断,导致可以更改后缀大小写可以被绕过,如PHP、Php、phP、pHp。

奇安信文件上传漏洞如何编写利用脚本?

编写利用脚本的步骤如下:

1. 使用Burp Suite或其他类似的工具,分析网站的网络流量。

2. 查找文件上传的API接口,并通过Burp Suite等工具记录请求参数的结构。

3. 编写一个简单的Python脚本,利用Python的requests库,来模拟文件上传的请求,并将我们自己的文件上传到服务器上。

4. 最后,检查服务器上是否成功上传了文件,如果成功,则说明漏洞存在。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8053448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存