命令執行繞過的方法
談談繞過的方法
在這之前,我們先來總結一下常用的命令注入繞過方法,還是挺有意思的,會對 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 worldView 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