前端
js绕过
修改上传文件的后缀为图片后缀,再通过抓包修改为对应可解析文件后缀名。
后端
黑名单绕过
后缀替换
通过更换黑名单中没有的可解析文件后缀,进行文件上传。
大小写绕过
通过更改后缀的大小写来进行绕过,如PHp,phP
等来绕过。
.htaccess解析
需要上传.htaccess文件,文件内容:
<FilesMatch "\.jpg"> SetHandler application/x-httpd-php </FilesMatch>
上传后所有.jpg文件内容,可以进行php解析。
注:前提条件,http.conf
在此文件中设置 AllowOverride All
,才能使用.htaccess文件
.user.ini解析
.user.ini就是用户自定义的一个php.ini,且.user.ini和.htaccess一样是目录的配置文件。
.user.ini文件有两个参数可以用来包含文件,让包含的文件解析成php。
auto_prepend_file = <filename> //包含在文件头 auto_append_file = <filename> //包含在文件尾
利用方法:
1、上传.user.ini
.user.ini文件内容:
auto_prepend_file = 1.jpg
2、上传一个包含php语句的1.jpg文件
3、第三步访问该目录下的php文件就会解析png中的php语句
这样访问该目录下的一个php文件就会包含1.jpg文件中php语句然后解析。
(win)点绕过
Windows系统下,文件后缀名最后一个点会被自动去除。
Linux系统下,系统下,文件后缀名最后一个点不会被自动去除。
(win)空格绕过
Windows系统下,对于文件名中空格【demo.php(空格)】会被作为空处理,程序中的检测代码却不能自动删除空格,从而绕过黑名单。
(win)点绕过和空格绕过结合
例如: a.php[空格](点)[空格] a.php . a.php(点)[空格](点)
(win)::$DATA绕过
在window系统下,如果上传的文件名为a.php::$DATA,它会在服务器上生成一个a.php的文件,其中内容和所上传内容相同,并被解析。
白名单绕过
%00截断(0x00)
当一个字符串中存在空字符的时候,在被解析的时候会导致空字符后面的字符被丢弃。
中间件解析漏洞
Nginx 解析漏洞
在文件后面加上/xx.php
(xx可加可不加)就会将该文件以php
格式执行
该漏洞属于用户配置不当造成的解析漏洞。
IIS解析漏洞
IIS 6.0
解析漏洞有两种利用方式
(1)在.asp
目录下的任意文件会以asp
格式解析
(2);
截断,上传test.asp;.jpg
是一个jpg
文件但是会以asp
执行
IIS 7.0
解析漏洞
在文件后面加上/xx.php
(xx可加可不加)就会将该文件以php
格式执行
文件类型绕过
MIME绕过(Content-Type属性绕过)
修改类型或使用图片马,抓包修改文件后缀上传。
文件头检查绕过(突破exif_imagetype()
)
上传具有正常文件头的图片马即可。
gif
的文件头为GIF89a
;png
的文件头为89504E47
;jpg
的文件头为FFD8FF
js语句执行解析文件内容
<script language="php">eval($_POST['1']);</script>
竞争条件
发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
前提:文件上传到了服务器,在对文件检查和修改时可正常访问
多线程并发访问上传的文件。
生成图片马
使用 cmd 的 copy 指令进行制作
copy 图片.jpg/b + 脚本.php/a 333.jpg
参考链接
https://blog.csdn.net/cosmoslin/article/details/120793126
https://blog.csdn.net/2301_81864699/article/details/143099369
https://blog.csdn.net/weixin_46684578/article/details/119141109
https://xz.aliyun.com/news/6387