1.绕过客户端
禁用js代码即可
点击查看代码- <!DOCTYPE html>
- <html>
- <head>
- <title>不安全的文件上传</title>
- </head>
- <body>
- <h2>上传你的头像(仅限图片)</h2>
-
- <form id="uploadForm" onsubmit="return validateFile()">
- <input type="file" id="fileInput" accept=".jpg,.png">
- <button type="submit">上传</button>
- </form>
-
- </body>
- </html>
复制代码 先传后修改。2.绕过服务端1)MIME服务端代码[点击查看代码- [/code]抓包,修改Content-Type。
- 2)文件后缀绕过
- [indent]后缀大小写绕过(Php)
- 空格绕过(php )
- 点绕过(php.)
- ::$DATA绕过(php::$DATA)
- .htaccess绕过
- 原理:当前目及其子目录httpd-conf 是 Apache 的系统配置文件,一个全局的配置文件,对整个 web 服务起作用;而.htaccess 也是 Apache 的配置文件,不过相当于一个局部配置文件,只对该文件所在目录下的文件起作用,改变当前目录以及子目录的apache配置信息
- 写入:
- [/indent]点击查看代码[code]AddType application/x-httpd-php .gif
复制代码 .gif为后缀的文件都可被解析为php或者点击查看代码- <FilesMatch "xxx.png">
- SetHandler application/x-httpd-php
- </FilesMatch>
复制代码 xxx.png可被当作php脚本解析.user.ini
.user,它会影响php.ini中的配置,从而将指定的文件内容按php来解析,影响的范围该文件所在的目录以及子目录。需要等待php.ini中的user_ini.cache_ttl设置的时间或重启Apache才能生效,且只在php5.3.0之后的版本才生效。.user.ini比.hta用的更广,不管是nginx/Apache/IIS,只要是以fastcgi运行的php都可以用这个办法。如果使用Apache,则用.htaccess文件有同样的效果。
注意:.htaccess只能用于Apache。
传入
点击查看代码- auto_prepend_file = xxx.jpg
复制代码 再传入点击查看代码[code][/code]如果在上传目录中还有一个可执行的php文件,访问php文件,就达到了执行系统命令的效果。以上都为黑名单,下面来讲白名单。白名单就是文件后缀不在白名单中即为违法。>%00截断;0X00截断这两个其实被解析之后都是一个东西:chr(0);服务端判断文件类型是从后往前判断,而对文件解析是从前往后解析;对照ASCll表可知0对应的是NULL,而当一个字符串中存在空字符的时候,在被解析的时候会导致空字符后面的字符被丢弃。点击查看代码[code] |