zoukankan      html  css  js  c++  java
  • 命令执行绕过的方法

    谈谈绕过的方法

    在这之前,我们先来总结一下常用的命令注入绕过方法,还是挺有意思的,会对 Linux 指令更加熟练(下面有些 Linux 命令只在 bash 下有效,在 zsh 里面可能会不行)

    拼接型

    命令作用
    & 表示任务在后台执行
    && 表示前一条命令执行成功时才执行后面一条命令
    | 表示上一命令的输出作为下一命令的参数
    || 表示上一条命令执行失败后才执行下一条命令
    ; 不管前面的命令成不成功都执行后面的命令

    奇淫技巧

    在网上看博客的时候就发现了好多命令注入绕过的方法,真是刷新了我的思维,记录一下

    绕过空格

    Linux 下会有很多可以绕过空格的方法,因为题目可能会限制我们不能输入空格,但是我们可以通过一些特殊的字符绕过,现在假设我们的环境是 Linux ,当前环境下有一个名叫 file1 的文件,我们现在要访问里面的内容,一般就是使用 cat 命令了

    $ cat file1                                                                 
    hello                                                                                     
    world

    ${IFS}

    要是不让用空格呢?在 Linux 下,有很多方法可以绕过空格, ${IFS} IFSIFS9 IFSIFS9 都表示空格,可以绕过空格,这里 $IFS 表示的是 Linux 下的分隔符

    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 
    View Code

    绕过黑名单

    依然是上面的例子,如果现在不让我们使用 cat 命令了呢?怎么才能获取到文件里面的内容呢(可能有人会说用 strings 啊,当然可以,但如果只能用 cat 呢)

    命令拼接绕过

    kevin@laptop:~$ a=c;b=a;c=t;$a$b$c file1                                                 
    hello                                                                                     
    world  

    利用系统已存在资源绕过

    从已有的文件或者环境变量中获得相应的字符,不过这个得题目的系统上存在这个环境变量或文件,做题的时候应该会有些提示

    base64 编码绕过

    这个真的是骚到我了,并且知道了原来 Linux 系统自带 base64 编码解码命令,先来看下是怎么用的吧

    [root@localhost ~]# echo cat file1|base64    #加密
    Y2F0IGZpbGUxCg== 
    [root@localhost ~]# echo Y2F0IGZpbGUxCg==  |base64 -d    #解密
    cat file1

    因为 ` 会将里面的东西变成 Linux 命令执行,那我们就可以输入下面的命令来进行绕过查看文件内容了

    kevin@laptop:~$ `echo Y2F0IGZpbGUxCg==  |base64 -d`                                       
    hello                                                   
    world  

    然而如果题目将 ` 也给 ban 了的话,我们也可以将上面的输出重定向到 bash 来执行

    kevin@laptop:~$ echo Y2F0IGZpbGUxCg==  |base64 -d | bash                                 
    hello                                                   
    world  

    知道这个之后,不仅可以用 base64 进行绕过,还可以用 base32 进行绕过,系统自带 base64 和 base32 命令

    引号(单、双)绕过

    想不到吧,引号也能绕过,我是服气的!好像只要有配对闭合的引号就能够相互抵消掉

    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   
  • 相关阅读:
    2017-2018-1 20145237、20155205、20155218实验一 开发环境的熟悉
    作业三总结
    作业二总结
    作业总结1
    自我介绍
    计科16-4刘悦
    第九次作业
    作业八
    作业七
    作业六
  • 原文地址:https://www.cnblogs.com/GLory-LTF/p/15359485.html
Copyright © 2011-2022 走看看