ctfshow命令执行
参考链接:
https://blog.csdn.net/qq_49480008/article/details/113177878
1.飘号:``,相当于eval
eval(echo cat ????.???;)相当于eval(echo cat flag的内容)
web31

或者?c=include"$_GET[url]"?>&url=php://filter/read=convert.base64-encode/resource=flag.php
web32

?>相当于;
web33
多过滤了双引号,去掉就行

web34
同上

web35
同上

web36
同上

web37

include文件包含,可利用伪协议读flag,data://,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行
方法二:
c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
base64解码为"<?php system('cat flag.php');?""
查看源码即可得到flag
web38

web39

inlucde要包含的文件后面加了.php,因为前面的php语句已经闭合了,相当于执行了php语句,所以后面的.php会被当成html页面直接显示在页面上,起不到什么 作用
web40
无参数读文件
https://www.freebuf.com/articles/system/242482.html
https://skysec.top/2019/03/29/PHP-Parametric-Function-RCE/#什么是无参数函数RCE

localeconv():返回一包含本地数字及货币格式信息的数组。其中数组中的第一个为点号(.)
pos():返回数组中的当前元素的值。
array_reverse():数组逆序 scandir():获取目录下的文件
next():函数将内部指针指向数组中的下一个元素,并输出。 首先通过
pos(localeconv())得到点号,因为scandir(’.’)表示得到当前目录下的文件,所以scandir(pos(localeconv()))就能得到flag.php了。具体内容如下

先倒转,在变成数第二个,用show_source,print_r不行

web42

/dev/null 2>&1主要意思是不进行回显的意思,可用;分割和||分割,||只执行前面的代码,|只执行后面的代码
web43

web44

web45

web46

web47

web48
同上
web49
同上
web50

web51

web52

web53

web54

相当于打印$flag="ctfshow{27283afe-118b-48b5-a5e6-8b523eecb3cb}";
web55

方法一:
查看源代码发现没有过滤数字,我们就想一想在我们查看文件的命令有没有数字开头的。
匹配到/bin目录下的命令
cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar、base64等
发现存在一个base64
我们就可以通过通配符进行匹配命令执行查看flag.php
payload:
?c=/???/????64 ????.???
意思是 /bin/base64 flag.php
意思是 /bin/base64 flag.php
方法二:
bzip2是linux下面的压缩文件的命令 关于bzip2命令的具体介绍
/usr/bin目录:
主要放置一些应用软件工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome、 zip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb、wget等。
我们可以利用/usr/bin下的bzip2
意思就是说我们先将flag.php文件进行压缩,然后再将其下载
payload:
?c=/???/???/????2 ????.???
也就是/usr/bin/bzip2 flag.php
也就是/usr/bin/bzip2 flag.php
然后访问/flag.php.bz2进行下载获得flag.php
web58-65

web66

web67

web68


浙公网安备 33010602011771号