1. 程式人生 > 其它 >命令執行繞過的方法

命令執行繞過的方法

談談繞過的方法

在這之前,我們先來總結一下常用的命令注入繞過方法,還是挺有意思的,會對 Linux 指令更加熟練(下面有些 Linux 命令只在 bash 下有效,在 zsh 裡面可能會不行)

拼接型

命令作用
& 表示任務在後臺執行
&& 表示前一條命令執行成功時才執行後面一條命令
| 表示上一命令的輸出作為下一命令的引數
|| 表示上一條命令執行失敗後才執行下一條命令
; 不管前面的命令成不成功都執行後面的命令

奇淫技巧

在網上看部落格的時候就發現了好多命令注入繞過的方法,真是重新整理了我的思維,記錄一下

繞過空格

Linux 下會有很多可以繞過空格的方法,因為題目可能會限制我們不能輸入空格,但是我們可以通過一些特殊的字元繞過,現在假設我們的環境是 Linux ,當前環境下有一個名叫 file1 的檔案,我們現在要訪問裡面的內容,一般就是使用cat

命令了

$ cat file1                                                                 
hello                                                                                     
world

${IFS}

要是不讓用空格呢?在 Linux 下,有很多方法可以繞過空格,${IFS}IFSIFS9IFSIFS9都表示空格,可以繞過空格,這裡$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:~$ c\at file1                                                               
hello                                                                                     
world                                                                                     
kevin@laptop:~$ c\at fi\le\1                                                             
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