CTFHub-RCE通关实况
eval执行
首先打开网页,发现如下的后端代码
发现这里直接调用了超全局变量REQUEST,证明这里get和post两种方法都可以用,但我们需要先判断目标系统是windows还是linux,我们先用在本地物理机ping一下该网址,发现TLL的值为53,那目标网址机器系统即为linux
此时我们输入system(ifconfig);可以得到路由信息
此时我们根据linux命令,可以用ls来查看该目录下有什么文件,是否存在flag。发现只有一个index.php
我们用cat命令查看一下文件试试。发现出现了永恒之白,证明此方法不行
我们换个思路,看看根目录有啥,输入ls / 此时惊喜发现了flag文件
Cat一下该文件,得到flag!注意此处flag文件在根目录,前面要加上/
命令注入
打开网站,我们这里见到有ip输入的一栏,我们直接输入127.0.0.1|ls,得到代码页面,发现ping命令后接了-c,证明此网站系统也是一个linux系统,且得到一个php文件
我们直接cat进去看看有啥,发现是空的,应该是还有字符没显示出来
此时我们输入1|cat 17174130752373.php|base64 尝试使用base64的方式解密出来,发现真的得到密文
使用在线base64解码看,得到flag!
此处我们延伸一下管道符号和and符号在不同系统的作用
过滤cat
本题过滤了cat,但是linux还有其他查看文本的命令,例如more,它根据窗口大小,一页一页的现实文件内容,我们这里直接输入127.0.0.1|ls # 查看上一个目录,得到一个疑似flag的php文件
直接输入127.0.0.1 & more flag_257721716617980.php | base64来进行解码
老套路,在线解密base64,得到flag
过滤空格
看标题,就知道此题过滤了空格,空格可以使用<或>代替,这里我们直接使用<试试
,先查看一下目录输入127.0.0.1|ls,得到flag文件
直接使用<>代替空格,输入127.0.0.1&cat<flag_310131796224437.php|base64
解密base64密文,得到flag
过滤目录分隔符
先打开网站,发现过滤了目录分隔符/和\ 我们可以使用分号代替分隔符,直接输入127.0.0.1|ls,得到flag_is_here文件夹
输入12.0.0.1;cd flag_is_here;ls,查看该文件夹下有什么文件,发现flag的php文件
输入12.0.0.1;cd flag_is_here;cat flag_96012167625462.php|base64得到flag密文
Base64解密,得到flag
过滤运算符
此题直接过滤了运算符|和&,我们只能用分号来代替了,输入127.0.0.1;ls 得到flag的php
这里由于无法使用| 我们只能改变输入的格式,base64写在前面,后面接php文件名称。直接输入12.0.0.1 ; base64 flag_99832277431824.php 得到base64密文
在线解密,得到flag
综合过滤练习
这道题,打开网址后,我们发现过滤了大部分的符号,但是我们依然可以使用url编码%0a,注意,这里必须要在url栏输入127.0.0.1%0als 得到flag_is_here文件夹
由于此处flag被过滤,我们只能使用*代替f后面的字符,再利用${}来进行变量替换,使用IFS内部分隔符来调用变量替换符号来替换空格,输入?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als 得到flag文件
由于此时,我们cat命令被禁用,我们只能先cd进去flag_is_here文件夹,再进行base64解码。输入?ip=127.0.0.1%0Acd${IFS}f***_is_here%0Abase64${IFS}f***_63421557425918.php得到密文
在线解密,得到flag