【AH_training】文件包含漏洞
3.文件包含漏洞:
1.直接包含服务器上的文件来达到文件泄露的目的。
2.包含图马,包含日志等已经存在的文件去进行一些绕过。
3.配合上传文件进行一些包含
4.配合伪协议进行包含。
5.当存在限制时,根据前缀绕过和后缀绕过选择对应的目录穿越和伪协议。
3.1文件包含基础:
3.1.1什么是文件包含?
文件包含是为了代码复用。
3.1.2 PHP文件包含函数:
3.1.3什么是文件包含漏洞?
开发者为了代码灵活性将被包含的文件设置为变量,进行动态调用,但灵活性导致了客户端可以调用一个恶意文件,造成文件包含漏洞。
通过PHP函数引入文件时,传入的文件名没有经过合理的验证,从而操作了预想外的文件,就可能导致意外的文件泄露甚至恶意代码注入。
3.1.4 文件包含分类:
大部分都是本地文件包含。
3.1.5文件包含环境说明:
3.2 本地文件包含利用方法
3.2.1任意文件读取: 图马
在包含PHP代码时,代码得到执行;若不是则以字符串方式直接显示。
file://与直接包含
file=/etc/passwd file=file:///etc/passwd(file协议)
3.2.2 包含上传文件:
将想要执行的代码文件放在被包含文件中,进而得到执行。
3.2.3 包含日志文件:
apache日志文件默认存放位置:/var/log/apache2
网站运行使用www的用户服务,没有权限去读取日志文件,一般日志文件网站是无法包含的,若有则必定是它。
3.2.4 PHP伪协议
PHP提供了一些杂项I/O流,允许访问PHP的输入输出流、标准输入输出和错误描述符,内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。
1. ?file=php://input
2. ?file=php://filter
对于flag.php这个文件本来是无法获取其具体内容的,读取时会直接读取“flag.php”这句代码,但是通过过滤器可以规定其编码格式,读取文件内的具体代码。
3. zip://
可以用来绕过检测。
4. phar://
类似zip://
linux中可以将一个目录打包成一个文件,可以通过phar://这一伪协议不解压直接访问,比如访问jpg文件中的一个文本txt文件。
在反序列化中有更大的利用。
5. data://
类似php://input 要求比较严格
?file=data://text:/plain,<?php phpinfo(); <?php phpinfo()为要包含的内容。
3.3 常见限制绕过方法:
3.3.1 前缀绕过
目录遍历:
当在包含文件时有限制,只能访问特定目录下的文件,伪协议是不能用的,因为伪协议规定从开头就出现,而要访问特定目录路径下的文件就不可用了。
使用…/…/来返回上一级目录, 目录穿越 …/代表父级目录
如:?file=…/…/phpinfo/phpinfo.php
3.3.2 后缀绕过
利用协议:
前面部分得到解放就可以使用伪协议的部分,利用zip://和phar://
若只能包含一个php文件,但服务器上无法使用php木马,只能上传一个jpg文件,对于zip文件修改后缀为zip.jpg上传上去再用zip这样一个协议包含jpg文件下面一个php文件。