ctf基本的文件上传与绕过学习

绕过客户端校验前台脚本检测扩展名上传webs hell

原理:

当用户在客户端选择文件点击上传的时候,客户端还没有向服务器发送任何
消息,就对本地文件进行检测来判断是否是可以上传的类型,这种方式称为前台
脚本检测扩展名。
绕过前台脚本检测扩展名,就是将所要上传文件的扩展名更改为符合脚本检
测规则的扩展名,通过 BurpSuite 工具,截取数据包,并将数据包中文件扩展名
更改回原来的,达到绕过的目的

实验:

  1. 打开要上传的页面,上传要上传的木马文件lurb.php,点击上传。
  2. 页面显示错误
  3. 返回上传页面,点击浏览,选择要上传的木马文件lubr.jpg(把lubr.php重命名
    lubr.jpg)
  4. 上传用burpsuite抓包,将.jpg改为.php,点击’forward’发送数据包,进行绕过。



    绕过 Content-Type 检测文件类型上传

    原理:

    当浏览器在上传文件到服务器的时候,服务器对所上传文件的Content-Type类型进行检测,如果是白名单允许的,则可以正常上传,否则上传失败。绕过Content–Type文件类型检测,就是用BurpSuite 截取并修改数据包中文件的Content-Type类型,使其符合白名单的规则,达到上传的目的。

    实验:

  5. 打开要上传文件的页面,上传木马lubr.php。报错

  6. 利用burpsuite抓包更改Content-Type由application/octet-stream改为148
    image/gif。点击’forward’发送数据包。



    绕过服务器端扩展名检测上传

    原理:

    当浏览器将文件提交到服务器端的时候,服务器端会根据设定的黑白名单对浏览器提交上来的文件扩展名进行检测,如果上传的文件扩展名不符合黑白名单的限制,则不予上传,否则上传成功。

将一句话木马的文件名 lubr.php,改成lubr.php.abc。首先,服务器验证文件扩展名的时候,验证的是.abc,只要该扩展名符合服务器端黑白名单规则,即可上传。另外,当在浏览器端访问该文件时,Apache如果解析不了.abc扩展名,会向前寻找可解析的扩展名,即.php。一句话木马可以被解析,即可通过中国菜刀连接。apache解析文件名从后往前解析

实验:

  1. 打开要上传文件的页面,上传木马文件lubr.php。上传报错

  2. 返回上传页面,点击浏览,选择要上传的木马文件lubr.php.abc(由lubr.php重命名lubr.php.abc),点击上传


    00截断上传

    原理:

    利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞。

假设文件的上传路径为http://xx.xx.xx.xx/upfiles/lubr.php.jpg,通过抓包截断将【lubr.php】后面的【.】换成【0x00】。在上传的时候,当文件系统读到【0x00】时,会认为文件已经结束,从而将【lubr.php.jpg】的内容写入到【lubr.php】中,从而达到攻击的目的。

实验:

  1. 打开需要上传的网页,选择需要上传的木马文件‘xxx.php.jpg’上传.
  2. burp suite抓包。
  3. 单击“hex”标签页,点击【hex】,进入到十六进制源码界面。
  4. 找到【lubr.php.jpg】对应的十六进制源码,将【lubr.php】后【.】对应的【2e】改为【00】
  5. 点击【forward】,即可成功上传文件

    构造图片木马上传绕过

    原理:

    一般文件内容验证使用getimagesize()函数检测,会判断文件是否是一个有效的文件图片,如果是,则允许上传,否则的话不允许上传。本实例就是将一句话木马插入到一个【合法】的图片文件当中,然后用中国菜刀远程连接。

    实验:

  6. 随便找一个图片,与所要上传的木马放置于同一文件夹下。打开cmd,进入木马所在文件夹
  7. 输入copy pic.jpg/b+lubr.php/a PicLubr.jpg,将【lubr.php】插入到【pic.jpg】中。
  8. 上传图片木马,并访问。

    Apache 解析漏洞上传文件

    原理:

    Apache识别文件类型是从右向左识别的,如果如遇不认识的扩展名会向前一次识别,知道遇到能别
    的扩展名

    实验

  9. 将原本不能上传的xx.php文件更名为xx.php.abc上传即可

    Fckeditor漏洞上传webshell

    原理:

    Fckeditor在2.4.2以下存在一个直接上传任意文件的上传页面,可直接上传webshell

    实验:

  10. 打开网站判断是否有fckeditor编辑器出现403禁止访问,说明此目录存在
  11. 判断fckeditor编辑器版本号,输入:http://192.168.1.3:8001/FCKeditor/_whatsnew.html,由返回页面可知此fckeditor编辑器版本为2.0
  12. 此版本fckeditor存在两个上传漏洞页面:
    FCKeditor/editor/filemanager/browser/default/browser.html?type=Image&connector=connectors/asp/connector.as
    FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=zhang&CurrentFolder=/
    第一个页面是在网站根目录下的userfiles目录下的Image目录下打开一个上传页面,上传的文件都保存在这个目录下;
    第二是在网站根目录下的userfiles目录下创建一个zhang目录。1.4打开
    http://192.168.1.3:8001/FCKeditor/editor/filemanager/browser/default/browser.html?type=Image&connector=connectors/asp/connector.asp
  13. 00截断上传,先上传一个jpg类型文件,再上传一个asp文件报错。burp suite抓包进行00截断上传。


  14. 设置代理,再次上传类型为ASP的文件webshell.asp.jpg(把webshell.asp重命名webshell.asp.jpg即可),击”upload”按钮
  15. burpsuite 抓到包 进到hex选项卡更改00截断
  16. 将.jpg的.的hex’2e‘改为00
  17. 切换为raw模式,空格变为如图样子,单击“forward”按钮(多单击几次),继续发送请求数据包
  18. 切换为history
    标签,选择截获的数据包,然后再单击“reponse”标签页,发现文件的上传路径为“/UserFiles/Image/”
  19. 取消浏览器的代理设置,刷新上传页面,可以看到webshell.asp.jpg文件已经上传成功,并命名为webshell.asp。

原文:大专栏  ctf基本的文件上传与绕过学习

原文地址:https://www.cnblogs.com/peterchan1/p/11642978.html

时间: 2024-10-29 06:34:41

ctf基本的文件上传与绕过学习的相关文章

文件上传验证绕过技术总结

文件上传验证绕过技术总结 1.客户端验证绕过 很简单啦,直接使用webscarab或者burp修改一下后缀名就行. 2.服务端验证绕过-Content-type检测 若服务端检测文件类型时是检测Content-type的值,也很简单,在webscarab或者burp中修改Content-type. 如php中 if($_FILES['userfile']['type'] != "image/gif") 即是检测Content-type值. 3.服务端验证绕过-扩展名检测 a. 寻找漏网

1.1 文件上传之绕过验证

文件上传之绕过 一般防止上传漏洞手法 1.客户端检测:客户端使用JavaScript检测,在文件未上传时,就对文件进行验证 //任何客户端的验证都是不安全的,客户端验证目的是防止用户输入错误.减少 //服务器开销,而服务端验证才可以真正防御攻击者. 2.服务器端检测:服务端脚本一般会检测文件的MIME类型,检测文件扩展名是否合法 客户端检测 客户端验证代码形如下: <html lang="en"> <head> <meta charset="UT

PHP 文件上传表单 ~~学习笔记

PHP文件上传 通过PHP,可以把文件上传到服务器. ------------------------------------------------------------------------------------------------------------------- 创建一个文件上传表单:允许用户从表单上传文件时非常有用的: 下面是一个供上传文件的html表单: <html> <body> <form action="upload_file.php

文件上传与下载学习笔记(2)---多文件、单文件、多个单文件函数封装

一:前导知识点: 1:is_string()判断一个变量是否是字符串 is_array 判断一个变量是否是数组 2:pathinfo()函数可以获取文件的扩展名. 3:创建目录函数 mkdir() 4: 生成唯一的随机数 uniqid() 5:判断文件.目录是否存在file_exsits() 二:思路与流程 三:封装的函数代码 1 <?php 2 /** 3 * 得到想要的文件类型 4 * @return unknown 5 */ 6 function getFiles() { 7 $i = 0

文件上传与下载学习笔记(3)---面向对象方法实现文件上传

代码: 1 <?php 2 class uploadClass { 3 protected $filename; 4 protected $maxSize; 5 protected $allowExt; 6 protected $allowMime; 7 protected $uploadPath; 8 protected $imgFlag; 9 protected $fileInfo; 10 protected $error; 11 protected $ext; 12 protected $

文件上传与下载学习笔记(1)---文件上传原理及配置

一:原理:将客户端的文件上传到服务器端的临时目录,再将服务器端的临时文件移动到指定目录. 二:客户端的配置 表单的method必须为post方法 表单必须添加enctype="multipart/form-data"属性 二者缺一不可. 三:将临时文件移动到指定目录 两种方法:1:move_uploaded_file($filename, $destination) 2:copy($source, $dest) 四:php.ini中的配置 在php.ini中搜索uploads ,会看到

SWFUpload一个强大的文件上传神器(学习二)实战

1.引入swfupload.js <script type="text/javascript" src="/assets/ueditor/third-party/swfupload/swfupload.js"></script> 2.实例化swfupload对象,并传入参数配置对象 封装image.load.js var ImageUpload = { swfUpload: function (btn, addr) { var $btn =

文件上传限制绕过的原理以及方法总结

0x00 概述 6666666 0x01 客户端检测绕过(js检测) 检测原理 在客户端通过如下的javascript代码来检测用户提交的文件是否合法: 1 <script type="text/javascript"> 2 function checkFile() { 3 var file = document.getElementsByName('upload_file')[0].value; 4 if (file == null || file == "&q

文件上传与下载学习笔记(4)---文件下载

对于图片格式.HTML格式的文件,浏览器可以直接解析,但是如果不想让浏览器解析,让浏览器下载怎么办? 1 <?php 2 header("content-disposition:attachment;filename=".basename("1.jpg"));//basename()的使用 3 header("content-length:".filesize("1.jpg")); //下载时提示文件大小 4 readf